Author: Frederik Holljen
Date: 2007-03-03 16:48:45 +0100 (Sat, 03 Mar 2007)
New Revision: 4708

Log:
- Fixed issue #10106: ezcPersistentManualGenerator does not quote id columnName

Added:
   trunk/PersistentObject/tests/data/keywordtest/like.php
   trunk/PersistentObject/tests/data/keywordtest/table.dba
   trunk/PersistentObject/tests/data/keywordtest/where.php
   trunk/PersistentObject/tests/data/keywordtest/where_class.php
Modified:
   trunk/PersistentObject/ChangeLog
   trunk/PersistentObject/src/interfaces/identifier_generator.php
   trunk/PersistentObject/src/persistent_session.php
   trunk/PersistentObject/tests/data/keywordtest/table.php
   trunk/PersistentObject/tests/data/keywordtest/table_class.php
   trunk/PersistentObject/tests/keyword_test.php
   trunk/PersistentObject/tests/suite.php

Modified: trunk/PersistentObject/ChangeLog
===================================================================
--- trunk/PersistentObject/ChangeLog    2007-03-02 05:53:39 UTC (rev 4707)
+++ trunk/PersistentObject/ChangeLog    2007-03-03 15:48:45 UTC (rev 4708)
@@ -7,6 +7,7 @@
   behaviour (INSERT violating NULL contraint does give an error...)
 - Fixed issue #010153: Persistent Object and manual generator (negative and 
   0 primary keys)
+- Fixed issue #10106: ezcPersistentManualGenerator does not quote id columnName
        
        
 1.2 - Monday 18 December 2006

