2008-08-09 07:00:42 +02:00
|
|
|
<?php
|
|
|
|
class DataObjectDecoratorTest extends SapphireTest {
|
|
|
|
static $fixture_file = 'sapphire/tests/DataObjectTest.yml';
|
|
|
|
|
|
|
|
function testOneToManyAssociationWithDecorator() {
|
2008-08-09 09:03:24 +02:00
|
|
|
// Fails in RestfulServerTest
|
|
|
|
// Error: Object::__call() Method 'RelatedObjects' not found in class 'RestfulServerTest_Comment'
|
2008-08-09 07:00:42 +02:00
|
|
|
$contact = new DataObjectDecoratorTest_Member();
|
|
|
|
$contact->Website = "http://www.example.com";
|
2008-08-09 07:57:44 +02:00
|
|
|
|
2008-08-09 07:00:42 +02:00
|
|
|
$object = new DataObjectDecoratorTest_RelatedObject();
|
|
|
|
$object->FieldOne = "Lorem ipsum dolor";
|
|
|
|
$object->FieldTwo = "Random notes";
|
2008-08-09 07:57:44 +02:00
|
|
|
|
2008-08-09 09:03:24 +02:00
|
|
|
// The following code doesn't currently work:
|
|
|
|
// $contact->RelatedObjects()->add($object);
|
|
|
|
// $contact->write();
|
2008-08-09 07:57:44 +02:00
|
|
|
|
2008-08-09 09:03:24 +02:00
|
|
|
// Instead we have to do the following
|
2008-08-09 07:57:44 +02:00
|
|
|
$contact->write();
|
|
|
|
$object->ContactID = $contact->ID;
|
|
|
|
$object->write();
|
|
|
|
|
2008-08-09 07:00:42 +02:00
|
|
|
unset($contact);
|
|
|
|
|
|
|
|
$contact = DataObject::get_one("DataObjectDecoratorTest_Member", "Website='http://www.example.com'");
|
2008-08-09 07:57:44 +02:00
|
|
|
|
2008-08-09 07:00:42 +02:00
|
|
|
$this->assertType('DataObjectDecoratorTest_RelatedObject', $contact->RelatedObjects()->First());
|
|
|
|
$this->assertEquals("Lorem ipsum dolor", $contact->RelatedObjects()->First()->FieldOne);
|
|
|
|
$this->assertEquals("Random notes", $contact->RelatedObjects()->First()->FieldTwo);
|
|
|
|
$contact->delete();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
class DataObjectDecoratorTest_Member extends DataObject implements TestOnly {
|
|
|
|
|
|
|
|
static $db = array(
|
|
|
|
"Name" => "Text",
|
|
|
|
"Email" => "Text"
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
class DataObjectDecoratorTest_ContactRole extends DataObjectDecorator implements TestOnly {
|
|
|
|
|
|
|
|
function extraDBFields() {
|
|
|
|
return array(
|
|
|
|
'db' => array(
|
|
|
|
'Website' => 'Text',
|
|
|
|
'Phone' => 'Varchar(255)',
|
|
|
|
),
|
|
|
|
'has_many' => array(
|
|
|
|
'RelatedObjects' => 'DataObjectDecoratorTest_RelatedObject'
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class DataObjectDecoratorTest_RelatedObject extends DataObject implements TestOnly {
|
|
|
|
|
|
|
|
static $db = array(
|
|
|
|
"FieldOne" => "Text",
|
2008-08-09 07:57:44 +02:00
|
|
|
"FieldTwo" => "Text"
|
2008-08-09 07:00:42 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
static $has_one = array(
|
2008-08-09 07:57:44 +02:00
|
|
|
"Contact" => "DataObjectDecoratorTest_Member"
|
2008-08-09 07:00:42 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2008-08-11 08:01:16 +02:00
|
|
|
DataObject::add_extension('DataObjectDecoratorTest_Member', 'DataObjectDecoratorTest_ContactRole');
|
2008-08-09 07:00:42 +02:00
|
|
|
?>
|