diff --git a/src/VersionFeedController.php b/src/VersionFeedController.php index 130aa27..834e6dc 100644 --- a/src/VersionFeedController.php +++ b/src/VersionFeedController.php @@ -128,8 +128,8 @@ class VersionFeedController extends Extension // Check if the page should be visible. // WARNING: although we are providing historical details, we check the current configuration. $id = $record['RecordID']; - $page = DataObject::get_by_id(SiteTree::class, $id); if (!isset($canView[$id])) { + $page = DataObject::get_by_id(SiteTree::class, $id); $canView[$id] = $page && $page->canView(Security::getCurrentUser()); } if (!$canView[$id]) { @@ -137,7 +137,8 @@ class VersionFeedController extends Extension } // Get the diff to the previous version. - $version = $page; + $record['ID'] = $record['RecordID']; + $version = SiteTree::create($record); if ($diff = $version->getDiff()) { $changeList->push($diff); } diff --git a/tests/VersionFeedFunctionalTest.php b/tests/VersionFeedFunctionalTest.php index 89b7d8e..e75c656 100644 --- a/tests/VersionFeedFunctionalTest.php +++ b/tests/VersionFeedFunctionalTest.php @@ -54,7 +54,7 @@ class VersionFeedFunctionalTest extends FunctionalTest Config::modify()->set(RateLimitFilter::class, 'lock_cooldown', false); } - public function tearDown() + protected function tearDown() { Director::config()->set('alternate_base_url', null); @@ -68,24 +68,37 @@ class VersionFeedFunctionalTest extends FunctionalTest $page = $this->createPageWithChanges(array('PublicHistory' => false)); $response = $this->get($page->RelativeLink('changes')); - $this->assertEquals(404, $response->getStatusCode()); + $this->assertEquals( + 404, + $response->getStatusCode(), + 'With Page\'s "PublicHistory" disabled, `changes` action response code should be 404' + ); $response = $this->get($page->RelativeLink('allchanges')); $this->assertEquals(200, $response->getStatusCode()); $xml = simplexml_load_string($response->getBody()); - $this->assertFalse((bool)$xml->channel->item); + $this->assertFalse( + (bool)$xml->channel->item, + 'With Page\'s "PublicHistory" disabled, `allchanges` action should not have an item in the channel' + ); $page = $this->createPageWithChanges(array('PublicHistory' => true)); $response = $this->get($page->RelativeLink('changes')); $this->assertEquals(200, $response->getStatusCode()); $xml = simplexml_load_string($response->getBody()); - $this->assertTrue((bool)$xml->channel->item); + $this->assertTrue( + (bool)$xml->channel->item, + 'With Page\'s "PublicHistory" enabled, `changes` action should have an item in the channel' + ); $response = $this->get($page->RelativeLink('allchanges')); $this->assertEquals(200, $response->getStatusCode()); $xml = simplexml_load_string($response->getBody()); - $this->assertTrue((bool)$xml->channel->item); + $this->assertTrue( + (bool)$xml->channel->item, + 'With "PublicHistory" enabled, `allchanges` action should have an item in the channel' + ); } public function testRateLimiting() @@ -148,7 +161,7 @@ class VersionFeedFunctionalTest extends FunctionalTest Config::modify()->set(CachedContentFilter::class, 'cache_enabled', false); } - public function testContainsChangesForPageOnly() + public function testChangesActionContainsChangesForCurrentPageOnly() { $page1 = $this->createPageWithChanges(array('Title' => 'Page1')); $page2 = $this->createPageWithChanges(array('Title' => 'Page2')); @@ -172,7 +185,7 @@ class VersionFeedFunctionalTest extends FunctionalTest $this->assertContains('Changed: Page2', $titles); } - public function testContainsAllChangesForAllPages() + public function testAllChangesActionContainsAllChangesForAllPages() { $page1 = $this->createPageWithChanges(array('Title' => 'Page1')); $page2 = $this->createPageWithChanges(array('Title' => 'Page2')); diff --git a/tests/VersionFeedTest.php b/tests/VersionFeedTest.php index e7ee39c..b9e4fcc 100644 --- a/tests/VersionFeedTest.php +++ b/tests/VersionFeedTest.php @@ -33,11 +33,11 @@ class VersionFeedTest extends SapphireTest { $page = new Page(['Title' => 'My Title']); $page->write(); - $page->copyVersionToStage(Versioned::STAGE, Versioned::LIVE); + $page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $page->Title = 'My Changed Title'; $page->write(); - $page->copyVersionToStage(Versioned::STAGE, Versioned::LIVE); + $page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $page->Title = 'My Unpublished Changed Title'; $page->write();