Modified: trunk/PersistentObject/src/interfaces/identifier_generator.php
===================================================================
--- trunk/PersistentObject/src/interfaces/identifier_generator.php      
2007-03-02 05:53:39 UTC (rev 4707)
+++ trunk/PersistentObject/src/interfaces/identifier_generator.php      
2007-03-03 15:48:45 UTC (rev 4708)
@@ -32,7 +32,7 @@
     /**
      * Check if the object is persistent already
      *
-     * Called in the beginning of the save process.
+     * Called in the beginning of the save and update methods.
      *
      * Persistent objects that are being saved must not exist in the database 
already.
      *

Modified: trunk/PersistentObject/src/persistent_session.php
===================================================================
--- trunk/PersistentObject/src/persistent_session.php   2007-03-02 05:53:39 UTC 
(rev 4707)
+++ trunk/PersistentObject/src/persistent_session.php   2007-03-03 15:48:45 UTC 
(rev 4708)
@@ -190,8 +190,9 @@
 
         // create and execute query
         $q = $this->database->createDeleteQuery();
-        $q->deleteFrom( $def->table )
-            ->where( $q->expr->eq( $def->idProperty->columnName, 
$q->bindValue( $idValue ) ) );
+        $q->deleteFrom( $this->database->quoteIdentifier( $def->table ) )
+            ->where( $q->expr->eq( $this->database->quoteIdentifier( 
$def->idProperty->columnName ),
+                                   $q->bindValue( $idValue ) ) );
 
         try
         {
@@ -243,7 +244,7 @@
         // init query
         $q = $this->database->createDeleteQuery();
         $q->setAliases( $this->generateAliasMap( $def ) );
-        $q->deleteFrom( $def->table );
+        $q->deleteFrom( $this->database->quoteIdentifier( $def->table ) );
 
         return $q;
     }
@@ -283,10 +284,6 @@
      * The query is initialized to update the correct table and
      * it is only neccessary to set the correct values.
      *
-     * Example:
-     * <code>
-     * </code>
-     *
      * @throws ezcPersistentDefinitionNotFoundException if there is no such 
persistent class.
      * @param string $class
      * @return ezcQueryUpdate
@@ -298,7 +295,7 @@
         // init query
         $q = $this->database->createUpdateQuery();
         $q->setAliases( $this->generateAliasMap( $def ) );
-        $q->update( $def->table );
+        $q->update( $this->database->quoteIdentifier( $def->table ) );
 
         return $q;
     }
@@ -354,7 +351,8 @@
         // init query
         $q = $this->database->createSelectQuery();
         $q->setAliases( $this->generateAliasMap( $def ) );
-        $q->select( $this->getColumnsFromDefinition( $def ) )->from( 
$def->table );
+        $q->select( $this->getColumnsFromDefinition( $def ) )
+            ->from( $this->database->quoteIdentifier( $def->table ) );
 
         return $q;
     }
@@ -517,7 +515,7 @@
                 }
                 break;
             case "ezcPersistentManyToManyRelation":
-                $query->from( $relation->relationTable );
+                $query->from( $this->database->quoteIdentifier( 
$relation->relationTable ) );
                 foreach ( $relation->columnMap as $map )
                 {
                     $query->where(
@@ -591,7 +589,7 @@
                 break;
             case "ezcPersistentManyToManyRelation":
                 $q = $this->database->createInsertQuery();
-                $q->insertInto( $relation->relationTable );
+                $q->insertInto( $this->database->quoteIdentifier( 
$relation->relationTable ) );
                 foreach ( $relation->columnMap as $map )
                 {
                     $q->set(
@@ -665,7 +663,7 @@
                 break;
             case "ezcPersistentManyToManyRelation":
                 $q = $this->database->createDeleteQuery();
-                $q->deleteFrom( $relation->relationTable );
+                $q->deleteFrom( $this->database->quoteIdentifier( 
$relation->relationTable ) );
                 foreach ( $relation->columnMap as $map )
                 {
                     $q->where(
@@ -782,8 +780,9 @@
 
         $def = $this->definitionManager->fetchDefinition( get_class( $pObject 
) ); // propagate exception
         $q = $this->database->createSelectQuery();
-        $q->select( $this->getColumnsFromDefinition( $def ) )->from( 
$def->table )
-            ->where( $q->expr->eq( $def->idProperty->columnName,
+        $q->select( $this->getColumnsFromDefinition( $def ) )
+            ->from( $this->database->quoteIdentifier( $def->table ) )
+            ->where( $q->expr->eq( $this->database->quoteIdentifier( 
$def->idProperty->columnName ),
                                    $q->bindValue( $id ) ) );
         try
         {
@@ -888,7 +887,7 @@
 
         // set up and execute the query
         $q = $this->database->createInsertQuery();
-        $q->insertInto( $def->table );
+        $q->insertInto( $this->database->quoteIdentifier( $def->table ) );
         foreach ( $state as $name => $value )
         {
             if ( $name != $def->idProperty->propertyName ) // skip the id field
@@ -992,7 +991,7 @@
 
         // set up and execute the query
         $q = $this->database->createUpdateQuery();
-        $q->update( $def->table );
+        $q->update( $this->database->quoteIdentifier( $def->table ) );
         foreach ( $state as $name => $value )
         {
             if ( $name != $def->idProperty->propertyName ) // skip the id field
@@ -1001,7 +1000,8 @@
                 $q->set( $this->database->quoteIdentifier( 
$def->properties[$name]->columnName ), $q->bindValue( $value ) );
             }
         }
-        $q->where( $q->expr->eq( $def->idProperty->columnName, $q->bindValue( 
$idValue ) ) );
+        $q->where( $q->expr->eq( $this->database->quoteIdentifier( 
$def->idProperty->columnName ),
+                                 $q->bindValue( $idValue ) ) );
         try
         {
             $stmt = $q->prepare();

Added: trunk/PersistentObject/tests/data/keywordtest/like.php
===================================================================
--- trunk/PersistentObject/tests/data/keywordtest/like.php      2007-03-02 
05:53:39 UTC (rev 4707)
+++ trunk/PersistentObject/tests/data/keywordtest/like.php      2007-03-03 
15:48:45 UTC (rev 4708)
@@ -0,0 +1,30 @@
+<?php
+ezcTestRunner::addFileToFilter( __FILE__ );
+
+/*
+ * Holds the definition for the class Where
+ * This definition is used by the keywords test.
+ */
+// build definition
+$def = new ezcPersistentObjectDefinition();
+$def->table = "where";
+$def->class = "Like";
+
+$def->idProperty = new ezcPersistentObjectIdProperty;
+$def->idProperty->columnName = 'like';
+$def->idProperty->propertyName = 'like';
+$def->idProperty->visibility = ezcPersistentObjectProperty::VISIBILITY_PRIVATE;
+$def->idProperty->generator = new ezcPersistentGeneratorDefinition( 
'ezcPersistentSequenceGenerator',
+                                                                    array( 
'sequence' => 'PO_test_seq' ) );
+
+$def->properties['update'] = new ezcPersistentObjectProperty;
+$def->properties['update']->columnName = 'update';
+$def->properties['update']->propertyName = 'update';
+$def->properties['update']->propertyType = 
ezcPersistentObjectProperty::PHP_TYPE_INT;
+$def->properties['update']->defaultValue = 0;
+$def->properties['update']->visibility = 
ezcPersistentObjectProperty::VISIBILITY_PRIVATE;
+$def->properties['update']->isRequired = false;
+
+return $def;
+
+?>


