PdoReaderTest::getReader()   B
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 24
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 24
rs 8.9713
c 0
b 0
f 0
cc 3
eloc 14
nc 3
nop 0
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) {
0 ignored issues
show
Unused Code introduced by
This foreach statement is empty and can be removed.

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.

Loading history...
38
		}
39
40
		foreach ($reader as $row) {
0 ignored issues
show
Unused Code introduced by
This foreach statement is empty and can be removed.

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.

Loading history...
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