Add a test for the new Iterarator implementation in BSDBResult
[isso.git] / UnitTest / DatabaseTestAbstract.php
1 <?php
2
3 require_once 'PHPUnit/Framework.php';
4
5 abstract class DatabaseTestAbstract extends PHPUnit_Framework_TestCase
6 {
7 public function setUp()
8 {
9 throw new Exception('You must impelement setUp() yourself!');
10 }
11
12 public function tearDown()
13 {
14 throw new Exception('You must implement tearDown() yourself!');
15 }
16
17 public abstract function testConnect();
18
19 public function testInsertSelect()
20 {
21 try
22 {
23 $this->fixture->query("INSERT INTO test (textstuff) VALUES ('moo'), ('foo'), ('hey'), ('foo'), ('boo'), ('poo')");
24 }
25 catch (BSDbException $e)
26 {
27 $this->fail('unexpected exception');
28 }
29
30 try
31 {
32 $res = $this->fixture->query("SELECT * FROM test WHERE textstuff = 'foo'");
33
34 $row = $res->fetchArray();
35 $this->assertNotNull($row['textstuff']);
36
37 $row = $res->fetchArray();
38 $this->assertNotNull($row['textstuff']);
39
40 $row = $res->fetchArray();
41 $this->assertNull($row['textstuff']);
42 }
43 catch (BSDbException $e)
44 {
45 $this->fail('unexpected exception');
46 }
47 }
48
49 public function testIterator()
50 {
51 $this->fixture->query("INSERT INTO test (textstuff) VALUES ('a'), ('b'), ('c')");
52 $result = $this->fixture->query("SELECT * FROM test");
53
54 $i = 0;
55 foreach ($result as $item)
56 {
57 $i++;
58 }
59
60 $this->assertEquals(3, $i);
61 }
62
63 public function testEscapeString()
64 {
65 $this->assertEquals("Robert\'s castle", $this->fixture->escapeString("Robert's castle"));
66 }
67
68 public function testFetchObject()
69 {
70 try
71 {
72 $this->fixture->query("INSERT INTO test (textstuff) VALUES ('foo')");
73 }
74 catch (BSDbException $e)
75 {
76 $this->fail('unexpected exception');
77 }
78
79 try
80 {
81 $res = $this->fixture->query("SELECT * FROM test");
82 $obj = $res->fetchObject();
83
84 $this->assertNotNull($obj);
85 $this->assertEquals('foo', $obj->textstuff);
86 }
87 catch (BSDbException $e)
88 {
89 $this->fail('unexpected exception');
90 }
91 }
92
93 public function testQueryFirst()
94 {
95 try
96 {
97 $this->fixture->query("INSERT INTO test (textstuff) VALUES ('abc'), ('123'), ('def')");
98 }
99 catch (BSDbException $e)
100 {
101 $this->fail('unexpected exception');
102 }
103
104 try
105 {
106 $res = $this->fixture->queryFirst("SELECT * FROM test ORDER BY id DESC");
107 $this->assertEquals('def', $res['textstuff']);
108 }
109 catch (BSDbException $e)
110 {
111 $this->fail('unexpected exception');
112 }
113 }
114
115 public function testInsertId()
116 {
117 try
118 {
119 $this->fixture->query("INSERT INTO test (textstuff) VALUES ('abc')");
120 $this->assertEquals(1, $this->fixture->insertId('test', 'textstuff'));
121
122 $this->fixture->query("INSERT INTO test (textstuff) VALUES ('123')");
123 $this->assertEquals(2, $this->fixture->insertId('test', 'textstuff'));
124 }
125 catch (BSDbException $e)
126 {
127 $this->fail('unexpected exception');
128 }
129 }
130
131 public function testNumRows()
132 {
133 try
134 {
135 $this->fixture->query("INSERT INTO test (textstuff) VALUES ('123'), ('456'), ('789')");
136
137 $res = $this->fixture->query("SELECT * FROM test");
138 $this->assertEquals(3, $res->size());
139
140 $res = $this->fixture->query("SELECT * FROM test WHERE textstuff = '--invalid value--'");
141 $this->assertEquals(0, $res->size());
142 }
143 catch (BSDbException $e)
144 {
145 $this->fail('unexpected exception');
146 }
147 }
148
149 public function testAffectedRows()
150 {
151 try
152 {
153 $this->fixture->query("INSERT INTO test (textstuff) VALUES ('123'), ('456'), ('123')");
154
155 $res = $this->fixture->query("UPDATE test SET textstuff = 'abc' WHERE textstuff = '123'");
156 $this->assertEquals(2, $this->fixture->affectedRows());
157
158 $res = $this->fixture->query("SELECT * FROM test WHERE textstuff = 'abc'");
159 $this->assertEquals(2, $res->size());
160 }
161 catch (BSDbException $e)
162 {
163 $this->fail('unexpected exception');
164 }
165 }
166
167 public function testInvalidQuery()
168 {
169 try
170 {
171 $this->fixture->query("SELECT * FROM foobar");
172 $this->fail('exception expected');
173 }
174 catch (BSDbException $e)
175 {
176 $this->assertEquals('SELECT * FROM foobar', $e->getQuery());
177 }
178 }
179
180 public function testTransactions()
181 {
182 $this->fixture->begin();
183 $this->fixture->query("INSERT INTO test (textstuff) VALUES ('foo')");
184 $this->fixture->commit();
185
186 $res = $this->fixture->query("SELECT * FROM test WHERE textstuff = 'foo'");
187 $this->assertEquals(1, $res->size());
188
189 $this->fixture->begin();
190 $this->fixture->query("UPDATE test SET textstuff = 'abc'");
191 $this->fixture->rollback();
192
193 $res = $this->fixture->query("SELECT * FROM test WHERE textstuff = 'abc'");
194 $this->assertEquals(0, $res->size());
195
196 $res = $this->fixture->query("SELECT * FROM test WHERE textstuff = 'foo'");
197 $this->assertEquals(1, $res->size());
198 }
199 }
200
201 ?>