Property changes on: trunk/PersistentObject/tests/data/keywordtest/like.php
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/PersistentObject/tests/data/keywordtest/table.dba
===================================================================
--- trunk/PersistentObject/tests/data/keywordtest/table.dba     2007-03-02 
05:53:39 UTC (rev 4707)
+++ trunk/PersistentObject/tests/data/keywordtest/table.dba     2007-03-03 
15:48:45 UTC (rev 4708)
@@ -0,0 +1,113 @@
+<?php return array (
+  0 => 
+  array (
+    'as' => 
+    ezcDbSchemaTable::__set_state(array(
+       'fields' => 
+      array (
+        'and' => 
+        ezcDbSchemaField::__set_state(array(
+           'type' => 'integer',
+           'length' => 0,
+           'notNull' => false,
+           'default' => NULL,
+           'autoIncrement' => false,
+           'unsigned' => false,
+        )),
+        'or' => 
+        ezcDbSchemaField::__set_state(array(
+           'type' => 'integer',
+           'length' => 0,
+           'notNull' => false,
+           'default' => NULL,
+           'autoIncrement' => false,
+           'unsigned' => false,
+        )),
+      ),
+       'indexes' => 
+      array (
+      ),
+    )),
+    'table' => 
+    ezcDbSchemaTable::__set_state(array(
+       'fields' => 
+      array (
+        'from' => 
+        ezcDbSchemaField::__set_state(array(
+           'type' => 'integer',
+           'length' => 0,
+           'notNull' => true,
+           'default' => NULL,
+           'autoIncrement' => true,
+           'unsigned' => false,
+        )),
+        'select' => 
+        ezcDbSchemaField::__set_state(array(
+           'type' => 'integer',
+           'length' => 0,
+           'notNull' => false,
+           'default' => NULL,
+           'autoIncrement' => false,
+           'unsigned' => false,
+        )),
+      ),
+       'indexes' => 
+      array (
+        'primary' => 
+        ezcDbSchemaIndex::__set_state(array(
+           'indexFields' => 
+          array (
+            'from' => 
+            ezcDbSchemaIndexField::__set_state(array(
+               'sorting' => NULL,
+            )),
+          ),
+           'primary' => true,
+           'unique' => true,
+        )),
+      ),
+    )),
+    'where' => 
+    ezcDbSchemaTable::__set_state(array(
+       'fields' => 
+      array (
+        'like' => 
+        ezcDbSchemaField::__set_state(array(
+           'type' => 'integer',
+           'length' => 0,
+           'notNull' => true,
+           'default' => NULL,
+           'autoIncrement' => true,
+           'unsigned' => false,
+        )),
+        'update' => 
+        ezcDbSchemaField::__set_state(array(
+           'type' => 'integer',
+           'length' => 0,
+           'notNull' => false,
+           'default' => NULL,
+           'autoIncrement' => false,
+           'unsigned' => false,
+        )),
+      ),
+       'indexes' => 
+      array (
+        'primary' => 
+        ezcDbSchemaIndex::__set_state(array(
+           'indexFields' => 
+          array (
+            'like' => 
+            ezcDbSchemaIndexField::__set_state(array(
+               'sorting' => NULL,
+            )),
+          ),
+           'primary' => true,
+           'unique' => true,
+        )),
+      ),
+    )),
+  ),
+  1 => 
+  array (
+  ),
+); ?>
\ No newline at end of file

Modified: trunk/PersistentObject/tests/data/keywordtest/table.php
===================================================================
--- trunk/PersistentObject/tests/data/keywordtest/table.php     2007-03-02 
05:53:39 UTC (rev 4707)
+++ trunk/PersistentObject/tests/data/keywordtest/table.php     2007-03-03 
15:48:45 UTC (rev 4708)
@@ -2,9 +2,8 @@
 ezcTestRunner::addFileToFilter( __FILE__ );
 
 /*
- * Holds the definition for PersistentTestObject
- * This definition is used by the code manager for
- * various tests in the system.
+ * Holds the definition for Table
+ * This definition is used by the keywords test.
  */
 // build definition
 $def = new ezcPersistentObjectDefinition();
