<?php

uses ('test', 'dbo_postgres');

class DBOPostgresTest extends TestCase {
	var $abc;

	// constructor of the test suite
	function DBOPostgresTest($name) {
		$this->TestCase($name);
	}

	// called before the test functions will be executed
	// this function is defined in PHPUnit_TestCase and overwritten
	// here
	function setUp() {
		$this->abc = new DBO_Postgres (loadDatabaseConfig('test'));
		$this->createTemporaryTable();
	}

	// called after the test functions are executed
	// this function is defined in PHPUnit_TestCase and overwritten
	// here
	function tearDown() {
		$this->dropTemporaryTable();
	}


	function createTemporaryTable () {
		$sql = "CREATE TABLE __test (id serial NOT NULL, body CHARACTER VARYING(255))"; // postgresql
		// $sql = "CREATE TABLE __test (id INT UNSIGNED PRIMARY KEY, body VARCHAR(255))"; // mysql

		return $this->abc->query($sql);
	}

	function dropTemporaryTable () {
		return $this->abc->query("DROP TABLE __test");
	}

	function testHasImplementation () {
		$functions = array(
			 'connect',
			 'disconnect',
			 'execute',
			 'fetchRow',
			 'tables',
			 'fields',
			 'prepare',
			 'lastError',
			 'lastAffected',
			 'lastNumRows',
			 'lastInsertId'
		);

		foreach ($functions as $function) {
			$this->assertTrue(method_exists($this->abc, $function));
		}
	}

	function testConnectivity () {
		$this->assertTrue($this->abc->connected);
	}

	function testFields () {
		$fields = $this->abc->fields('__test');
		$this->assertEquals(count($fields), 2, 'equals');
	}

	function testTables () {
		$this->assertTrue(in_array('__test', $this->abc->tables()));
	}
}

?>