silverstripe-cms/tests/model/SiteTreeActionsTest.php

182 lines
6.6 KiB
PHP
Raw Normal View History

<?php
use SilverStripe\ORM\Versioning\Versioned;
use SilverStripe\ORM\DB;
use SilverStripe\Security\Permission;
use SilverStripe\Dev\FunctionalTest;
use SilverStripe\Dev\TestOnly;
/**
* Possible actions:
* - action_save
* - action_publish
* - action_unpublish
* - action_archive
* - action_deletefromlive
* - action_rollback
* - action_revert
*
* @package cms
* @subpackage tests
*/
class SiteTreeActionsTest extends FunctionalTest {
protected static $fixture_file = 'SiteTreeActionsTest.yml';
2016-03-08 21:50:55 +01:00
public function testActionsReadonly() {
if(class_exists('SiteTreeCMSWorkflow')) return true;
2016-03-08 21:50:55 +01:00
$readonlyEditor = $this->objFromFixture('SilverStripe\\Security\\Member', 'cmsreadonlyeditor');
$this->session()->inst_set('loggedInAs', $readonlyEditor->ID);
2016-03-08 21:50:55 +01:00
$page = new SiteTreeActionsTest_Page();
$page->CanEditType = 'LoggedInUsers';
$page->write();
2016-04-01 05:17:37 +02:00
$page->publishRecursive();
2016-03-08 21:50:55 +01:00
$actions = $page->getCMSActions();
2016-03-08 21:50:55 +01:00
$this->assertNull($actions->dataFieldByName('action_save'));
$this->assertNull($actions->dataFieldByName('action_publish'));
$this->assertNull($actions->dataFieldByName('action_unpublish'));
$this->assertNull($actions->dataFieldByName('action_delete'));
$this->assertNull($actions->dataFieldByName('action_deletefromlive'));
$this->assertNull($actions->dataFieldByName('action_rollback'));
$this->assertNull($actions->dataFieldByName('action_revert'));
}
2016-03-08 21:50:55 +01:00
public function testActionsNoDeletePublishedRecord() {
if(class_exists('SiteTreeCMSWorkflow')) return true;
$this->logInWithPermission('ADMIN');
2016-03-08 21:50:55 +01:00
$page = new SiteTreeActionsTest_Page();
$page->CanEditType = 'LoggedInUsers';
$page->write();
$pageID = $page->ID;
2016-04-01 05:17:37 +02:00
$page->publishRecursive();
$page->deleteFromStage('Stage');
2016-03-08 21:50:55 +01:00
// Get the live version of the page
2016-07-22 01:32:32 +02:00
$page = Versioned::get_one_by_stage("SilverStripe\\CMS\\Model\\SiteTree", "Live", "\"SiteTree\".\"ID\" = $pageID");
$this->assertInstanceOf("SilverStripe\\CMS\\Model\\SiteTree", $page);
2016-03-08 21:50:55 +01:00
// Check that someone without the right permission can't delete the page
$editor = $this->objFromFixture('SilverStripe\\Security\\Member', 'cmsnodeleteeditor');
$this->session()->inst_set('loggedInAs', $editor->ID);
$actions = $page->getCMSActions();
$this->assertNull($actions->dataFieldByName('action_deletefromlive'));
// Check that someone with the right permission can delete the page
$this->objFromFixture('SilverStripe\\Security\\Member', 'cmseditor')->logIn();
$actions = $page->getCMSActions();
$this->assertNotNull($actions->dataFieldByName('action_deletefromlive'));
}
public function testActionsPublishedRecord() {
if(class_exists('SiteTreeCMSWorkflow')) return true;
$author = $this->objFromFixture('SilverStripe\\Security\\Member', 'cmseditor');
$this->session()->inst_set('loggedInAs', $author->ID);
2016-03-08 21:50:55 +01:00
$page = new Page();
$page->CanEditType = 'LoggedInUsers';
$page->write();
2016-04-01 05:17:37 +02:00
$page->publishRecursive();
$actions = $page->getCMSActions();
2016-03-08 21:50:55 +01:00
$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_deletefromlive'));
$this->assertNull($actions->dataFieldByName('action_rollback'));
$this->assertNull($actions->dataFieldByName('action_revert'));
}
2016-03-08 21:50:55 +01:00
public function testActionsDeletedFromStageRecord() {
if(class_exists('SiteTreeCMSWorkflow')) return true;
$author = $this->objFromFixture('SilverStripe\\Security\\Member', 'cmseditor');
$this->session()->inst_set('loggedInAs', $author->ID);
2016-03-08 21:50:55 +01:00
$page = new Page();
$page->CanEditType = 'LoggedInUsers';
$page->write();
$pageID = $page->ID;
2016-04-01 05:17:37 +02:00
$page->publishRecursive();
$page->deleteFromStage('Stage');
2016-03-08 21:50:55 +01:00
// Get the live version of the page
2016-07-22 01:32:32 +02:00
$page = Versioned::get_one_by_stage("SilverStripe\\CMS\\Model\\SiteTree", "Live", "\"SiteTree\".\"ID\" = $pageID");
$this->assertInstanceOf('SilverStripe\\CMS\\Model\\SiteTree', $page);
2016-03-08 21:50:55 +01:00
$actions = $page->getCMSActions();
2016-03-08 21:50:55 +01:00
$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->assertNotNull($actions->dataFieldByName('action_deletefromlive'));
$this->assertNull($actions->dataFieldByName('action_rollback'));
$this->assertNotNull($actions->dataFieldByName('action_revert'));
}
2016-03-08 21:50:55 +01:00
public function testActionsChangedOnStageRecord() {
if(class_exists('SiteTreeCMSWorkflow')) return true;
2016-03-08 21:50:55 +01:00
$author = $this->objFromFixture('SilverStripe\\Security\\Member', 'cmseditor');
$this->session()->inst_set('loggedInAs', $author->ID);
2016-03-08 21:50:55 +01:00
$page = new Page();
$page->CanEditType = 'LoggedInUsers';
$page->write();
2016-04-01 05:17:37 +02:00
$page->publishRecursive();
$page->Content = 'Changed on Stage';
$page->write();
$page->flushCache();
2016-03-08 21:50:55 +01:00
$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_deletefromlive'));
$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->assertNull($actions->dataFieldByName('action_archive'));
$this->assertNotNull($actions->dataFieldByName('action_email'));
$this->assertNotNull($actions->dataFieldByName('action_rollback'));
}
}
class SiteTreeActionsTest_Page extends Page implements TestOnly {
public function canEdit($member = null) {
return Permission::checkMember($member, 'SiteTreeActionsTest_Page_CANEDIT');
}
2016-03-08 21:50:55 +01:00
public function canDelete($member = null) {
return Permission::checkMember($member, 'SiteTreeActionsTest_Page_CANDELETE');
}
}