2011-08-30 00:26:40 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @package cms
|
|
|
|
* @subpackage tests
|
|
|
|
*/
|
|
|
|
|
|
|
|
class CMSPageHistoryControllerTest extends FunctionalTest {
|
|
|
|
|
|
|
|
static $fixture_file = 'CMSPageHistoryControllerTest.yml';
|
|
|
|
|
|
|
|
private $versionUnpublishedCheck, $versionPublishCheck, $versionUnpublishedCheck2;
|
|
|
|
private $page;
|
|
|
|
|
|
|
|
function setUp() {
|
|
|
|
parent::setUp();
|
|
|
|
|
|
|
|
$this->loginWithPermission('ADMIN');
|
|
|
|
|
|
|
|
// creates a series of published, unpublished versions of a page
|
|
|
|
$this->page = new Page();
|
|
|
|
$this->page->URLSegment = "test";
|
|
|
|
$this->page->Content = "new content";
|
|
|
|
$this->page->write();
|
|
|
|
$this->versionUnpublishedCheck = $this->page->Version;
|
|
|
|
|
|
|
|
$this->page->Content = "some further content";
|
|
|
|
$this->page->write();
|
|
|
|
$this->page->publish('Stage', 'Live');
|
|
|
|
$this->versionPublishCheck = $this->page->Version;
|
|
|
|
|
|
|
|
$this->page->Content = "No, more changes please";
|
|
|
|
$this->page->Title = "Changing titles too";
|
|
|
|
$this->page->write();
|
|
|
|
$this->versionUnpublishedCheck2 = $this->page->Version;
|
|
|
|
|
|
|
|
$this->page->Title = "Final Change";
|
|
|
|
$this->page->write();
|
|
|
|
$this->page->publish('Stage', 'Live');
|
|
|
|
$this->versionPublishCheck2 = $this->page->Version;
|
|
|
|
}
|
|
|
|
|
|
|
|
function testGetEditForm() {
|
2011-08-30 02:36:02 +02:00
|
|
|
$controller = new CMSPageHistoryController();
|
|
|
|
|
|
|
|
// should get the latest version which we cannot rollback to
|
|
|
|
$form = $controller->getEditForm($this->page->ID);
|
|
|
|
|
|
|
|
$this->assertTrue($form->Actions()->dataFieldByName('action_doRollback')->isReadonly());
|
|
|
|
|
|
|
|
$this->assertEquals($this->page->ID, $form->dataFieldByName('ID')->Value());
|
|
|
|
$this->assertEquals($this->versionPublishCheck2, $form->dataFieldByName('Version')->Value());
|
|
|
|
|
|
|
|
$this->assertContains(
|
|
|
|
sprintf("Currently viewing version %s.", $this->versionPublishCheck2),
|
|
|
|
$form->Fields()->fieldByName('Root.Main.CurrentlyViewingMessage')->getContent()
|
|
|
|
);
|
|
|
|
|
|
|
|
// edit form with a given version
|
|
|
|
$form = $controller->getEditForm($this->page->ID, null, $this->versionPublishCheck);
|
|
|
|
$this->assertFalse($form->Actions()->dataFieldByName('action_doRollback')->isReadonly());
|
2011-08-30 00:26:40 +02:00
|
|
|
|
2011-08-30 02:36:02 +02:00
|
|
|
$this->assertEquals($this->page->ID, $form->dataFieldByName('ID')->Value());
|
|
|
|
$this->assertEquals($this->versionPublishCheck, $form->dataFieldByName('Version')->Value());
|
|
|
|
$this->assertContains(
|
|
|
|
sprintf("Currently viewing version %s.", $this->versionPublishCheck),
|
|
|
|
$form->Fields()->fieldByName('Root.Main.CurrentlyViewingMessage')->getContent()
|
|
|
|
);
|
|
|
|
|
|
|
|
// check that compare mode updates the message
|
|
|
|
$form = $controller->getEditForm($this->page->ID, null, $this->versionPublishCheck, $this->versionPublishCheck2);
|
|
|
|
$this->assertContains(
|
|
|
|
sprintf("Comparing versions %s", $this->versionPublishCheck),
|
|
|
|
$form->Fields()->fieldByName('Root.Main.CurrentlyViewingMessage')->getContent()
|
|
|
|
);
|
|
|
|
|
|
|
|
$this->assertContains(
|
|
|
|
sprintf("and %s", $this->versionPublishCheck2),
|
|
|
|
$form->Fields()->fieldByName('Root.Main.CurrentlyViewingMessage')->getContent()
|
|
|
|
);
|
2011-08-30 00:26:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2011-08-30 02:36:02 +02:00
|
|
|
* @todo should be less tied to cms theme.
|
|
|
|
* @todo check highlighting for comparing pages.
|
2011-08-30 00:26:40 +02:00
|
|
|
*/
|
|
|
|
function testVersionsForm() {
|
|
|
|
$history = $this->get('admin/page/history/show/'. $this->page->ID);
|
|
|
|
|
|
|
|
$form = $this->cssParser()->getBySelector("#Form_VersionsForm");
|
|
|
|
$this->assertEquals(1, count($form));
|
|
|
|
|
|
|
|
// check the page ID is present
|
|
|
|
$hidden = $form[0]->xpath("fieldset/input[@type='hidden']");
|
|
|
|
$this->assertFalse($hidden == null, 'Hidden ID field exists');
|
|
|
|
$this->assertEquals(4, (int) $hidden[0]->attributes()->value);
|
|
|
|
|
|
|
|
// ensure that all the versions are present in the table and displayed
|
|
|
|
$rows = $form[0]->xpath("fieldset/table/tbody/tr");
|
|
|
|
|
|
|
|
$this->assertFalse($hidden == null, "Versions exist in table");
|
|
|
|
$this->assertEquals(4, count($rows));
|
|
|
|
|
|
|
|
$expected = array(
|
|
|
|
array('version' => $this->versionPublishCheck2, 'status' => 'published'),
|
|
|
|
array('version' => $this->versionUnpublishedCheck2, 'status' => 'internal'),
|
|
|
|
array('version' => $this->versionPublishCheck, 'status' => 'published'),
|
|
|
|
array('version' => $this->versionUnpublishedCheck, 'status' => 'internal')
|
|
|
|
);
|
|
|
|
|
|
|
|
// goes the reverse order that we created in setUp();
|
|
|
|
$i = 0;
|
|
|
|
foreach($rows as $tr) {
|
|
|
|
$this->assertEquals(
|
|
|
|
sprintf('admin/page/history/show/%d/%d', $this->page->ID, $expected[$i]['version']),
|
|
|
|
(string) $tr->attributes()->{'data-link'}
|
|
|
|
);
|
|
|
|
|
|
|
|
$this->assertContains($expected[$i]['status'], (string) $tr->attributes()->class);
|
|
|
|
$i++;
|
|
|
|
}
|
|
|
|
|
2011-08-30 02:36:02 +02:00
|
|
|
// test highlighting
|
|
|
|
$this->assertContains('active', (string) $rows[0]->attributes()->class);
|
|
|
|
$this->assertThat((string) $rows[1]->attributes()->class, $this->logicalNot($this->stringContains('active')));
|
2011-08-30 00:26:40 +02:00
|
|
|
}
|
|
|
|
}
|