Current File : //opt/RZphp72/includes/test/MDB_QueryTool/tests/simpletest_tests/mdb_querytool_testResult.php
<?php
// $Id: mdb_querytool_testResult.php 234854 2007-05-03 17:18:23Z hugoki $

require_once dirname(__FILE__).'/mdb_querytool_test_base.php';
require_once 'MDB/QueryTool/Result/Object.php';

class MDB_QueryTool_Result_Result_Row_Ext extends MDB_QueryTool_Result_Row
{
}

class MDB_QueryTool_Result_Result_Row_Ext2 extends MDB_QueryTool_Result_Result_Row_Ext
{
}


class TestOfMDB_QueryTool_Result extends TestOfMDB_QueryTool
{

    function TestOfMDB_QueryTool_Result($name = __CLASS__) {
        $this->UnitTestCase($name);
    }

    function test_Get_Result_Array() {
        $this->qt = new MDB_QT(TABLE_USER);
        $newData = $this->_getSampleData(1);
        $id      = $this->qt->add($newData);
        $this->assertTrue($id != false);

        $newData['id'] = $id;
        $this->qt->useResult('array');
        $res = $this->qt->getAll();
        $retrieved = $res->fetchRow();

        $this->assertEqual($newData['name'], $retrieved['name']);
        $this->assertEqual($newData['address_id'], $retrieved['address_id']);
    }

    function test_Get_Result_Multiple() {
        $this->qt  = new MDB_QT(TABLE_USER);
        $newData1  = $this->_getSampleData(1);
        $newData2  = $this->_getSampleData(2);
        $ids       = $this->qt->addMultiple(array($newData1,$newData2));

        $this->assertEqual(array(1, 2), $ids);
        
        $retrieved = $this->qt->getMultiple($ids);
        
        $this->assertEqual($newData1['name'], $retrieved[0]['name']);
        $this->assertEqual($newData1['address_id'], $retrieved[0]['address_id']);
        $this->assertEqual($newData2['name'], $retrieved[1]['name']);
        $this->assertEqual($newData2['address_id'], $retrieved[1]['address_id']);
    }

    function test_Get_Result_Custom_Object() {
        $this->qt = new MDB_QT(TABLE_USER);
        $newData  = $this->_getSampleData(1);
        $id       = $this->qt->add($newData);
        $this->assertTrue($id != false);

        //test one-level inheritance
        $classname  = 'MDB_QueryTool_Result_Result_Row_Ext';
        $parentname = 'MDB_QueryTool_Result_Row';
        $this->qt->useResult('object');
        $this->assertTrue($this->qt->setReturnClass($classname));
        $res       = $this->qt->getAll();
        $retrieved = $res->fetchRow();
        $this->assertEqual($classname, get_class($retrieved));
        $this->assertTrue(is_a($retrieved, $parentname));
        
        //test deep inheritance
        $classname  = 'MDB_QueryTool_Result_Result_Row_Ext2';
        $this->qt->useResult('object');
        $this->assertTrue($this->qt->setReturnClass($classname));
        $res       = $this->qt->getAll();
        $retrieved = $res->fetchRow();
        $this->assertEqual($classname, get_class($retrieved));
        $this->assertTrue(is_a($retrieved, $parentname));

        //test failure on invalid class
        $classname  = 'MDB_QueryTool_Result';
        $this->qt->useResult('object');
        $this->assertFalse($this->qt->setReturnClass($classname));
    }
    
