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() { $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()); $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() ); } /** * @todo should be less tied to cms theme. * @todo check highlighting for comparing pages. */ 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++; } // test highlighting $this->assertContains('active', (string) $rows[0]->attributes()->class); $this->assertThat((string) $rows[1]->attributes()->class, $this->logicalNot($this->stringContains('active'))); } }