From 12c9705f4735792a9f913b951fadabe55ed6597a Mon Sep 17 00:00:00 2001 From: Tom Rix Date: Mon, 1 Mar 2010 22:32:24 +0000 Subject: [PATCH] BUGFIX: Fix virtual page logic for subsite virtual pages too. (from r93916) (from r96338) --- tests/SubsitesVirtualPageTest.php | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/tests/SubsitesVirtualPageTest.php b/tests/SubsitesVirtualPageTest.php index 5991212..61dc493 100644 --- a/tests/SubsitesVirtualPageTest.php +++ b/tests/SubsitesVirtualPageTest.php @@ -229,7 +229,66 @@ class SubsitesVirtualPageTest extends SapphireTest { foreach($testFiles as $file) { if(file_exists(Director::baseFolder().$file)) unlink(Director::baseFolder().$file); } + } + function testSubsiteVirtualPagesArentInappropriatelyPublished() { + // Fixture + $p = new Page(); + $p->Content = "test content"; + $p->write(); + $vp = new SubsitesVirtualPage(); + $vp->CopyContentFromID = $p->ID; + $vp->write(); + + // VP is oragne + $this->assertTrue($vp->IsAddedToStage); + + // VP is still orange after we publish + $p->doPublish(); + $this->fixVersionNumberCache($vp); + $this->assertTrue($vp->IsAddedToStage); + + // A new VP created after P's initial construction + $vp2 = new SubsitesVirtualPage(); + $vp2->CopyContentFromID = $p->ID; + $vp2->write(); + $this->assertTrue($vp2->IsAddedToStage); + + // Also remains orange after a republish + $p->Content = "new content"; + $p->write(); + $p->doPublish(); + $this->fixVersionNumberCache($vp2); + $this->assertTrue($vp2->IsAddedToStage); + + // VP is now published + $vp->doPublish(); + + $this->fixVersionNumberCache($vp); + $this->assertTrue($vp->ExistsOnLive); + $this->assertFalse($vp->IsModifiedOnStage); + + // P edited, VP and P both go green + $p->Content = "third content"; + $p->write(); + + $this->fixVersionNumberCache($vp, $p); + $this->assertTrue($p->IsModifiedOnStage); + $this->assertTrue($vp->IsModifiedOnStage); + + // Publish, VP goes black + $p->doPublish(); + $this->fixVersionNumberCache($vp); + $this->assertTrue($vp->ExistsOnLive); + $this->assertFalse($vp->IsModifiedOnStage); + } + + function fixVersionNumberCache($page) { + $pages = func_get_args(); + foreach($pages as $p) { + Versioned::prepopulate_versionnumber_cache('SiteTree', 'Stage', array($p->ID)); + Versioned::prepopulate_versionnumber_cache('SiteTree', 'Live', array($p->ID)); + } } } \ No newline at end of file