Test Failed
Push — master ( a34e3e...fe03e3 )
by Adam
06:56
created

DatabaseTest::testSelectAll()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 10
Bugs 0 Features 0
Metric Value
dl 0
loc 7
rs 9.4285
c 10
b 0
f 0
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
namespace DBAL\Tests;
3
4
use PHPUnit\Framework\TestCase;
5
use DBAL\Database;
6
use DBAL\Caching\MemcachedCache;
7
8
class DatabaseTest extends TestCase{
9
    public $db;
10
    
11
    protected $test_table = 'test_table';
12
    
13
    /**
14
     * @covers \DBAL\Database::__construct
15
     * @covers \DBAL\Database::connectToServer
16
     * @covers \DBAL\Database::isConnected
17
     */
18
    public function setUp(){
19
        $this->connectToLiveDB();
20
        if(!$this->db->isConnected()){
21
            $this->markTestSkipped(
22
                'No local database connection is available'
23
            );
24
        }
25
        else{
26
            $this->db->query("DROP TABLE IF EXISTS `{$this->test_table}`;");
27
            $this->db->query("CREATE TABLE `{$this->test_table}` (
28
    `id` int(11) NOT NULL AUTO_INCREMENT,
29
    `name` varchar(255) NOT NULL,
30
    `text_field` text NOT NULL,
31
    `number_field` int(11) NOT NULL,
32
    PRIMARY KEY (`id`)
33
);");
34
            $this->db->insert($this->test_table, array('name' => 'My Name', 'text_field' => 'Hello World', 'number_field' => 256));
35
            $this->db->insert($this->test_table, array('name' => 'Inigo Montoya', 'text_field' => 'You killed my father, prepare to die', 'number_field' => 320));
36
        }
37
    }
38
    
39
    /**
40
     * @covers \DBAL\Database::__destruct
41
     * @covers \DBAL\Database::closeDatabase
42
     */
43
    public function tearDown(){
44
        $this->db = null;
45
    }
46
    
47
    /**
48
     * @covers \DBAL\Database::connectToServer
49
     * @covers \DBAL\Database::isConnected
50
     */
51
    public function testConnect(){
52
        $this->assertTrue($this->db->isConnected());
53
    }
54
    
55
    /**
56
     * @covers \DBAL\Database::__construct
57
     * @covers \DBAL\Database::connectToServer
58
     * @covers \DBAL\Database::isConnected
59
     * @covers \DBAL\Database::error
60
     */
61
    public function testConnectFailure(){
62
        $db = new Database('localhost', 'wrong_username', 'incorrect_password', 'non_existent_db');
63
        $this->assertFalse($db->isConnected());
64
        $this->connectToLiveDB();
65
    }
66
    
67
    /**
68
     * @covers \DBAL\Database::query
69
     */
70
    public function testQuery(){
71
        // Insert a couple of test vales
72
        $this->db->insert($this->test_table, array('name' => 'My Name', 'text_field' => 'Hello World', 'number_field' => rand(1, 1000)));
73
        $this->db->insert($this->test_table, array('name' => 'Inigo Montoya', 'text_field' => 'You killed my father, prepare to die', 'number_field' => rand(1, 1000)));
74
        $query = $this->db->query("SELECT * FROM `test_table` WHERE `id` = ?", array(1));
75
        $this->assertArrayHasKey(0, $query);
76
        $this->assertCount(1, $query);
77
    }
78
    
79
    /**
80
     * @covers \DBAL\Database::select
81
     * @covers \DBAL\Database::selectAll
82
     * @covers \DBAL\Database::buildSelectQuery
83
     * @covers \DBAL\Database::orderBy
84
     * @covers \DBAL\Database::formatValues
85
     * @covers \DBAL\Database::executeQuery
86
     * @covers \DBAL\Database::bindValues
87
     * @covers \DBAL\Modifiers\Operators::getOperatorFormat
88
     * @covers \DBAL\Modifiers\Operators::isOperatorValid
89
     * @covers \DBAL\Modifiers\Operators::isOperatorPrepared
90
     * @covers \DBAL\Modifiers\SafeString::makeSafe
91
     */
92
    public function testSelect(){
93
       $simpleSelect = $this->db->select($this->test_table, array('id' => array('>', 1)), '*', array('id' => 'ASC'));
94
       $this->assertArrayHasKey('name', $simpleSelect);
95
    }
96
    
97
    /**
98
     * @covers \DBAL\Database::selectAll
99
     * @covers \DBAL\Database::buildSelectQuery
100
     * @covers \DBAL\Database::numRows
101
     * @covers \DBAL\Database::rowCount
102
     * @covers \DBAL\Database::limit
103
     * @covers \DBAL\Database::executeQuery
104
     * @covers \DBAL\Database::bindValues
105
     * @covers \DBAL\Modifiers\SafeString::makeSafe
106
     */
107
    public function testSelectAll(){
108
        $selectAll = $this->db->selectAll($this->test_table);
109
        $this->assertGreaterThan(1, $this->db->numRows());
110
        $this->assertArrayHasKey('id', $selectAll[0]);
111
        $this->db->selectAll($this->test_table, array(), '*', array(), 1);
112
        $this->assertEquals(1, $this->db->rowCount());
113
    }
114
    
115
    /**
116
     * @covers \DBAL\Database::selectAll
117
     * @covers \DBAL\Database::buildSelectQuery
118
     * @covers \DBAL\Database::executeQuery
119
     * @covers \DBAL\Database::bindValues
120
     * @covers \DBAL\Modifiers\SafeString::makeSafe
121
     */
122
    public function testSelectFailure(){
123
        $this->assertFalse($this->db->selectAll($this->test_table, array('id' => 100)));
124
        $this->assertFalse($this->db->selectAll('unknown_table'));
125
    }
126
    
127
    /**
128
     * @covers \DBAL\Database::fetchColumn
129
     * @covers \DBAL\Database::buildSelectQuery
130
     * @covers \DBAL\Database::executeQuery
131
     * @covers \DBAL\Database::bindValues
132
     * @covers \DBAL\Modifiers\SafeString::makeSafe
133
     */
134
    public function testFetchColumn(){
135
        $this->assertEquals('Inigo Montoya', $this->db->fetchColumn($this->test_table, array('id' => 2), '*', 1));
136
    }
137
    
138
    /**
139
     * @covers \DBAL\Database::fetchColumn
140
     * @covers \DBAL\Database::buildSelectQuery
141
     * @covers \DBAL\Database::executeQuery
142
     * @covers \DBAL\Database::bindValues
143
     * @covers \DBAL\Modifiers\SafeString::makeSafe
144
     */
145
    public function testFetchColumnFailure(){
146
        $this->assertFalse($this->db->fetchColumn($this->test_table, array('id' => 2), '*', 6));
147
    }
148
149
150
    /**
151
     * @covers \DBAL\Database::insert
152
     * @covers \DBAL\Database::numRows
153
     * @covers \DBAL\Database::executeQuery
154
     * @covers \DBAL\Database::bindValues
155
     */
156
    public function testInsert(){
157
        $this->assertTrue($this->db->insert($this->test_table, array('name' => 'Third User', 'text_field' => 'Helloooooo', 'number_field' => rand(1, 1000))));
158
    }
159
    
160
    /**
161
     * @covers \DBAL\Database::insert
162
     * @covers \DBAL\Database::numRows
163
     * @covers \DBAL\Database::executeQuery
164
     * @covers \DBAL\Database::bindValues
165
     */
166
    public function testInsertFailure(){
167
        $this->assertFalse($this->db->insert($this->test_table, array('id' => 3, 'name' => 'Third User', 'text_field' => NULL, 'number_field' => rand(1, 1000))));
168
    }
169
    
170
    /**
171
     * @covers \DBAL\Database::update
172
     * @covers \DBAL\Database::numRows
173
     * @covers \DBAL\Database::executeQuery
174
     * @covers \DBAL\Database::bindValues
175
     */
176
    public function testUpdate(){
177
        $this->assertTrue($this->db->update($this->test_table, array('text_field' => 'Altered text', 'number_field' => rand(1, 1000)), array('id' => 1)));
178
    }
179
    
180
    /**
181
     * @covers \DBAL\Database::update
182
     * @covers \DBAL\Database::numRows
183
     * @covers \DBAL\Database::executeQuery
184
     * @covers \DBAL\Database::bindValues
185
     */
186
    public function testUpdateFailure(){
187
        $this->assertFalse($this->db->update($this->test_table, array('number_field' => 256), array('id' => 1)));
188
    }
189
    
190
    /**
191
     * @covers \DBAL\Database::delete
192
     * @covers \DBAL\Database::numRows
193
     * @covers \DBAL\Database::formatValues
194
     * @covers \DBAL\Database::executeQuery
195
     * @covers \DBAL\Database::bindValues
196
     * @covers \DBAL\Modifiers\Operators::getOperatorFormat
197
     * @covers \DBAL\Modifiers\Operators::isOperatorValid
198
     * @covers \DBAL\Modifiers\Operators::isOperatorPrepared
199
     * @covers \DBAL\Modifiers\SafeString::makeSafe
200
     */
201
    public function testDelete(){
202
        $this->assertTrue($this->db->delete($this->test_table, array('id' => array('>=', 2))));
203
    }
204
    
205
    /**
206
     * @covers \DBAL\Database::delete
207
     * @covers \DBAL\Database::numRows
208
     * @covers \DBAL\Database::executeQuery
209
     * @covers \DBAL\Database::bindValues
210
     */
211
    public function testDeleteFailure(){
212
        $this->assertFalse($this->db->delete($this->test_table, array('id' => 3)));
213
    }
214
    
215
    /**
216
     * @covers \DBAL\Database::count
217
     * @covers \DBAL\Database::executeQuery
218
     */    
219
    public function testCount(){
220
        $this->assertEquals(2, $this->db->count($this->test_table));
221
    }
222
    
223
    /**
224
     * @covers \DBAL\Database::lastInsertID
225
     */
226
    public function testLastInsertID(){
227
        $this->testInsert();
228
        $this->assertEquals(3, $this->db->lastInsertID());
229
    }
230
    
231
    /**
232
     * @covers \DBAL\Database::setCaching
233
     */
234
    public function testSetCaching(){
235
        $caching = new MemcachedCache();
236
        if(is_object($caching)){
237
            $this->db->setCaching($caching);
238
        }
239
    }
240
    
241
    protected function connectToLiveDB(){
242
        $this->db = new Database($GLOBALS['HOSTNAME'], $GLOBALS['USERNAME'], $GLOBALS['PASSWORD'], $GLOBALS['DATABASE'], false, false, true, $GLOBALS['DRIVER']);
243
    }
244
}
245