2009-01-08 00:00:54 +01:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Possible actions:
|
|
|
|
* - action_save
|
|
|
|
* - action_publish
|
|
|
|
* - action_unpublish
|
|
|
|
* - action_delete
|
|
|
|
* - action_deletefromlive
|
|
|
|
* - action_rollback
|
|
|
|
* - action_revert
|
|
|
|
*
|
|
|
|
* @package sapphire
|
|
|
|
* @subpackage tests
|
|
|
|
*/
|
2009-08-06 23:39:04 +02:00
|
|
|
class SiteTreeActionsTest extends FunctionalTest {
|
|
|
|
|
|
|
|
static $fixture_file = 'sapphire/tests/SiteTreeActionsTest.yml';
|
2009-10-05 23:02:21 +02:00
|
|
|
|
|
|
|
static function set_up_once() {
|
|
|
|
SiteTreeTest::set_up_once();
|
|
|
|
|
|
|
|
parent::set_up_once();
|
|
|
|
}
|
|
|
|
|
|
|
|
static function tear_down_once() {
|
|
|
|
SiteTreeTest::tear_down_once();
|
|
|
|
|
|
|
|
parent::tear_down_once();
|
|
|
|
}
|
2009-10-17 07:11:23 +02:00
|
|
|
|
|
|
|
function testActionsReadonly() {
|
|
|
|
if(class_exists('SiteTreeCMSWorkflow')) return true;
|
|
|
|
|
2009-10-19 07:28:59 +02:00
|
|
|
$readonlyEditor = $this->objFromFixture('Member', 'cmsreadonlyeditor');
|
|
|
|
$this->session()->inst_set('loggedInAs', $readonlyEditor->ID);
|
|
|
|
|
2009-10-17 07:11:23 +02:00
|
|
|
$page = new SiteTreeActionsTest_Page();
|
|
|
|
$page->CanEditType = 'LoggedInUsers';
|
|
|
|
$page->write();
|
|
|
|
$page->doPublish();
|
|
|
|
|
|
|
|
$actionsArr = $page->getCMSActions()->column('Name');
|
|
|
|
|
|
|
|
$this->assertNotContains('action_save',$actionsArr);
|
|
|
|
$this->assertNotContains('action_publish',$actionsArr);
|
|
|
|
$this->assertNotContains('action_unpublish',$actionsArr);
|
|
|
|
$this->assertNotContains('action_delete',$actionsArr);
|
|
|
|
$this->assertNotContains('action_deletefromlive',$actionsArr);
|
|
|
|
$this->assertNotContains('action_rollback',$actionsArr);
|
|
|
|
$this->assertNotContains('action_revert',$actionsArr);
|
|
|
|
}
|
|
|
|
|
|
|
|
function testActionsNoDeletePublishedRecord() {
|
|
|
|
if(class_exists('SiteTreeCMSWorkflow')) return true;
|
2009-10-19 07:28:59 +02:00
|
|
|
|
|
|
|
$this->logInWithPermssion('ADMIN');
|
2009-10-17 07:11:23 +02:00
|
|
|
|
|
|
|
$page = new SiteTreeActionsTest_Page();
|
|
|
|
$page->CanEditType = 'LoggedInUsers';
|
|
|
|
$page->write();
|
2009-10-19 07:28:59 +02:00
|
|
|
$pageID = $page->ID;
|
2009-10-17 07:11:23 +02:00
|
|
|
$page->doPublish();
|
|
|
|
$page->deleteFromStage('Stage');
|
|
|
|
|
|
|
|
// Get the live version of the page
|
|
|
|
$page = Versioned::get_one_by_stage("SiteTree", "Live", "\"SiteTree\".\"ID\" = $pageID");
|
2009-10-19 07:28:59 +02:00
|
|
|
$this->assertType("SiteTree", $page);
|
|
|
|
|
|
|
|
// Check that someone without the right permission can't delete the page
|
2009-10-17 07:11:23 +02:00
|
|
|
$editor = $this->objFromFixture('Member', 'cmsnodeleteeditor');
|
|
|
|
$this->session()->inst_set('loggedInAs', $editor->ID);
|
2009-10-19 07:28:59 +02:00
|
|
|
|
2009-10-17 07:11:23 +02:00
|
|
|
$actionsArr = $page->getCMSActions()->column('Name');
|
|
|
|
$this->assertNotContains('action_deletefromlive',$actionsArr);
|
2009-10-19 07:28:59 +02:00
|
|
|
|
|
|
|
// Check that someone with the right permission can delete the page
|
|
|
|
$this->objFromFixture('Member', 'cmseditor')->logIn();
|
|
|
|
$actionsArr = $page->getCMSActions()->column('Name');
|
|
|
|
$this->assertContains('action_deletefromlive',$actionsArr);
|
2009-10-17 07:11:23 +02:00
|
|
|
}
|
2009-08-06 23:39:04 +02:00
|
|
|
|
|
|
|
function testActionsPublishedRecord() {
|
|
|
|
if(class_exists('SiteTreeCMSWorkflow')) return true;
|
2009-10-19 07:28:59 +02:00
|
|
|
|
|
|
|
$author = $this->objFromFixture('Member', 'cmseditor');
|
|
|
|
$this->session()->inst_set('loggedInAs', $author->ID);
|
2009-08-06 23:39:04 +02:00
|
|
|
|
|
|
|
$page = new Page();
|
2009-08-08 06:21:51 +02:00
|
|
|
$page->CanEditType = 'LoggedInUsers';
|
2009-08-06 23:39:04 +02:00
|
|
|
$page->write();
|
2009-08-08 06:21:51 +02:00
|
|
|
$page->doPublish();
|
2009-08-06 23:39:04 +02:00
|
|
|
|
|
|
|
$actionsArr = $page->getCMSActions()->column('Name');
|
2009-01-08 00:00:54 +01:00
|
|
|
|
2009-08-06 23:39:04 +02:00
|
|
|
$this->assertContains('action_save',$actionsArr);
|
|
|
|
$this->assertContains('action_publish',$actionsArr);
|
|
|
|
$this->assertContains('action_unpublish',$actionsArr);
|
|
|
|
$this->assertContains('action_delete',$actionsArr);
|
|
|
|
$this->assertNotContains('action_deletefromlive',$actionsArr);
|
|
|
|
$this->assertNotContains('action_rollback',$actionsArr);
|
|
|
|
$this->assertNotContains('action_revert',$actionsArr);
|
|
|
|
}
|
|
|
|
|
|
|
|
function testActionsDeletedFromStageRecord() {
|
|
|
|
if(class_exists('SiteTreeCMSWorkflow')) return true;
|
2009-10-19 07:28:59 +02:00
|
|
|
|
|
|
|
$author = $this->objFromFixture('Member', 'cmseditor');
|
|
|
|
$this->session()->inst_set('loggedInAs', $author->ID);
|
2009-01-08 00:00:54 +01:00
|
|
|
|
2009-08-06 23:39:04 +02:00
|
|
|
$page = new Page();
|
2009-08-08 06:21:51 +02:00
|
|
|
$page->CanEditType = 'LoggedInUsers';
|
2009-08-06 23:39:04 +02:00
|
|
|
$page->write();
|
|
|
|
$pageID = $page->ID;
|
2009-08-08 06:21:51 +02:00
|
|
|
$page->doPublish();
|
2009-08-06 23:39:04 +02:00
|
|
|
$page->deleteFromStage('Stage');
|
2009-01-08 00:00:54 +01:00
|
|
|
|
2009-08-06 23:39:04 +02:00
|
|
|
// Get the live version of the page
|
2009-09-17 02:17:06 +02:00
|
|
|
$page = Versioned::get_one_by_stage("SiteTree", "Live", "\"SiteTree\".\"ID\" = $pageID");
|
2009-01-08 00:00:54 +01:00
|
|
|
|
2009-08-06 23:39:04 +02:00
|
|
|
$actionsArr = $page->getCMSActions()->column('Name');
|
2009-01-08 00:00:54 +01:00
|
|
|
|
2009-08-06 23:39:04 +02:00
|
|
|
$this->assertNotContains('action_save',$actionsArr);
|
|
|
|
$this->assertNotContains('action_publish',$actionsArr);
|
|
|
|
$this->assertNotContains('action_unpublish',$actionsArr);
|
|
|
|
$this->assertNotContains('action_delete',$actionsArr);
|
|
|
|
$this->assertContains('action_deletefromlive',$actionsArr);
|
|
|
|
$this->assertNotContains('action_rollback',$actionsArr);
|
|
|
|
$this->assertContains('action_revert',$actionsArr);
|
|
|
|
}
|
2009-10-17 07:11:23 +02:00
|
|
|
|
2009-08-06 23:39:04 +02:00
|
|
|
function testActionsChangedOnStageRecord() {
|
|
|
|
if(class_exists('SiteTreeCMSWorkflow')) return true;
|
2009-01-08 00:00:54 +01:00
|
|
|
|
2009-10-19 07:28:59 +02:00
|
|
|
$author = $this->objFromFixture('Member', 'cmseditor');
|
|
|
|
$this->session()->inst_set('loggedInAs', $author->ID);
|
|
|
|
|
2009-08-06 23:39:04 +02:00
|
|
|
$page = new Page();
|
2009-08-08 06:21:51 +02:00
|
|
|
$page->CanEditType = 'LoggedInUsers';
|
2009-08-06 23:39:04 +02:00
|
|
|
$page->write();
|
2009-08-08 06:21:51 +02:00
|
|
|
$page->doPublish();
|
2009-08-06 23:39:04 +02:00
|
|
|
$page->Content = 'Changed on Stage';
|
|
|
|
$page->write();
|
|
|
|
$page->flushCache();
|
2009-01-08 00:00:54 +01:00
|
|
|
|
2009-08-06 23:39:04 +02:00
|
|
|
$actionsArr = $page->getCMSActions()->column('Name');
|
|
|
|
|
|
|
|
$this->assertContains('action_save',$actionsArr);
|
|
|
|
$this->assertContains('action_publish',$actionsArr);
|
|
|
|
$this->assertContains('action_unpublish',$actionsArr);
|
|
|
|
$this->assertContains('action_delete',$actionsArr);
|
|
|
|
$this->assertNotContains('action_deletefromlive',$actionsArr);
|
|
|
|
$this->assertContains('action_rollback',$actionsArr);
|
|
|
|
$this->assertNotContains('action_revert',$actionsArr);
|
2009-01-08 00:00:54 +01:00
|
|
|
}
|
|
|
|
}
|
2009-10-17 07:11:23 +02:00
|
|
|
|
|
|
|
class SiteTreeActionsTest_Page extends Page implements TestOnly {
|
|
|
|
function canEdit($member = null) {
|
|
|
|
return Permission::checkMember($member, 'SiteTreeActionsTest_Page_CANEDIT');
|
|
|
|
}
|
|
|
|
|
|
|
|
function canDelete($member = null) {
|
|
|
|
return Permission::checkMember($member, 'SiteTreeActionsTest_Page_CANDELETE');
|
|
|
|
}
|
|
|
|
}
|
2009-01-08 00:00:54 +01:00
|
|
|
?>
|