    function test_Get_Result_Object() {
        $this->qt = new MDB_QT(TABLE_USER);
        $newData = $this->_getSampleData(1);
        $id      = $this->qt->add($newData);
        $this->assertTrue($id != false);

        $newData['id'] = $id;
        $this->qt->useResult('object');
        $res = $this->qt->getAll();
        $retrieved = $res->fetchRow();
        $this->assertEqual($newData['name'], $retrieved->name);
        $this->assertEqual($newData['address_id'], $retrieved->address_id);

        //test multiple rows
        $newData2 = $this->_getSampleData(2);
        $id2      = $this->qt->add($newData2);
        $this->assertTrue($id2 != false);
        $newData2['id'] = $id2;
        $this->qt->useResult('object');
        $this->qt->setOrder('ID');
        $res = $this->qt->getAll();
        $retrieved = $res->getFirst();
        $this->assertEqual($newData['name'],       $retrieved->name);
        $this->assertEqual($newData['address_id'], $retrieved->address_id);
        $this->assertTrue($res->hasMore());
        $retrieved = $res->getNext();
        $this->assertEqual($newData2['name'],       $retrieved->name);
        $this->assertEqual($newData2['address_id'], $retrieved->address_id);
        //go backwards
        $retrieved = $res->getFirst();
        $this->assertEqual($newData['name'],       $retrieved->name);
        $this->assertEqual($newData['address_id'], $retrieved->address_id);
        $this->assertTrue($this->qt->remove($id2));


        //test getCol => scalar values instead of arrays
        $this->qt->useResult('object');
        $res = $this->qt->getCol('id');

        $retrieved = $res->fetchRow();
        $this->assertEqual($newData['id'], $retrieved);

        //test get() + fetchRow()
        $result = $this->qt->get($newData['id']);
        $this->assertTrue(is_a($result, 'MDB_QueryTool_Result_Object'));
        $retrieved = $result->fetchRow();
        $this->assertEqual($newData['id'], $retrieved->id);
        $this->assertEqual($newData['name'], $retrieved->name);
        $this->assertEqual($newData['address_id'], $retrieved->address_id);
        
        //test getNext()
        $result = $this->qt->get($newData['id']);
        $this->assertTrue(is_a($result, 'MDB_QueryTool_Result_Object'));
        $retrieved = $result->getNext();
        $this->assertEqual($newData['id'], $retrieved->id);
        $this->assertEqual($newData['name'], $retrieved->name);
        $this->assertEqual($newData['address_id'], $retrieved->address_id);
        
        //test hasMore()
        $this->assertFalse($result->hasMore());
        

        //test save()
        $appended_string = '_appended';
        $retrieved->name .= $appended_string;
        $this->assertTrue($retrieved->save());
        
        $result = $this->qt->get($newData['id']);
        $this->assertTrue(is_a($result, 'MDB_QueryTool_Result_Object'));
        $retrieved = $result->fetchRow();
        $this->assertTrue(is_a($retrieved, 'MDB_QueryTool_Result_Row'));
        $this->assertEqual($newData['id'], $retrieved->id);
        $this->assertEqual($newData['name'].$appended_string, $retrieved->name);
        $this->assertEqual($newData['address_id'], $retrieved->address_id);
    }

    function test_Get_New_Entity() {
        $this->qt = new MDB_QT(TABLE_USER);
        $this->qt->useResult('object');
        $entity  = $this->qt->newEntity();
        $newData = $this->_getSampleData(1);
        //Checking the class
        $this->assertTrue(is_a($entity, 'MDB_QueryTool_Result_Row'));
        //Checking variables of entity (Should have the same columns as keys in newData)
        $properties = get_object_vars($entity);
        foreach ($newData as $key=>$val) {
            $this->assertTrue(array_key_exists($key, $properties));
        }
        //Checking that there is no id
        $this->assertEqual('', $entity->id);
        //Setting some data and saving the entity
        foreach ($newData as $key=>$val) {
            $entity->$key = $val;
        }
        $entity->save();
        //Checking if it has now an id
        $this->assertTrue($entity->id!='');
    }

    function test_Remove_Entity() {
        $this->qt = new MDB_QT(TABLE_USER);
        $this->qt->useResult('object');
        $entity  = $this->qt->newEntity();
        $newData = $this->_getSampleData(1);
        //Creating an entity and saving it
        foreach ($newData as $key=>$val) {
            $entity->$key = $val;
        }
        $entity->save();
        //Checking if it has now an id
        $this->assertTrue($entity->id!='');
        $id = $entity->id;
        //Removing the entity
        $this->assertTrue($entity->remove());
        //Try to get removed entity
        $res = $this->qt->get($id);
        $this->assertFalse($res->getNext());
    }
    
    function test_Remove_Entity_With_Empty_Cols() {
        $this->qt = new MDB_QT(TABLE_USER);
        $this->qt->useResult('object');
        $entity  = $this->qt->newEntity();
        $newData = $this->_getSampleData(1);
        //Creating an entity and saving it
        $keys = array_keys($newData);
        $entity->$keys[0] = $newData[$keys[0]];
        $entity->$keys[1] = $newData[$keys[1]];
        $entity->save();
        //Checking if it has now an id
        $this->assertTrue($entity->id!='');
        $id = $entity->id;
        //Removing the entity
        $this->assertTrue($entity->remove());
        print_r($entity);
        //Try to get removed entity
        $res = $this->qt->get($id);
        $this->assertFalse($res->getNext());
    }
}

if (!defined('TEST_RUNNING')) {
    define('TEST_RUNNING', true);
    $test = &new TestOfMDB_QueryTool_Result();
    $test->run(new HtmlReporter());
}
?>