Completed
Pull Request — master (#3)
by Joao
06:17 queued 02:28
created

BasePdo   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 149
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 14
lcom 1
cbo 3
dl 0
loc 149
rs 10
c 0
b 0
f 0

12 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 6 1
A createInstance() 0 4 1
A populateData() 0 11 2
createDatabase() 0 1 ?
deleteDatabase() 0 1 ?
A tearDown() 0 4 1
A allData() 0 23 1
A testGetIterator() 0 23 3
A testExecuteAndGetId() 0 8 1
A testGetAllFields() 0 14 1
B testMultipleRowset() 0 24 2
A testParameterInsideQuotes() 0 10 1
1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 12 and the first side effect is on line 9.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
3
namespace TestsDb\AnyDataset;
4
5
use ByJG\AnyDataset\DbDriverInterface;
6
7
// backward compatibility
8
if (!class_exists('\PHPUnit\Framework\TestCase')) {
9
    class_alias('\PHPUnit_Framework_TestCase', '\PHPUnit\Framework\TestCase');
10
}
11
12
abstract class BasePdo extends \PHPUnit\Framework\TestCase
13
{
14
15
    /**
16
     * @var DbDriverInterface
17
     */
18
    protected $dbDriver;
19
20
    public function setUp()
21
    {
22
        $this->createInstance();
23
        $this->createDatabase();
24
        $this->populateData();
25
    }
26
27
    protected function createInstance()
28
    {
29
        throw new \Exception('Implement createInstance method');
30
    }
31
32
    protected function populateData()
33
    {
34
        //insert some data...
35
        $array = $this->allData();
36
        foreach ($array as $param) {
37
            $this->dbDriver->execute(
38
                "INSERT INTO Dogs (Breed, Name, Age) VALUES (:breed, :name, :age);",
39
                $param
40
            );
41
        }
42
    }
43
44
    abstract protected function createDatabase();
45
46
    abstract protected function deleteDatabase();
47
48
    public function tearDown()
49
    {
50
        $this->deleteDatabase();
51
    }
52
53
    protected function allData()
54
    {
55
        return [
56
            [
57
                'breed' => 'Mutt',
58
                'name' => 'Spyke',
59
                'age' => 8,
60
                'id' => 1
61
            ],
62
            [
63
                'breed' => 'Brazilian Terrier',
64
                'name' => 'Sandy',
65
                'age' => 3,
66
                'id' => 2
67
            ],
68
            [
69
                'breed' => 'Pinscher',
70
                'name' => 'Lola',
71
                'age' => 1,
72
                'id' => 3
73
            ]
74
        ];
75
    }
76
77
    public function testGetIterator()
78
    {
79
        $array = $this->allData();
80
81
        // Step 1
82
        $iterator = $this->dbDriver->getIterator('select * from Dogs');
83
        $this->assertEquals($array, $iterator->toArray());
84
85
        // Step 2
86
        $iterator = $this->dbDriver->getIterator('select * from Dogs');
87
        $i = 0;
88
        foreach ($iterator as $singleRow) {
89
            $this->assertEquals($array[$i++], $singleRow->toArray());
90
        }
91
92
        // Step 3
93
        $iterator = $this->dbDriver->getIterator('select * from Dogs');
94
        $i = 0;
95
        while ($iterator->hasNext()) {
96
            $singleRow = $iterator->moveNext();
97
            $this->assertEquals($array[$i++], $singleRow->toArray());
98
        }
99
    }
100
101
    public function testExecuteAndGetId()
102
    {
103
        $idInserted = $this->dbDriver->executeAndGetId(
104
            "INSERT INTO Dogs (Breed, Name, Age) VALUES ('Cat', 'Doris', 7);"
105
        );
106
107
        $this->assertEquals(4, $idInserted);
108
    }
109
110
    public function testGetAllFields()
111
    {
112
        $allFields = $this->dbDriver->getAllFields('Dogs');
113
114
        $this->assertEquals(
115
            [
116
                'id',
117
                'breed',
118
                'name',
119
                'age'
120
            ],
121
            $allFields
122
        );
123
    }
124
125
    public function testMultipleRowset()
126
    {
127
        if (!$this->dbDriver->isSupportMultRowset()) {
128
            $this->markTestSkipped('This DbDriver does not have this method');
129
            return;
130
        }
131
132
        $sql = "INSERT INTO Dogs (Breed, Name, Age) VALUES ('Cat', 'Doris', 7); " .
133
            "INSERT INTO Dogs (Breed, Name, Age) VALUES ('Dog', 'Lolla', 1); ";
134
135
        $idInserted = $this->dbDriver->executeAndGetId($sql);
136
137
        $this->assertEquals(5, $idInserted);
138
139
        $this->assertEquals(
140
            'Doris',
141
            $this->dbDriver->getScalar('select name from Dogs where Id = :id', ['id' => 4])
142
        );
143
144
        $this->assertEquals(
145
            'Lolla',
146
            $this->dbDriver->getScalar('select name from Dogs where Id = :id', ['id' => 5])
147
        );
148
    }
149
150
    public function testParameterInsideQuotes()
151
    {
152
        $sql = "INSERT INTO Dogs (Breed, Name, Age) VALUES ('Cat', 'a:Doris', 7); ";
153
        $id = $this->dbDriver->executeAndGetId($sql);
154
        $this->assertEquals(4, $id);
155
156
        $sql = "select id from Dogs where name = 'a:Doris'";
157
        $id = $this->dbDriver->getScalar($sql);
158
        $this->assertEquals(4, $id);
159
    }
160
}
161