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