Deprecated: Assigning the return value of new by reference is deprecated in /home/bluestat/public_html/source/index.php on line 477
ISSO - Blob - ViewGit - Blue Static
<?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());
	}
}

?>