1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Ddeboer\DataImport\Tests\Reader; |
4
|
|
|
|
5
|
|
|
use Ddeboer\DataImport\Reader\PdoReader; |
6
|
|
|
// use Doctrine\DBAL\Configuration; |
7
|
|
|
// use Doctrine\DBAL\DriverManager; |
8
|
|
|
// use Doctrine\DBAL\Platforms\SqlitePlatform; |
9
|
|
|
|
10
|
|
|
class PdoReaderTest extends \PHPUnit_Framework_TestCase |
11
|
|
|
{ |
12
|
|
|
public function testGetFields() |
13
|
|
|
{ |
14
|
|
|
$fields = $this->getReader()->getFields(); |
15
|
|
|
$this->assertInternalType('array', $fields); |
16
|
|
|
$this->assertEquals(array('id', 'username', 'name'), $fields); |
17
|
|
|
} |
18
|
|
|
|
19
|
|
|
public function testCount() |
20
|
|
|
{ |
21
|
|
|
$this->assertEquals(100, $this->getReader()->count()); |
22
|
|
|
} |
23
|
|
|
|
24
|
|
|
public function testIterate() |
25
|
|
|
{ |
26
|
|
|
$i=1; |
27
|
|
|
foreach ($this->getReader() as $row) { |
28
|
|
|
$this->assertInternalType('array', $row); |
29
|
|
|
$this->assertEquals('user-'.$i, $row['username']); |
30
|
|
|
$i++; |
31
|
|
|
} |
32
|
|
|
} |
33
|
|
|
|
34
|
|
|
public function testReaderRewindWorksCorrectly() |
35
|
|
|
{ |
36
|
|
|
$reader = $this->getReader(); |
37
|
|
|
foreach ($reader as $row) { |
|
|
|
|
38
|
|
|
} |
39
|
|
|
|
40
|
|
|
foreach ($reader as $row) { |
|
|
|
|
41
|
|
|
} |
42
|
|
|
} |
43
|
|
|
|
44
|
|
|
public function getConnection() |
45
|
|
|
{ |
46
|
|
|
$connection = new \PDO('sqlite::memory:'); |
47
|
|
|
// Set error mode = exception for easy debugging |
48
|
|
|
$connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); |
49
|
|
|
|
50
|
|
|
// Build schema |
51
|
|
|
$connection->query('CREATE TABLE pdo_group ( |
52
|
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT, |
53
|
|
|
name VARCHAR(45) |
54
|
|
|
)'); |
55
|
|
|
|
56
|
|
|
$connection->query('CREATE TABLE pdo_user ( |
57
|
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT, |
58
|
|
|
username VARCHAR(32), |
59
|
|
|
group_id INTEGER, |
60
|
|
|
FOREIGN KEY(group_id) REFERENCES pdo_group(id) |
61
|
|
|
)'); |
62
|
|
|
$connection->query('CREATE UNIQUE INDEX user_username ON pdo_user(username)'); |
63
|
|
|
|
64
|
|
|
return $connection; |
65
|
|
|
} |
66
|
|
|
|
67
|
|
|
protected function getReader() |
68
|
|
|
{ |
69
|
|
|
$connection = $this->getConnection(); |
70
|
|
|
|
71
|
|
|
$group_insert = $connection->prepare('INSERT INTO pdo_group (name) VALUES (:name)'); |
72
|
|
|
$user_insert = $connection->prepare('INSERT INTO pdo_user (username, group_id) VALUES (:username, :group)'); |
73
|
|
|
|
74
|
|
|
$counter = 1; |
75
|
|
|
for ($i = 1; $i <= 10; $i++) { |
76
|
|
|
$group_insert->execute(array(':name' => "name {$i}")); |
77
|
|
|
$id = $connection->lastInsertId(); |
78
|
|
|
|
79
|
|
|
for ($j = 1; $j <= 10; $j++) { |
80
|
|
|
$user_insert->execute(array( |
81
|
|
|
':username' => "user-{$counter}", |
82
|
|
|
':group' => $id |
83
|
|
|
)); |
84
|
|
|
|
85
|
|
|
$counter++; |
86
|
|
|
} |
87
|
|
|
} |
88
|
|
|
|
89
|
|
|
return new PdoReader($connection, 'SELECT u.id, u.username, g.name FROM `pdo_user` u INNER JOIN `pdo_group` g ON u.group_id = g.id'); |
90
|
|
|
} |
91
|
|
|
} |
92
|
|
|
|
This check looks for
foreach
loops that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.Consider removing the loop.