3 require_once 'PHPUnit/Framework.php';
5 abstract class DatabaseTestAbstract
extends PHPUnit_Framework_TestCase
7 public function setUp()
9 throw new Exception('You must impelement setUp() yourself!');
12 public function tearDown()
14 throw new Exception('You must implement tearDown() yourself!');
17 public abstract function testConnect();
19 public function testInsertSelect()
23 $this->fixture
->query("INSERT INTO test (textstuff) VALUES ('moo'), ('foo'), ('hey'), ('foo'), ('boo'), ('poo')");
25 catch (BSDbException
$e)
27 $this->fail('unexpected exception');
32 $res = $this->fixture
->query("SELECT * FROM test WHERE textstuff = 'foo'");
34 $row = $res->fetchArray();
35 $this->assertNotNull($row['textstuff']);
37 $row = $res->fetchArray();
38 $this->assertNotNull($row['textstuff']);
40 $row = $res->fetchArray();
41 $this->assertNull($row['textstuff']);
43 catch (BSDbException
$e)
45 $this->fail('unexpected exception');
49 public function testIterator()
51 $this->fixture
->query("INSERT INTO test (textstuff) VALUES ('a'), ('b'), ('c')");
52 $result = $this->fixture
->query("SELECT * FROM test");
55 foreach ($result as $item)
60 $this->assertEquals(3, $i);
63 public function testEscapeString()
65 $this->assertEquals("Robert\'s castle", $this->fixture
->escapeString("Robert's castle"));
68 public function testFetchObject()
72 $this->fixture
->query("INSERT INTO test (textstuff) VALUES ('foo')");
74 catch (BSDbException
$e)
76 $this->fail('unexpected exception');
81 $res = $this->fixture
->query("SELECT * FROM test");
82 $obj = $res->fetchObject();
84 $this->assertNotNull($obj);
85 $this->assertEquals('foo', $obj->textstuff
);
87 catch (BSDbException
$e)
89 $this->fail('unexpected exception');
93 public function testQueryFirst()
97 $this->fixture
->query("INSERT INTO test (textstuff) VALUES ('abc'), ('123'), ('def')");
99 catch (BSDbException
$e)
101 $this->fail('unexpected exception');
106 $res = $this->fixture
->queryFirst("SELECT * FROM test ORDER BY id DESC");
107 $this->assertEquals('def', $res['textstuff']);
109 catch (BSDbException
$e)
111 $this->fail('unexpected exception');
115 public function testInsertId()
119 $this->fixture
->query("INSERT INTO test (textstuff) VALUES ('abc')");
120 $this->assertEquals(1, $this->fixture
->insertId('test', 'textstuff'));
122 $this->fixture
->query("INSERT INTO test (textstuff) VALUES ('123')");
123 $this->assertEquals(2, $this->fixture
->insertId('test', 'textstuff'));
125 catch (BSDbException
$e)
127 $this->fail('unexpected exception');
131 public function testNumRows()
135 $this->fixture
->query("INSERT INTO test (textstuff) VALUES ('123'), ('456'), ('789')");
137 $res = $this->fixture
->query("SELECT * FROM test");
138 $this->assertEquals(3, $res->size());
140 $res = $this->fixture
->query("SELECT * FROM test WHERE textstuff = '--invalid value--'");
141 $this->assertEquals(0, $res->size());
143 catch (BSDbException
$e)
145 $this->fail('unexpected exception');
149 public function testAffectedRows()
153 $this->fixture
->query("INSERT INTO test (textstuff) VALUES ('123'), ('456'), ('123')");
155 $res = $this->fixture
->query("UPDATE test SET textstuff = 'abc' WHERE textstuff = '123'");
156 $this->assertEquals(2, $this->fixture
->affectedRows());
158 $res = $this->fixture
->query("SELECT * FROM test WHERE textstuff = 'abc'");
159 $this->assertEquals(2, $res->size());
161 catch (BSDbException
$e)
163 $this->fail('unexpected exception');
167 public function testInvalidQuery()
171 $this->fixture
->query("SELECT * FROM foobar");
172 $this->fail('exception expected');
174 catch (BSDbException
$e)
176 $this->assertEquals('SELECT * FROM foobar', $e->getQuery());
180 public function testTransactions()
182 $this->fixture
->begin();
183 $this->fixture
->query("INSERT INTO test (textstuff) VALUES ('foo')");
184 $this->fixture
->commit();
186 $res = $this->fixture
->query("SELECT * FROM test WHERE textstuff = 'foo'");
187 $this->assertEquals(1, $res->size());
189 $this->fixture
->begin();
190 $this->fixture
->query("UPDATE test SET textstuff = 'abc'");
191 $this->fixture
->rollback();
193 $res = $this->fixture
->query("SELECT * FROM test WHERE textstuff = 'abc'");
194 $this->assertEquals(0, $res->size());
196 $res = $this->fixture
->query("SELECT * FROM test WHERE textstuff = 'foo'");
197 $this->assertEquals(1, $res->size());