<?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;
}
}
|