Source of file SiteTreeActionsTest.php
Size: 6,717 Bytes - Last Modified: 2021-12-23T10:28:18+00:00
/var/www/docs.ssmods.com/process/src/tests/php/Model/SiteTreeActionsTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 | <?php namespace SilverStripe\CMS\Tests\Model; use Page; use SilverStripe\CMS\Model\SiteTree; use SilverStripe\Dev\FunctionalTest; use SilverStripe\ORM\DB; use SilverStripe\Security\Member; use SilverStripe\Security\Security; use SilverStripe\Versioned\Versioned; /** * Possible actions: * - action_save * - action_publish * - action_unpublish * - action_archive * - action_rollback * - action_revert */ class SiteTreeActionsTest extends FunctionalTest { protected static $fixture_file = 'SiteTreeActionsTest.yml'; public function testActionsReadonly() { // Publish record $this->logInWithPermission('ADMIN'); $page = new SiteTreeActionsTest_Page(); $page->CanEditType = 'LoggedInUsers'; $page->write(); $page->publishRecursive(); // Log in as another user $readonlyEditor = $this->objFromFixture(Member::class, 'cmsreadonlyeditor'); Security::setCurrentUser($readonlyEditor); // Reload latest version $page = Page::get()->byID($page->ID); $actions = $page->getCMSActions(); $this->assertNull($actions->dataFieldByName('action_save')); $this->assertNull($actions->dataFieldByName('action_publish')); $this->assertNull($actions->dataFieldByName('action_unpublish')); $this->assertNull($actions->dataFieldByName('action_archive')); $this->assertNull($actions->dataFieldByName('action_rollback')); $this->assertNull($actions->dataFieldByName('action_revert')); } public function testActionsNoDeletePublishedRecord() { $this->logInWithPermission('ADMIN'); $page = new SiteTreeActionsTest_Page(); $page->CanEditType = 'LoggedInUsers'; $page->write(); $pageID = $page->ID; $page->publishRecursive(); $page->deleteFromStage(Versioned::DRAFT); // Get the live version of the page $page = Versioned::get_one_by_stage(SiteTree::class, "Live", "\"SiteTree\".\"ID\" = $pageID"); $this->assertInstanceOf(SiteTree::class, $page); // Check that someone without the right permission can't delete the page $editor = $this->objFromFixture(Member::class, 'cmsnodeleteeditor'); Security::setCurrentUser($editor); $actions = $page->getCMSActions(); $this->assertNull($actions->dataFieldByName('action_archive')); // Check that someone with the right permission can delete the page /** @var Member $member */ $member = $this->objFromFixture(Member::class, 'cmseditor'); Security::setCurrentUser($member); $actions = $page->getCMSActions(); $this->assertNotNull($actions->dataFieldByName('action_archive')); } public function testActionsPublishedRecord() { $author = $this->objFromFixture(Member::class, 'cmseditor'); Security::setCurrentUser($author); /** @var Page $page */ $page = new Page(); $page->CanEditType = 'LoggedInUsers'; $page->write(); $page->publishRecursive(); // Reload latest version $page = Page::get()->byID($page->ID); $actions = $page->getCMSActions(); $this->assertNotNull($actions->dataFieldByName('action_save')); $this->assertNotNull($actions->dataFieldByName('action_publish')); $this->assertNotNull($actions->dataFieldByName('action_unpublish')); $this->assertNotNull($actions->dataFieldByName('action_archive')); $this->assertNull($actions->dataFieldByName('action_rollback')); $this->assertNull($actions->dataFieldByName('action_revert')); } public function testActionsDeletedFromStageRecord() { $author = $this->objFromFixture(Member::class, 'cmseditor'); Security::setCurrentUser($author); $page = new Page(); $page->CanEditType = 'LoggedInUsers'; $page->write(); $this->assertTrue($page->canPublish()); $pageID = $page->ID; $page->publishRecursive(); $page->deleteFromStage('Stage'); // Get the live version of the page $page = Versioned::get_one_by_stage(SiteTree::class, "Live", "\"SiteTree\".\"ID\" = $pageID"); $this->assertInstanceOf(SiteTree::class, $page); $actions = $page->getCMSActions(); $this->assertNull($actions->dataFieldByName('action_save')); $this->assertNull($actions->dataFieldByName('action_publish')); $this->assertNull($actions->dataFieldByName('action_unpublish')); $this->assertNotNull($actions->dataFieldByName('action_archive')); $this->assertNull($actions->dataFieldByName('action_rollback')); $this->assertNotNull($actions->dataFieldByName('action_revert')); } public function testActionsChangedOnStageRecord() { $author = $this->objFromFixture(Member::class, 'cmseditor'); Security::setCurrentUser($author); $page = new Page(); $page->CanEditType = 'LoggedInUsers'; $page->write(); $this->assertTrue($page->canPublish()); $page->publishRecursive(); $page->Content = 'Changed on Stage'; $page->write(); $page->flushCache(); // Reload latest version $page = Page::get()->byID($page->ID); $actions = $page->getCMSActions(); $this->assertNotNull($actions->dataFieldByName('action_save')); $this->assertNotNull($actions->dataFieldByName('action_publish')); $this->assertNotNull($actions->dataFieldByName('action_unpublish')); $this->assertNotNull($actions->dataFieldByName('action_archive')); $this->assertNotNull($actions->dataFieldByName('action_rollback')); $this->assertNull($actions->dataFieldByName('action_revert')); } public function testActionsViewingOldVersion() { $p = new Page(); $p->Content = 'test page first version'; $p->write(); $p->Content = 'new content'; $p->write(); // Looking at the old version, the ability to rollback to that version is available $version = DB::query('SELECT "Version" FROM "SiteTree_Versions" WHERE "Content" = \'test page first version\'')->value(); $old = Versioned::get_version('Page', $p->ID, $version); $actions = $old->getCMSActions(); $this->assertNull($actions->dataFieldByName('action_save')); $this->assertNull($actions->dataFieldByName('action_publish')); $this->assertNull($actions->dataFieldByName('action_unpublish')); $this->assertNotNull($actions->dataFieldByName('action_email')); $this->assertNotNull($actions->dataFieldByName('action_rollback')); } } |