Source of file ChangeSetItemTest.php
Size: 3,625 Bytes - Last Modified: 2021-12-23T10:35:47+00:00
/var/www/docs.ssmods.com/process/src/tests/php/ChangeSetItemTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | <?php namespace SilverStripe\Versioned\Tests; use SilverStripe\Versioned\ChangeSetItem; use SilverStripe\Dev\SapphireTest; class ChangeSetItemTest extends SapphireTest { protected static $extra_dataobjects = [ ChangeSetItemTest\VersionedObject::class, ChangeSetItemTest\UnstagedObject::class, ]; public function testChangeType() { $this->logInWithPermission('ADMIN'); $object = new ChangeSetItemTest\VersionedObject(['Foo' => 1]); $object->write(); $item = new ChangeSetItem( [ 'ObjectID' => $object->ID, 'ObjectClass' => $object->baseClass(), ] ); $this->assertEquals( ChangeSetItem::CHANGE_CREATED, $item->ChangeType, 'New objects that aren\'t yet published should return created' ); $object->publishRecursive(); $this->assertEquals( ChangeSetItem::CHANGE_NONE, $item->ChangeType, 'Objects that have just been published should return no change' ); $object->Foo += 1; $object->write(); $this->assertEquals( ChangeSetItem::CHANGE_MODIFIED, $item->ChangeType, 'Object that have unpublished changes written to draft should show as modified' ); $object->publishRecursive(); $this->assertEquals( ChangeSetItem::CHANGE_NONE, $item->ChangeType, 'Objects that have just been published should return no change' ); // We need to use a copy, because ID is set to 0 by delete, causing the following unpublish to fail $objectCopy = clone $object; $objectCopy->delete(); $this->assertEquals( ChangeSetItem::CHANGE_DELETED, $item->ChangeType, 'Objects that have been deleted from draft (but not yet unpublished) should show as deleted' ); $object->doUnpublish(); $this->assertEquals( ChangeSetItem::CHANGE_NONE, $item->ChangeType, 'Objects that have been deleted and then unpublished should return no change' ); } public function testGetForObject() { $this->logInWithPermission('ADMIN'); $object = new ChangeSetItemTest\VersionedObject(['Foo' => 1]); $object->write(); $item = new ChangeSetItem( [ 'ObjectID' => $object->ID, 'ObjectClass' => $object->baseClass(), ] ); $item->write(); $this->assertEquals( ChangeSetItemTest\VersionedObject::get()->byID($object->ID)->toMap(), ChangeSetItem::get_for_object($object)->first()->Object()->toMap() ); $this->assertEquals( ChangeSetItemTest\VersionedObject::get()->byID($object->ID)->toMap(), ChangeSetItem::get_for_object_by_id($object->ID, $object->ClassName)->first()->Object()->toMap() ); } public function testUnstagedObject() { $object = new ChangeSetItemTest\UnstagedObject(['Bar' => 2]); $object->write(); $item = new ChangeSetItem( [ 'ObjectID' => $object->ID, 'ObjectClass' => $object->baseClass(), ] ); $this->assertEquals( ChangeSetItem::CHANGE_NONE, $item->ChangeType, 'Unstaged objects have no change type' ); $this->assertTrue($item->canPublish()); // Should not error $item->publish(); } } |