@@ -26,6 +25,27 @@
 $def->properties['select']->visibility = 
ezcPersistentObjectProperty::VISIBILITY_PRIVATE;
 $def->properties['select']->isRequired = false;
 
+$def->relations["Where"] = new ezcPersistentOneToManyRelation(
+     "table",
+     "where"
+);
+$def->relations["Where"]->columnMap = array(
+     new ezcPersistentSingleTableMap(
+         "from",
+         "update"
+     ),
+ );
+
+$def->relations["Like"] = new ezcPersistentManyToManyRelation(
+     "table",
+     "where",
+     "as"
+);
+
+$def->relations["Like"]->columnMap = array(
+    new ezcPersistentDoubleTableMap( "from", "and", "or", "like" ),
+);
+
 return $def;
 
 ?>

Modified: trunk/PersistentObject/tests/data/keywordtest/table_class.php
===================================================================
--- trunk/PersistentObject/tests/data/keywordtest/table_class.php       
2007-03-02 05:53:39 UTC (rev 4707)
+++ trunk/PersistentObject/tests/data/keywordtest/table_class.php       
2007-03-03 15:48:45 UTC (rev 4708)
@@ -8,6 +8,19 @@
   `select` integer,
   PRIMARY KEY (`from`)
 ) TYPE=InnoDB;
+
+CREATE TABLE `where`
+(
+  `like` integer unsigned not null auto_increment,
+  `update` integer,
+  PRIMARY KEY (`like`)
+) TYPE=InnoDB;
+
+CREATE TABLE `as`
+(
+   `and` integer,
+   `or` integer
+) TYPE=InnoDB;
 */
 
 class Table
@@ -32,7 +45,7 @@
     {
         $db = ezcDbInstance::get();
         $schema = ezcDbSchema::createFromDb( $db );
-//        $schema->writeToFile( 'array', dirname( __FILE__ ) . '/table.dba' );
+        $schema->writeToFile( 'array', dirname( __FILE__ ) . '/table.dba' );
     }
 
     /**
@@ -57,6 +70,8 @@
     {
         $db = ezcDbInstance::get();
         $db->exec( 'DROP TABLE' . $db->quoteIdentifier( 'table' ) );
+        $db->exec( 'DROP TABLE' . $db->quoteIdentifier( 'where' ) );
+        $db->exec( 'DROP TABLE' . $db->quoteIdentifier( 'as' ) );
         if ( $db->getName() == 'pgsql' )
         {
             $db->exec( 'DROP SEQUENCE po_test_seq' );

Added: trunk/PersistentObject/tests/data/keywordtest/where.php
===================================================================
--- trunk/PersistentObject/tests/data/keywordtest/where.php     2007-03-02 
05:53:39 UTC (rev 4707)
+++ trunk/PersistentObject/tests/data/keywordtest/where.php     2007-03-03 
15:48:45 UTC (rev 4708)
@@ -0,0 +1,30 @@
+<?php
+ezcTestRunner::addFileToFilter( __FILE__ );
+
+/*
+ * Holds the definition for the class Where
+ * This definition is used by the keywords test.
+ */
+// build definition
+$def = new ezcPersistentObjectDefinition();
+$def->table = "where";
+$def->class = "Where";
+
+$def->idProperty = new ezcPersistentObjectIdProperty;
+$def->idProperty->columnName = 'like';
+$def->idProperty->propertyName = 'like';
+$def->idProperty->visibility = ezcPersistentObjectProperty::VISIBILITY_PRIVATE;
+$def->idProperty->generator = new ezcPersistentGeneratorDefinition( 
'ezcPersistentSequenceGenerator',
+                                                                    array( 
'sequence' => 'PO_test_seq' ) );
+
+$def->properties['update'] = new ezcPersistentObjectProperty;
+$def->properties['update']->columnName = 'update';
+$def->properties['update']->propertyName = 'update';
+$def->properties['update']->propertyType = 
ezcPersistentObjectProperty::PHP_TYPE_INT;
+$def->properties['update']->defaultValue = 0;
+$def->properties['update']->visibility = 
ezcPersistentObjectProperty::VISIBILITY_PRIVATE;
+$def->properties['update']->isRequired = false;
+
+return $def;
+
+?>


