diff --git a/tests/php/ORM/DataObjectTest.php b/tests/php/ORM/DataObjectTest.php index 6bc8350de..9ec9e1629 100644 --- a/tests/php/ORM/DataObjectTest.php +++ b/tests/php/ORM/DataObjectTest.php @@ -5,6 +5,7 @@ namespace SilverStripe\ORM\Tests; use InvalidArgumentException; use LogicException; use SilverStripe\Core\Config\Config; +use SilverStripe\Core\Injector\Injector; use SilverStripe\Dev\SapphireTest; use SilverStripe\i18n\i18n; use SilverStripe\ORM\Connect\MySQLDatabase; @@ -63,11 +64,14 @@ class DataObjectTest extends SapphireTest DataObjectTest\RelationChildSecond::class, DataObjectTest\MockDynamicAssignmentDataObject::class, DataObjectTest\TreeNode::class, + DataObjectTest\OverriddenDataObject::class, + DataObjectTest\InjectedDataObject::class, ]; protected function setUp(): void { parent::setUp(); + Config::modify()->merge(Injector::class, DataObjectTest\OverriddenDataObject::class, ['class' => DataObjectTest\InjectedDataObject::class]); $validator = Member::password_validator(); if ($validator) { @@ -186,6 +190,26 @@ class DataObjectTest extends SapphireTest ); } + public function testTableBuiltForInjectedDataObject() + { + // Test we get the correct injected class + $obj = DataObjectTest\OverriddenDataObject::create(); + $this->assertSame(DataObjectTest\InjectedDataObject::class, get_class($obj)); + + // Test both tables are built + $schema = DataObject::getSchema(); + $this->assertTrue($schema->classHasTable(DataObjectTest\OverriddenDataObject::class)); + $this->assertTrue($schema->classHasTable(DataObjectTest\InjectedDataObject::class)); + + // Test fields from both the overridden and injected class exist + $obj->EmploymentType = 'Some type'; + $obj->NewField = 'Some value'; + $obj->write(); + $objFromOrm = DataObjectTest\OverriddenDataObject::get()->first(); + $this->assertSame('Some type', $objFromOrm->EmploymentType); + $this->assertSame('Some value', $objFromOrm->NewField); + } + public function testConstructAcceptsValues() { // Values can be an array... diff --git a/tests/php/ORM/DataObjectTest/InjectedDataObject.php b/tests/php/ORM/DataObjectTest/InjectedDataObject.php new file mode 100644 index 000000000..0d6a117ae --- /dev/null +++ b/tests/php/ORM/DataObjectTest/InjectedDataObject.php @@ -0,0 +1,12 @@ + 'Varchar', + ]; +} diff --git a/tests/php/ORM/DataObjectTest/OverriddenDataObject.php b/tests/php/ORM/DataObjectTest/OverriddenDataObject.php new file mode 100644 index 000000000..972421853 --- /dev/null +++ b/tests/php/ORM/DataObjectTest/OverriddenDataObject.php @@ -0,0 +1,20 @@ + 'BigInt', + 'EmploymentType' => 'Varchar', + ]; + + private static $has_one = [ + 'CurrentCompany' => Company::class, + ]; +}