cacert-testmgr/external/ZendFramework-1.9.5/tests/Zend/Db/Table/Row/TestCommon.php
Markus Warg 8398c9048d initially import ZendFramework-1.9.5 into repository
code was modified slightly, so the code differs from the original downloadable 1.9.5 version
2010-03-31 10:12:32 +02:00

871 lines
32 KiB
PHP

<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Db
* @subpackage UnitTests
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: TestCommon.php 17363 2009-08-03 07:40:18Z bkarwin $
*/
/**
* @see Zend_Db_Table_TestSetup
*/
require_once 'Zend/Db/Table/TestSetup.php';
PHPUnit_Util_Filter::addFileToFilter(__FILE__);
require_once 'Zend/Db/Table/Row.php';
/**
* @category Zend
* @package Zend_Db
* @subpackage UnitTests
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @group Zend_Db
* @group Zend_Db_Table
* @group Zend_Db_Table_Row
*/
abstract class Zend_Db_Table_Row_TestCommon extends Zend_Db_Table_TestSetup
{
protected function _testTableRow()
{
$table = $this->_table['bugs'];
$bug_id = $this->_db->foldCase('bug_id');
$bug_description = $this->_db->foldCase('bug_description');
$bug_status = $this->_db->foldCase('bug_status');
$created_on = $this->_db->foldCase('created_on');
$updated_on = $this->_db->foldCase('updated_on');
$reported_by = $this->_db->foldCase('reported_by');
$assigned_to = $this->_db->foldCase('assigned_to');
$verified_by = $this->_db->foldCase('verified_by');
$data = array(
$bug_id => '1',
$bug_description => 'System needs electricity to run',
$bug_status => 'NEW',
$created_on => '2007-04-01',
$updated_on => '2007-04-01',
$reported_by => 'goofy',
$assigned_to => 'mmouse',
$verified_by => 'dduck'
);
$config = array(
'table' => $table,
'stored' => true,
'readOnly' => false,
'data' => $data,
);
Zend_Loader::loadClass('My_ZendDbTable_Row_TestTableRow');
return new My_ZendDbTable_Row_TestTableRow($config);
}
public function testTableFindRow()
{
$table = $this->_table['bugs'];
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$this->assertEquals(1, count($rowset));
}
public function testTableRowConstructor()
{
$table = $this->_table['bugs'];
$config = array(
'db' => $this->_db,
'table' => $table,
'data' => array(),
'readOnly' => true
);
$row1 = new Zend_Db_Table_Row($config);
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
try {
$bug_description = $row1->bug_description;
$this->fail('Expected to catch Zend_Db_Table_Row_Exception');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Row_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception, got '.get_class($e));
$this->assertEquals("Specified column \"bug_description\" is not in the row", $e->getMessage());
}
$config['data'] = 'Invalid';
try {
$row1 = new Zend_Db_Table_Row($config);
$this->fail('Expected to catch Zend_Db_Table_Row_Exception');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Row_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception, got '.get_class($e));
$this->assertEquals("Data must be an array", $e->getMessage());
}
}
// ZF-1144
public function testTableRowContructorWithTableNameSpecifiedInSubclass()
{
$this->_useMyIncludePath();
/**
* @see Zend_Db_Table_Row_TestStandaloneRow
*/
require_once 'My/ZendDbTable/Row/TestStandaloneRow.php';
Zend_Db_Table_Abstract::setDefaultAdapter($this->_db);
$row = new My_ZendDbTable_Row_TestStandaloneRow();
$this->assertType('Zend_Db_Table_Abstract', $row->getTable());
Zend_Db_Table_Abstract::setDefaultAdapter();
}
public function testTableRowReadOnly()
{
$table = $this->_table['bugs'];
$row1 = new Zend_Db_Table_Row(
array(
'db' => $this->_db,
'table' => $table,
'readOnly' => true
)
);
$this->assertTrue($row1->isReadOnly());
}
public function testTableRowToArray()
{
$table = $this->_table['bugs'];
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
$a = $row1->toArray();
$this->assertTrue(is_array($a));
// fix for #ZF-1898
$arrayObject = new ArrayObject($row1->toArray(),ArrayObject::ARRAY_AS_PROPS);
$arrayObject->bug_status = 'foobar';
$this->assertNotEquals('foobar',$row1->bug_status);
$cols = array(
'bug_id',
'bug_description',
'bug_status',
'created_on',
'updated_on',
'reported_by',
'assigned_to',
'verified_by',
);
$this->assertEquals($cols, array_keys($a));
}
public function testTableRowSelect()
{
$table = $this->_table['bugs'];
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
$select = $row1->select();
$this->assertType('Zend_Db_Table_Select', $select,
'Expecting object of type Zend_Db_Table_Select, got '.get_class($select));
}
public function testTableRowMagicGet()
{
$table = $this->_table['bugs'];
$bug_id = $this->_db->foldCase('bug_id');
$bug_description = $this->_db->foldCase('bug_description');
$bug_status = $this->_db->foldCase('bug_status');
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
try {
$this->assertEquals(1, $row1->$bug_id);
$this->assertEquals('System needs electricity to run', $row1->$bug_description);
$this->assertEquals('NEW', $row1->$bug_status);
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
if (!isset($row1->$bug_id)) {
$this->fail('Column "id" is set but isset() returns false');
}
}
public function testTableRowMagicUnset()
{
$table = $this->_table['bugs'];
$row = $table->find(1)->current();
unset($row->assigned_to);
$this->assertFalse(isset($row->assigned_to));
$diff = array_diff_key(array('assigned_to'=>''), $row->toArray());
$this->assertEquals(array('assigned_to'),array_keys($diff));
}
public function testTableRowMagicUnsetWhenUnsettingPkValueThrowsException()
{
$table = $this->_table['bugs'];
$row = $table->find(1)->current();
$this->setExpectedException('Zend_Db_Table_Row_Exception');
unset($row->bug_id);
}
public function testTableRowMagicSet()
{
$table = $this->_table['bugs'];
$bug_description = $this->_db->foldCase('bug_description');
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
try {
$row1->$bug_description = 'foo';
$this->assertEquals('foo', $row1->$bug_description);
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
}
// ZF-2013
public function testTableRowOffsetGet()
{
$table = $this->_table['bugs'];
$bug_id = $this->_db->foldCase('bug_id');
$bug_description = $this->_db->foldCase('bug_description');
$bug_status = $this->_db->foldCase('bug_status');
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
try {
$this->assertEquals(1, $row1->offsetGet($bug_id));
$this->assertEquals('System needs electricity to run', $row1->offsetGet($bug_description));
$this->assertEquals('NEW', $row1->offsetGet($bug_status));
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
}
// ZF-2013
public function testTableRowOffsetSet()
{
$table = $this->_table['bugs'];
$bug_description = $this->_db->foldCase('bug_description');
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
try {
$row1->offsetSet($bug_description, 'foo');
$this->assertEquals('foo', $row1->offsetGet($bug_description));
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
}
public function testTableRowSetFromArray()
{
$table = $this->_table['bugs'];
$bug_description = $this->_db->foldCase('bug_description');
$bug_status = $this->_db->foldCase('bug_status');
$data = array(
$bug_description => 'New Description',
$bug_status => 'INVALID'
);
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
$result = $row1->setFromArray($data);
$this->assertSame($result, $row1);
try {
$this->assertEquals($data[$bug_description], $row1->$bug_description);
$this->assertEquals($data[$bug_status], $row1->$bug_status);
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
}
/**
* ZF-2243: Zend_Db_Table::createRow and Zend_Db_Table_Row::setFromArray have same behaviour
*/
public function testTableRowSetFromBigArray()
{
$table = $this->_table['bugs'];
$bug_description = $this->_db->foldCase('bug_description');
$bug_status = $this->_db->foldCase('bug_status');
// Data issued from form object
$data = array(
$bug_description => 'New Description',
$bug_status => 'INVALID',
'btnAccept' => 1 // Button value
);
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
$row1->setFromArray($data);
try {
$button = $row1->btnAccept;
$this->fail('Expected to catch Zend_Db_Table_Row_Exception');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Row_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception, got '.get_class($e));
$this->assertEquals("Specified column \"btnAccept\" is not in the row", $e->getMessage());
}
}
public function testTableRowSaveInsert()
{
$table = $this->_table['bugs'];
$data = array(
'bug_description' => 'New Description',
'bug_status' => 'INVALID'
);
try {
$row3 = $table->createRow($data);
$this->assertNull($row3->bug_id);
$row3->save();
$this->assertEquals(5, $row3->bug_id);
$this->assertEquals($data['bug_description'], $row3->bug_description);
$this->assertEquals($data['bug_status'], $row3->bug_status);
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
}
public function testTableRowSaveInsertSequence()
{
$table = $this->_getTable('My_ZendDbTable_TableProducts',
array(Zend_Db_Table_Abstract::SEQUENCE => 'zfproducts_seq'));
$product_id = $this->_db->foldCase('product_id');
$product_name = $this->_db->foldCase('product_name');
$data = array (
$product_name => 'Solaris'
);
$row3 = $table->createRow($data);
$row3->save();
try {
$this->assertEquals(4, $row3->$product_id);
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
}
public function testTableRowSaveUpdate()
{
$table = $this->_table['bugs'];
$bug_id = $this->_db->foldCase('bug_id');
$bug_description = $this->_db->foldCase('bug_description');
$bug_status = $this->_db->foldCase('bug_status');
$data = array(
$bug_description => 'New Description',
$bug_status => 'INVALID'
);
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
$row1->setFromArray($data);
$row1->save();
try {
$this->assertEquals(1, $row1->$bug_id);
$this->assertEquals($data[$bug_description], $row1->$bug_description);
$this->assertEquals($data[$bug_status], $row1->$bug_status);
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
}
public function testTableRowSaveInvalidTable()
{
$table = $this->_table['bugs'];
$row = $this->_testTableRow();
try {
$row->setTableColsToFail($table);
$row->setTable($table);
$this->fail('Expected to catch Zend_Db_Table_Row_Exception for incorrect parent table');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception got '.get_class($e));
$this->assertEquals('The specified Table does not have the same columns as the Row', $e->getMessage());
}
$row = $this->_testTableRow();
try {
$row->setPrimaryKeyToFail1($table);
$row->setTable($table);
$this->fail('Expected to catch Zend_Db_Table_Row_Exception for incorrect parent table');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception got '.get_class($e));
$this->assertEquals('The specified Table \'My_ZendDbTable_TableBugs\' does not have the same primary key as the Row', $e->getMessage());
}
}
public function testTableRowSaveUpdateInvalidInfo()
{
$table = $this->_table['bugs'];
$row = $this->_testTableRow();
$bug_status = $this->_db->foldCase('bug_status');
$row->$bug_status = 'VALID';
try {
$row->setTable($table);
$row->setPrimaryKeyToFail1();
$row->save();
$this->fail('Expected to catch Zend_Db_Table_Row_Exception for incorrect parent table');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception got '.get_class($e));
$this->assertEquals('The primary key must be set as an array', $e->getMessage());
}
try {
$row->setTable($table);
$row->setPrimaryKeyToFail2();
$row->save();
$this->fail('Expected to catch Zend_Db_Table_Row_Exception for incorrect parent table');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception got '.get_class($e));
$this->assertEquals('The specified Table \'My_ZendDbTable_TableBugs\' does not have the same primary key as the Row', $e->getMessage());
}
}
public function testTableRowSaveUpdateRefresh()
{
$table = $this->_table['bugs'];
$bug_status = $this->_db->foldCase('bug_status');
$row = $this->_testTableRow();
$row->$bug_status = 'VALID';
try {
$row->save();
$this->fail('Expected to catch Zend_Db_Table_Row_Exception for missing parent');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Row_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception got '.get_class($e));
$this->assertEquals('Cannot refresh row as parent is missing', $e->getMessage());
}
}
public function testTableRowSetTable()
{
$table = $this->_table['bugs'];
$table2 = $this->_table['products'];
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
$row1->setTable(null);
$this->assertFalse($row1->isConnected());
try {
$row1->setTable($table2);
$this->fail('Expected to catch Zend_Db_Table_Exception for incorrect parent table');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Exception', $e,
'Expecting object of type Zend_Db_Table_Exception got '.get_class($e));
$this->assertEquals('The specified Table is of class My_ZendDbTable_TableProducts, expecting class to be instance of My_ZendDbTable_TableBugs', $e->getMessage());
}
}
public function testTableRowSetInvalidTable()
{
$table = $this->_table['bugs'];
$row = $this->_testTableRow();
try {
$row->setTableToFail();
$row->setTable($table);
$this->fail('Expected to catch Zend_Db_Table_Row_Exception for incorrect parent table');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception got '.get_class($e));
$this->assertEquals('The specified Table is of class My_ZendDbTable_TableBugs, expecting class to be instance of foo', $e->getMessage());
}
}
public function testTableRowExceptionGetColumnNotInRow()
{
$table = $this->_table['bugs'];
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
$column = 'doesNotExist';
try {
$dummy = $row1->$column;
$this->fail('Expected to catch Zend_Db_Table_Row_Exception');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Row_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception, got '.get_class($e));
$this->assertEquals("Specified column \"$column\" is not in the row", $e->getMessage());
}
}
public function testTableRowExceptionSetColumnNotInRow()
{
$table = $this->_table['bugs'];
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
$column = 'doesNotExist';
try {
$row1->$column = 'dummy value';
$this->fail('Expected to catch Zend_Db_Table_Row_Exception');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Row_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception, got '.get_class($e));
$this->assertEquals("Specified column \"$column\" is not in the row", $e->getMessage());
}
}
public function testTableRowExceptionBogusPrimaryKey()
{
$table = $this->_table['bugs_products'];
$bogusData = array(
'bug_id' => 3,
'foo' => 'bar'
);
$row = new Zend_Db_Table_Row(array('table' => $table, 'data' => $bogusData));
try {
$rowsAffected = $row->delete();
$this->fail('Expected to catch Zend_Db_Table_Row_Exception');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Row_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception, got '.get_class($e));
$this->assertEquals("The specified Table 'My_ZendDbTable_TableBugsProducts' does not have the same primary key as the Row", $e->getMessage());
}
}
public function testTableRowSetPrimaryKey()
{
$table = $this->_table['bugs'];
$bug_id = $this->_db->foldCase('bug_id');
$rowset = $table->find(1);
$this->assertType('Zend_Db_Table_Rowset_Abstract', $rowset,
'Expecting object of type Zend_Db_Table_Rowset_Abstract, got '.get_class($rowset));
$row1 = $rowset->current();
$this->assertType('Zend_Db_Table_Row_Abstract', $row1,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1));
try {
$row1->$bug_id = 6;
$row1->save();
$this->assertEquals(6, $row1->$bug_id);
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
}
public function testTableRowSerialize()
{
$table = $this->_table['bugs'];
$rowset = $table->find(1);
$row1 = $rowset->current();
$serRow1 = serialize($row1);
$row1New = unserialize($serRow1);
$this->assertType('Zend_Db_Table_Row_Abstract', $row1New,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1New));
$this->assertEquals($row1->toArray(), $row1New->toArray());
}
public function testTableRowSerializeExceptionNotConnected()
{
$table = $this->_table['bugs'];
$rowset = $table->find(1);
$row1 = $rowset->current();
$serRow1 = serialize($row1);
$row1New = unserialize($serRow1);
$this->assertType('Zend_Db_Table_Row_Abstract', $row1New,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1New));
$bug_description = $this->_db->foldCase('bug_description');
$row1New->$bug_description = 'New description';
try {
$row1New->save();
$this->fail('Expected to catch Zend_Db_Table_Row_Exception');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Row_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception, got '.get_class($e));
$this->assertEquals("Cannot save a Row unless it is connected", $e->getMessage());
}
}
public function testTableRowSerializeReconnectedUpdate()
{
$table = $this->_table['bugs'];
$rowset = $table->find(1);
$row1 = $rowset->current();
$serRow1 = serialize($row1);
$row1New = unserialize($serRow1);
$this->assertType('Zend_Db_Table_Row_Abstract', $row1New,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1New));
try {
$connected = $row1New->setTable($table);
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
$this->assertTrue($connected);
$bug_description = $this->_db->foldCase('bug_description');
$bug_status = $this->_db->foldCase('bug_status');
$data = array(
$bug_description => 'New Description',
$bug_status => 'INVALID'
);
$row1New->setFromArray($data);
try {
$rowsAffected = $row1New->save();
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
$this->assertEquals(1, $rowsAffected);
}
public function testTableRowSerializeReconnectedDelete()
{
$table = $this->_table['bugs'];
$rowset = $table->find(1);
$row1 = $rowset->current();
$serRow1 = serialize($row1);
$row1New = unserialize($serRow1);
$this->assertType('Zend_Db_Table_Row_Abstract', $row1New,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1New));
try {
$connected = $row1New->setTable($table);
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
$this->assertTrue($connected);
try {
$rowsAffected = $row1New->delete();
} catch (Zend_Exception $e) {
$this->fail("Caught exception of type \"".get_class($e)."\" where no exception was expected. Exception message: \"".$e->getMessage()."\"\n");
}
$this->assertEquals(1, $rowsAffected);
}
public function testTableRowSerializeExceptionWrongTable()
{
$table = $this->_table['bugs'];
$rowset = $table->find(1);
$row1 = $rowset->current();
$serRow1 = serialize($row1);
$row1New = unserialize($serRow1);
$this->assertType('Zend_Db_Table_Row_Abstract', $row1New,
'Expecting object of type Zend_Db_Table_Row_Abstract, got '.get_class($row1New));
$table2 = $this->_table['products'];
$connected = false;
try {
$connected = $row1New->setTable($table2);
$this->fail('Expected to catch Zend_Db_Table_Row_Exception');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Row_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception, got '.get_class($e));
$this->assertEquals('The specified Table is of class My_ZendDbTable_TableProducts, expecting class to be instance of My_ZendDbTable_TableBugs', $e->getMessage());
}
$this->assertFalse($connected);
}
public function testTableRowSetReadOnly()
{
$table = $this->_testTableRowSetReadOnlyGetTableBugs();
$bug_status = $this->_db->foldCase('bug_status');
$rowset = $table->find(1);
$row1 = $rowset->current();
$row1->setReadOnly(true);
$this->assertTrue($row1->isReadOnly());
$data = array(
'bug_description' => 'New Description',
'bug_status' => 'INVALID'
);
$row2 = $table->createRow($data);
$row2->setReadOnly(true);
try {
$row2->save();
$this->fail('Expected to catch Zend_Db_Table_Row_Exception');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Row_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception, got '.get_class($e));
$this->assertEquals('This row has been marked read-only', $e->getMessage());
}
$row2->setReadOnly(false);
$row2->save();
$row2->$bug_status = 'VALID';
$row2->setReadOnly(true);
try {
$row2->save();
$this->fail('Expected to catch Zend_Db_Table_Row_Exception');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Row_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception, got '.get_class($e));
$this->assertEquals('This row has been marked read-only', $e->getMessage());
}
$row2->setReadOnly(false);
$row2->save();
}
public function testTableRowInvalidTransformColumn()
{
$row = $this->_testTableRow();
try {
$row->setInvalidColumn();
$this->fail('Expected to catch Zend_Db_Table_Row_Exception for invalid column type');
} catch (Zend_Exception $e) {
$this->assertType('Zend_Db_Table_Exception', $e,
'Expecting object of type Zend_Db_Table_Row_Exception got '.get_class($e));
$this->assertEquals('Specified column is not a string', $e->getMessage());
}
}
/**
* Utility methods below
*/
/**
* Allow adapters with sequences to declare them
* @return Zend_Db_Table_Abstract
*/
protected function _testTableRowSetReadOnlyGetTableBugs()
{
return $this->_table['bugs'];
}
}