<?php
require_once 'PHPUnit/Framework.php';
abstract class DatabaseTestAbstract extends PHPUnit_Framework_TestCase
{
public function setUp()
{
throw new Exception('You must impelement setUp() yourself!');
}
public function tearDown()
{
throw new Exception('You must implement tearDown() yourself!');
}
public abstract function testConnect();
public function testInsertSelect()
{
try
{
$this->fixture->query("INSERT INTO test (textstuff) VALUES ('moo'), ('foo'), ('hey'), ('foo'), ('boo'), ('poo')");
}
catch (BSDbException $e)
{
$this->fail('unexpected exception');
}
try
{
$res = $this->fixture->query("SELECT * FROM test WHERE textstuff = 'foo'");
$row = $res->fetchArray();
$this->assertNotNull($row['textstuff']);
$row = $res->fetchArray();
$this->assertNotNull($row['textstuff']);
$row = $res->fetchArray();
$this->assertNull($row['textstuff']);
}
catch (BSDbException $e)
{
$this->fail('unexpected exception');
}
}
public function testIterator()
{
$this->fixture->query("INSERT INTO test (textstuff) VALUES ('a'), ('b'), ('c')");
$result = $this->fixture->query("SELECT * FROM test");
$i = 0;
foreach ($result as $item)
{
$i++;
}
$this->assertEquals(3, $i);
}
public function testEscapeString()
{
$this->assertEquals("Robert\'s castle", $this->fixture->escapeString("Robert's castle"));
}
public function testFetchObject()
{
try
{
$this->fixture->query("INSERT INTO test (textstuff) VALUES ('foo')");
}
catch (BSDbException $e)
{
$this->fail('unexpected exception');
}
try
{
$res = $this->fixture->query("SELECT * FROM test");
$obj = $res->fetchObject();
$this->assertNotNull($obj);
$this->assertEquals('foo', $obj->textstuff);
}
catch (BSDbException $e)
{
$this->fail('unexpected exception');
}
}
public function testQueryFirst()
{
try
{
$this->fixture->query("INSERT INTO test (textstuff) VALUES ('abc'), ('123'), ('def')");
}
catch (BSDbException $e)
{
$this->fail('unexpected exception');
}
try
{
$res = $this->fixture->queryFirst("SELECT * FROM test ORDER BY id DESC");
$this->assertEquals('def', $res['textstuff']);
}
catch (BSDbException $e)
{
$this->fail('unexpected exception');
}
}
public function testInsertId()
{
try
{
$this->fixture->query("INSERT INTO test (textstuff) VALUES ('abc')");
$this->assertEquals(1, $this->fixture->insertId('test', 'textstuff'));
$this->fixture->query("INSERT INTO test (textstuff) VALUES ('123')");
$this->assertEquals(2, $this->fixture->insertId('test', 'textstuff'));
}
catch (BSDbException $e)
{
$this->fail('unexpected exception');
}
}
public function testNumRows()
{
try
{
$this->fixture->query("INSERT INTO test (textstuff) VALUES ('123'), ('456'), ('789')");
$res = $this->fixture->query("SELECT * FROM test");
$this->assertEquals(3, $res->size());
$res = $this->fixture->query("SELECT * FROM test WHERE textstuff = '--invalid value--'");
$this->assertEquals(0, $res->size());
}
catch (BSDbException $e)
{
$this->fail('unexpected exception');
}
}
public function testAffectedRows()
{
try
{
$this->fixture->query("INSERT INTO test (textstuff) VALUES ('123'), ('456'), ('123')");
$res = $this->fixture->query("UPDATE test SET textstuff = 'abc' WHERE textstuff = '123'");
$this->assertEquals(2, $this->fixture->affectedRows());
$res = $this->fixture->query("SELECT * FROM test WHERE textstuff = 'abc'");
$this->assertEquals(2, $res->size());
}
catch (BSDbException $e)
{
$this->fail('unexpected exception');
}
}
public function testInvalidQuery()
{
try
{
$this->fixture->query("SELECT * FROM foobar");
$this->fail('exception expected');
}
catch (BSDbException $e)
{
$this->assertEquals('SELECT * FROM foobar', $e->getQuery());
}
}
public function testTransactions()
{
$this->fixture->begin();
$this->fixture->query("INSERT INTO test (textstuff) VALUES ('foo')");
$this->fixture->commit();
$res = $this->fixture->query("SELECT * FROM test WHERE textstuff = 'foo'");
$this->assertEquals(1, $res->size());
$this->fixture->begin();
$this->fixture->query("UPDATE test SET textstuff = 'abc'");
$this->fixture->rollback();
$res = $this->fixture->query("SELECT * FROM test WHERE textstuff = 'abc'");
$this->assertEquals(0, $res->size());
$res = $this->fixture->query("SELECT * FROM test WHERE textstuff = 'foo'");
$this->assertEquals(1, $res->size());
}
}
?>