Property changes on: trunk/PersistentObject/tests/data/keywordtest/where.php
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/PersistentObject/tests/data/keywordtest/where_class.php
===================================================================
--- trunk/PersistentObject/tests/data/keywordtest/where_class.php       
2007-03-02 05:53:39 UTC (rev 4707)
+++ trunk/PersistentObject/tests/data/keywordtest/where_class.php       
2007-03-03 15:48:45 UTC (rev 4708)
@@ -0,0 +1,29 @@
+<?php
+// Relation class for keywords test. Like is the identifier. Both values are 
ints.
+class Where
+{
+    public $like = null;
+    public $update = null;
+
+    public function setState( array $state )
+    {
+        foreach ( $state as $key => $value )
+        {
+            $this->$key = $value;
+        }
+    }
+
+    public function getState()
+    {
+        $result = array();
+        $result['like'] = $this->like;
+        $result['update'] = $this->update;
+        return $result;
+    }
+}
+
+class Like extends Where
+{
+}
+
+?>


Property changes on: 
trunk/PersistentObject/tests/data/keywordtest/where_class.php
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/PersistentObject/tests/keyword_test.php
===================================================================
--- trunk/PersistentObject/tests/keyword_test.php       2007-03-02 05:53:39 UTC 
(rev 4707)
+++ trunk/PersistentObject/tests/keyword_test.php       2007-03-03 15:48:45 UTC 
(rev 4708)
@@ -10,9 +10,12 @@
 ezcTestRunner::addFileToFilter( __FILE__ );
 
 require_once "data/keywordtest/table_class.php";
