Login   Register  
PHP Classes
elePHPant
Icontem

File: unit_tests/Database/RecordTest_test.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Victor Bolshov  >  Naf Database Tools  >  unit_tests/Database/RecordTest_test.php  >  Download  
File: unit_tests/Database/RecordTest_test.php
Role: Unit test script
Content type: text/plain
Description: Unit test case for Naf_Record
Class: Naf Database Tools
Store and retrieve objects in databases using PDO
Author: By
Last change:
Date: 7 years ago
Size: 2,560 bytes
 

Contents

Class file image Download
<?php

/**
 * Unit-test for Naf_Record class
 */

require_once dirname(__FILE__) . '/../setup.php';
require_once 
dirname(__FILE__) . '/Connection.php';
require_once 
dirname(__FILE__) . '/Abstract.php';

/**
 * Dummy record class - for the test table created by AbstractDbTest
 */
class TestRecord extends Naf_Record {
    protected 
$_tableName 'test';
    protected 
$_defaults = array(
        
'name' => null);
        
    protected function 
_createValidator()
    {
        return 
parent::_createValidator()
            ->
addRequired('name''Name is required')
            ->
addStringRule('name''Name must be a string')
            ->
addCallbackRule('name', array($this'filterUniqueName'), 'Name must be unique within the database');
    }
    
    function 
filterUniqueName($name)
    {
        return 
parent::_filterUnique('name'$name);
    }
}

class 
Naf_Record_Test extends AbstractDbTest {
    
    function 
testImportAndExport()
    {
        
$r = new TestRecord();
        
        
$this->assertEqual($r->export(), array('id' => null'name' => null));
        
        
$r->import(array('name' => 'test'));
        
$this->assertEqual($r->export(), array('id' => null'name' => 'test'));
    }
    
    function 
testSave()
    {
        
$r = new TestRecord();
        
$r->name 'test';
        
$this->assertSave($r);
        
$this->assertEqual(1$r->table()->count());
    }
    
    function 
testDelete()
    {
        
$r = new TestRecord();
        
$r->name 'test';
        
$this->assertSave($r);
        
$this->assertTrue($r->delete());
        
$this->assertEqual(0$r->table()->count());
    }
    
    function 
testLoadMethods()
    {
        
$r = new TestRecord();
        
$r->name 'test';
        
$id $this->assertSave($r);
        
$r->reset();
        
        
$this->assertTrue($r->load($id));
        
$r->reset();
        
        
$this->assertTrue($r->loadByColumn('name''test'));
        
$r->reset();
        
        
$this->assertTrue($r->loadByFilter(array('name = ?' => 'test')));
        
$r->reset();
    }
    
    function 
testValidation()
    {
        
$r = new TestRecord();
        
// required rule should fail
        
$this->assertFalse($r->save());
        
        
// string rule should fail
        
$r->name = array();
        
$this->assertFalse($r->save());
        
        
$r->name 'test';
        
$this->assertTrue($r->save());
        
        
$nonUnique = new TestRecord();
        
$nonUnique->name $r->name;
        
// unique rule should fail
        
$this->assertFalse($nonUnique->save());
        
        
$this->assertIsA($nonUnique->validator(), 'Naf_Validator');
        
$this->assertTrue(is_array($nonUnique->getErrorList()));
        
$this->assertTrue(count($nonUnique->getErrorList()) > 0);
    }
    
    private function 
assertSave($r)
    {
        
$name $r->name;
        
$this->assertTrue($id $r->save());
        
        
$r->reset();
        
$this->assertTrue($r->load($id));
        
$this->assertEqual($name$r->name);
        return 
$id;
    }
    
}