mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
MNT Add tests for overriding DataObject via injection
This commit is contained in:
parent
29fae72211
commit
0482444342
@ -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...
|
||||
|
12
tests/php/ORM/DataObjectTest/InjectedDataObject.php
Normal file
12
tests/php/ORM/DataObjectTest/InjectedDataObject.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\ORM\Tests\DataObjectTest;
|
||||
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
|
||||
class InjectedDataObject extends OverriddenDataObject implements TestOnly
|
||||
{
|
||||
private static $db = [
|
||||
'NewField' => 'Varchar',
|
||||
];
|
||||
}
|
20
tests/php/ORM/DataObjectTest/OverriddenDataObject.php
Normal file
20
tests/php/ORM/DataObjectTest/OverriddenDataObject.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\ORM\Tests\DataObjectTest;
|
||||
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
|
||||
class OverriddenDataObject extends DataObject implements TestOnly
|
||||
{
|
||||
private static $table_name = 'DataObjectTest_OverriddenDataObject';
|
||||
|
||||
private static $db = [
|
||||
'Salary' => 'BigInt',
|
||||
'EmploymentType' => 'Varchar',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'CurrentCompany' => Company::class,
|
||||
];
|
||||
}
|
Loading…
Reference in New Issue
Block a user