+require_once "data/keywordtest/where_class.php";
 
 /**
- * Tests the code manager.
+ * These tests tests for the usage of keywords for table and column names.
+ * Basically this means that we are testing that all table and column names
+ * are properly escaped.
  *
  * @package PersistentObject
  * @subpackage Tests
@@ -33,15 +36,15 @@
             $this->markTestSkipped( 'There was no database configured' );
         }
 
-//        Table::setupTable();
-        Table::saveSchema();
-//        $this->session = new ezcPersistentSession( ezcDbInstance::get(),
-//                                                   new 
ezcPersistentCodeManager( dirname( __FILE__ ) . "/data/keywordtest" ) );
+        Table::setupTable();
+//        Table::saveSchema();
+        $this->session = new ezcPersistentSession( ezcDbInstance::get(),
+                                                   new 
ezcPersistentCodeManager( dirname( __FILE__ ) . "/data/keywordtest" ) );
     }
 
     protected function tearDown()
     {
-//        Table::cleanup();
+        Table::cleanup();
     }
 
     public static function suite()
@@ -49,9 +52,199 @@
         return new PHPUnit_Framework_TestSuite( 'ezcPersistentKeywordTest' );
     }
 
+    // Test saving a valid object
     public function testSave()
     {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->save( $object );
+
+        $this->assertEquals( 1, $object->from );
+
+        $object2 = $this->session->loadIfExists( 'Table', 1 );
+        $this->assertNotEquals( NULL, $object2 );
+        $this->assertEquals( 42, $object2->select );
     }
+
+    public function testUpdate()
+    {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->save( $object );
+
+        $this->assertEquals( 1, $object->from );
+
+        $object2 = $this->session->loadIfExists( 'Table', 1 );
+        $this->assertNotEquals( NULL, $object2 );
+        $this->assertEquals( 42, $object2->select );
+
+        $object2->select = 99;
+        $this->session->update( $object2 );
+
+        $object3 = $this->session->loadIfExists( 'Table', 1 );
+        $this->assertNotEquals( NULL, $object3 );
+        $this->assertEquals( 99, $object3->select );
+    }
+
+    public function testSaveOrUpdateSave()
+    {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->saveOrUpdate( $object );
+
+        $this->assertEquals( 1, $object->from );
+
+        $object2 = $this->session->loadIfExists( 'Table', 1 );
+        $this->assertNotEquals( NULL, $object2 );
+        $this->assertEquals( 42, $object2->select );
+    }
+
+    public function testSaveOrUpdateUpdate()
+    {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->save( $object );
+
+        $this->assertEquals( 1, $object->from );
+
+        $object2 = $this->session->loadIfExists( 'Table', 1 );
+        $this->assertNotEquals( NULL, $object2 );
+        $this->assertEquals( 42, $object2->select );
+
+        $object2->select = 99;
+        $this->session->saveOrUpdate( $object2 );
+
+        $object3 = $this->session->loadIfExists( 'Table', 1 );
+        $this->assertNotEquals( NULL, $object3 );
+        $this->assertEquals( 99, $object3->select );
+    }
+
+    public function testDelete()
+    {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->save( $object );
+
+        $this->assertEquals( 1, $object->from );
+
+        $object2 = $this->session->loadIfExists( 'Table', 1 );
+        $this->assertNotEquals( NULL, $object2 );
+        $this->assertEquals( 42, $object2->select );
+
+        $this->session->delete( $object2 );
+
+        $this->assertNull( $this->session->loadIfExists( 'Table', 1 ) );
+    }
+
+    public function test1NGetRelatedObject()
+    {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->save( $object );
+
+        $rel = new Where();
+        $rel->update = 1; // correct relation
+        $this->session->save( $rel );
+
+        $relation = $this->session->getRelatedObjects( $object, "Where" );
+        $this->assertNotNull( $relation );
+    }
+
+    public function test1NGetRelatedObjects()
+    {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->save( $object );
+
+        $rel = new Where();
+        $rel->update = 1; // correct relation
+        $this->session->save( $rel );
+
+        $relations = $this->session->getRelatedObjects( $object, "Where" );
+        $this->assertEquals( 1, count( $relations ) );
+    }
+
+    public function test1NAddAndRemoveRelatedObject()
+    {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->save( $object );
+
+        $rel = new Where();
+        $rel->update = 1; // correct relation
+        $this->session->save( $rel );
+        // First let's remove the old relation
+        $this->session->removeRelatedObject( $object, $rel );
+
+        // Let's create a new object to relate to
+        $object2 = new Table();
+        $object2->select = 99;
+        $this->session->save( $object2 ); // id 2
+
+        $this->session->addRelatedObject( $object2, $rel );
+        $this->session->update( $rel );
+
+        // test that it worked
+        $relations = $this->session->getRelatedObjects( $object, "Where" );
+        $this->assertEquals( 0, count( $relations ) );
+
+        $relations = $this->session->getRelatedObjects( $object2, "Where" );
+        $this->assertEquals( 1, count( $relations ) );
+    }
+
+    public function testNMAddRelatedObject()
+    {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->save( $object );
+
+        $rel = new Like();
+        $this->session->save( $rel );
+
+        $this->session->addRelatedObject( $object, $rel );
+    }
+
+    public function testNMgetRelatedObject()
+    {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->save( $object );
+
+        $rel = new Like();
+        $this->session->save( $rel );
+
+        $this->session->addRelatedObject( $object, $rel );
+        $this->assertNotNull( $this->session->getRelatedObject( $object, 
"Like" ) );
+    }
+
+    public function testNMgetRelatedObjects()
+    {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->save( $object );
+
+        $rel = new Like();
+        $this->session->save( $rel );
+
+        $this->session->addRelatedObject( $object, $rel );
+        $this->assertEquals( 1, count( $this->session->getRelatedObjects( 
$object, "Like" ) ) );
+    }
+
+    public function testNMRemoveRelatedObject()
+    {
+        $object = new Table();
+        $object->select = 42;
+        $this->session->save( $object );
+
+        $rel = new Like();
+        $this->session->save( $rel );
+
+
+        $this->session->addRelatedObject( $object, $rel );
+        $this->session->removeRelatedObject( $object, $rel );
+
+        $this->assertEquals( 0, count( $this->session->getRelatedObjects( 
$object, "Like" ) ) );
+    }
 }
 
 ?>

Modified: trunk/PersistentObject/tests/suite.php
===================================================================
--- trunk/PersistentObject/tests/suite.php      2007-03-02 05:53:39 UTC (rev 
4707)
+++ trunk/PersistentObject/tests/suite.php      2007-03-03 15:48:45 UTC (rev 
4708)
@@ -47,7 +47,7 @@
         $this->addTest( ezcPersistentOneToOneRelationTest::suite() );
         $this->addTest( ezcPersistentManyToOneRelationTest::suite() );
         $this->addTest( ezcPersistentManyToManyRelationTest::suite() );
-//        $this->addTest( ezcPersistentKeywordTest::suite() );
+        $this->addTest( ezcPersistentKeywordTest::suite() );
     }
 
     public static function suite()

-- 
svn-components mailing list
svn-components@lists.ez.no
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to