Merge pull request #2129 from open-sausages/pulls/4/stage-by-get-param

Fix versioned regressions
This commit is contained in:
Daniel Hensby 2018-03-22 13:23:57 +00:00 committed by GitHub
commit 2366b09d50
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 107 additions and 71 deletions

View File

@ -6,6 +6,7 @@ use Page;
use Psr\SimpleCache\CacheInterface; use Psr\SimpleCache\CacheInterface;
use SilverStripe\Admin\CMSBatchActionHandler; use SilverStripe\Admin\CMSBatchActionHandler;
use SilverStripe\CMS\Controllers\CMSMain; use SilverStripe\CMS\Controllers\CMSMain;
use SilverStripe\CMS\Model\RedirectorPage;
use SilverStripe\CMS\Model\SiteTree; use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Control\Controller; use SilverStripe\Control\Controller;
use SilverStripe\Control\HTTPResponse_Exception; use SilverStripe\Control\HTTPResponse_Exception;
@ -141,7 +142,7 @@ class CMSMainTest extends FunctionalTest
} }
// Get the latest version of the redirector page // Get the latest version of the redirector page
$pageID = $this->idFromFixture('SilverStripe\\CMS\\Model\\RedirectorPage', 'page5'); $pageID = $this->idFromFixture(RedirectorPage::class, 'page5');
$latestID = DB::prepared_query('select max("Version") from "RedirectorPage_Versions" where "RecordID" = ?', array($pageID))->value(); $latestID = DB::prepared_query('select max("Version") from "RedirectorPage_Versions" where "RecordID" = ?', array($pageID))->value();
$dsCount = DB::prepared_query('select count("Version") from "RedirectorPage_Versions" where "RecordID" = ? and "Version"= ?', array($pageID, $latestID))->value(); $dsCount = DB::prepared_query('select count("Version") from "RedirectorPage_Versions" where "RecordID" = ? and "Version"= ?', array($pageID, $latestID))->value();
$this->assertEquals(1, $dsCount, "Published page has no duplicate version records: it has " . $dsCount . " for version " . $latestID); $this->assertEquals(1, $dsCount, "Published page has no duplicate version records: it has " . $dsCount . " for version " . $latestID);

View File

@ -16,8 +16,6 @@ class ContentControllerTest extends FunctionalTest
{ {
protected static $fixture_file = 'ContentControllerTest.yml'; protected static $fixture_file = 'ContentControllerTest.yml';
protected static $use_draft_site = true;
protected static $disable_themes = true; protected static $disable_themes = true;
protected static $extra_dataobjects = [ protected static $extra_dataobjects = [
@ -26,13 +24,25 @@ class ContentControllerTest extends FunctionalTest
ContentControllerTestPageWithoutController::class, ContentControllerTestPageWithoutController::class,
]; ];
protected function setUp()
{
parent::setUp();
Config::modify()->set(SiteTree::class, 'nested_urls', true);
// Ensure all pages are published
/** @var Page $page */
foreach (Page::get() as $page) {
$page->publishSingle();
}
}
/** /**
* Test that nested pages, basic actions, and nested/non-nested URL switching works properly * Test that nested pages, basic actions, and nested/non-nested URL switching works properly
*/ */
public function testNestedPages() public function testNestedPages()
{ {
RootURLController::reset();
Config::modify()->set(SiteTree::class, 'nested_urls', true); Config::modify()->set(SiteTree::class, 'nested_urls', true);
$this->assertEquals('Home Page', $this->get('/')->getBody()); $this->assertEquals('Home Page', $this->get('/')->getBody());
@ -70,14 +80,12 @@ class ContentControllerTest extends FunctionalTest
{ {
$controller = new ContentController(); $controller = new ContentController();
Config::modify()->set(SiteTree::class, 'nested_urls', true);
$this->assertEquals(1, $controller->ChildrenOf('/')->Count()); $this->assertEquals(1, $controller->ChildrenOf('/')->Count());
$this->assertEquals(1, $controller->ChildrenOf('/home/')->Count()); $this->assertEquals(1, $controller->ChildrenOf('/home/')->Count());
$this->assertEquals(2, $controller->ChildrenOf('/home/second-level/')->Count()); $this->assertEquals(2, $controller->ChildrenOf('/home/second-level/')->Count());
$this->assertEquals(0, $controller->ChildrenOf('/home/second-level/third-level/')->Count()); $this->assertEquals(0, $controller->ChildrenOf('/home/second-level/third-level/')->Count());
SiteTree::config()->nested_urls = false; SiteTree::config()->set('nested_urls', false);
$this->assertEquals(1, $controller->ChildrenOf('/')->Count()); $this->assertEquals(1, $controller->ChildrenOf('/')->Count());
$this->assertEquals(1, $controller->ChildrenOf('/home/')->Count()); $this->assertEquals(1, $controller->ChildrenOf('/home/')->Count());
@ -87,11 +95,11 @@ class ContentControllerTest extends FunctionalTest
public function testDeepNestedURLs() public function testDeepNestedURLs()
{ {
Config::modify()->set(SiteTree::class, 'nested_urls', true);
$page = new Page(); $page = new Page();
$page->URLSegment = 'base-page'; $page->URLSegment = 'base-page';
$page->write(); $page->write();
$page->publishSingle();
for ($i = 0; $i < 10; $i++) { for ($i = 0; $i < 10; $i++) {
$parentID = $page->ID; $parentID = $page->ID;
@ -101,18 +109,15 @@ class ContentControllerTest extends FunctionalTest
$page->Title = "Page Level $i"; $page->Title = "Page Level $i";
$page->URLSegment = "level-$i"; $page->URLSegment = "level-$i";
$page->write(); $page->write();
$page->publishSingle();
$relativeLink = Director::makeRelative($page->Link()); $relativeLink = Director::makeRelative($page->Link());
$this->assertEquals($page->Title, $this->get($relativeLink)->getBody()); $this->assertEquals($page->Title, $this->get($relativeLink)->getBody());
} }
SiteTree::config()->nested_urls = false;
} }
public function testViewDraft() public function testViewDraft()
{ {
// test when user does not have permission, should get login form // test when user does not have permission, should get login form
$this->logInWithPermission('EDITOR'); $this->logInWithPermission('EDITOR');
try { try {
@ -141,9 +146,11 @@ class ContentControllerTest extends FunctionalTest
$page->write(); $page->write();
$page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
$link = $page->RelativeLink();
$response = $this->get($link);
$this->assertContains( $this->assertContains(
sprintf('<a href="%s">Testlink</a>', $linkedPage->Link()), sprintf('<a href="%s">Testlink</a>', $linkedPage->Link()),
$this->get($page->RelativeLink())->getBody(), $response->getBody(),
'"sitetree_link" shortcodes get parsed properly' '"sitetree_link" shortcodes get parsed properly'
); );
} }

View File

@ -2,6 +2,7 @@
namespace SilverStripe\CMS\Tests\Model; namespace SilverStripe\CMS\Tests\Model;
use Page;
use SilverStripe\CMS\Model\RedirectorPage; use SilverStripe\CMS\Model\RedirectorPage;
use SilverStripe\CMS\Model\RedirectorPageController; use SilverStripe\CMS\Model\RedirectorPageController;
use SilverStripe\Control\Director; use SilverStripe\Control\Director;
@ -10,13 +11,19 @@ use SilverStripe\Dev\FunctionalTest;
class RedirectorPageTest extends FunctionalTest class RedirectorPageTest extends FunctionalTest
{ {
protected static $fixture_file = 'RedirectorPageTest.yml'; protected static $fixture_file = 'RedirectorPageTest.yml';
protected static $use_draft_site = true;
protected $autoFollowRedirection = false; protected $autoFollowRedirection = false;
public function setUp() public function setUp()
{ {
parent::setUp(); parent::setUp();
Director::config()->update('alternate_base_url', 'http://www.mysite.com/'); Director::config()->update('alternate_base_url', 'http://www.mysite.com/');
// Ensure all pages are published
/** @var Page $page */
foreach (Page::get() as $page) {
$page->publishSingle();
}
} }
public function testGoodRedirectors() public function testGoodRedirectors()

View File

@ -2,20 +2,21 @@
namespace SilverStripe\CMS\Tests\Model; namespace SilverStripe\CMS\Tests\Model;
use SilverStripe\CMS\Model\SiteTree; use Page;
use Silverstripe\Assets\Dev\TestAssetStore;
use SilverStripe\Assets\File; use SilverStripe\Assets\File;
use SilverStripe\Assets\Filesystem; use SilverStripe\Assets\Filesystem;
use SilverStripe\Forms\HTMLEditor\HTMLEditorField; use SilverStripe\Assets\Folder;
use SilverStripe\Assets\Image;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Dev\CSSContentParser; use SilverStripe\Dev\CSSContentParser;
use SilverStripe\Dev\FunctionalTest; use SilverStripe\Dev\FunctionalTest;
use Silverstripe\Assets\Dev\TestAssetStore; use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
class SiteTreeHTMLEditorFieldTest extends FunctionalTest class SiteTreeHTMLEditorFieldTest extends FunctionalTest
{ {
protected static $fixture_file = 'SiteTreeHTMLEditorFieldTest.yml'; protected static $fixture_file = 'SiteTreeHTMLEditorFieldTest.yml';
protected static $use_draft_site = true;
public function setUp() public function setUp()
{ {
parent::setUp(); parent::setUp();
@ -23,12 +24,18 @@ class SiteTreeHTMLEditorFieldTest extends FunctionalTest
$this->logInWithPermission('ADMIN'); $this->logInWithPermission('ADMIN');
// Write file contents // Write file contents
$files = File::get()->exclude('ClassName', 'SilverStripe\\Assets\\Folder'); $files = File::get()->exclude('ClassName', Folder::class);
foreach ($files as $file) { foreach ($files as $file) {
$destPath = TestAssetStore::getLocalPath($file); $destPath = TestAssetStore::getLocalPath($file);
Filesystem::makeFolder(dirname($destPath)); Filesystem::makeFolder(dirname($destPath));
file_put_contents($destPath, str_repeat('x', 1000000)); file_put_contents($destPath, str_repeat('x', 1000000));
} }
// Ensure all pages are published
/** @var Page $page */
foreach (Page::get() as $page) {
$page->publishSingle();
}
} }
public function tearDown() public function tearDown()
@ -81,7 +88,7 @@ class SiteTreeHTMLEditorFieldTest extends FunctionalTest
{ {
$sitetree = $this->objFromFixture(SiteTree::class, 'home'); $sitetree = $this->objFromFixture(SiteTree::class, 'home');
$editor = new HTMLEditorField('Content'); $editor = new HTMLEditorField('Content');
$fileID = $this->idFromFixture('SilverStripe\\Assets\\File', 'example_file'); $fileID = $this->idFromFixture(File::class, 'example_file');
$editor->setValue(sprintf( $editor->setValue(sprintf(
'<p><a href="[file_link,id=%d]">Example File</a></p>', '<p><a href="[file_link,id=%d]">Example File</a></p>',
@ -142,7 +149,7 @@ class SiteTreeHTMLEditorFieldTest extends FunctionalTest
{ {
$sitetree = $this->objFromFixture(SiteTree::class, 'home'); $sitetree = $this->objFromFixture(SiteTree::class, 'home');
$editor = new HTMLEditorField('Content'); $editor = new HTMLEditorField('Content');
$file = $this->objFromFixture('SilverStripe\\Assets\\Image', 'example_image'); $file = $this->objFromFixture(Image::class, 'example_image');
$editor->setValue(sprintf('[image src="%s" id="%d"]', $file->getURL(), $file->ID)); $editor->setValue(sprintf('[image src="%s" id="%d"]', $file->getURL(), $file->ID));
$editor->saveInto($sitetree); $editor->saveInto($sitetree);
@ -201,7 +208,7 @@ class SiteTreeHTMLEditorFieldTest extends FunctionalTest
$editor->setValue(sprintf( $editor->setValue(sprintf(
'<p><a href="[file_link,id=%d]">Working Link</a></p>', '<p><a href="[file_link,id=%d]">Working Link</a></p>',
$this->idFromFixture('SilverStripe\\Assets\\File', 'example_file') $this->idFromFixture(File::class, 'example_file')
)); ));
$sitetree->HasBrokenFile = false; $sitetree->HasBrokenFile = false;
$editor->saveInto($sitetree); $editor->saveInto($sitetree);

View File

@ -2,6 +2,7 @@
namespace SilverStripe\CMS\Tests\Model; namespace SilverStripe\CMS\Tests\Model;
use Page;
use SilverStripe\CMS\Model\SiteTree; use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Control\HTTPResponse_Exception; use SilverStripe\Control\HTTPResponse_Exception;
use SilverStripe\Dev\FunctionalTest; use SilverStripe\Dev\FunctionalTest;
@ -27,20 +28,25 @@ class SiteTreePermissionsTest extends FunctionalTest
{ {
parent::setUp(); parent::setUp();
$this->useDraftSite();
// we're testing HTTP status codes before being redirected to login forms // we're testing HTTP status codes before being redirected to login forms
$this->autoFollowRedirection = false; $this->autoFollowRedirection = false;
// Ensure all pages are published
/** @var Page $page */
foreach (Page::get() as $page) {
if ($page->URLSegment !== 'draft-only') {
$page->publishSingle();
}
}
} }
public function testAccessingStageWithBlankStage() public function testAccessingStageWithBlankStage()
{ {
$this->useDraftSite(false);
$this->autoFollowRedirection = false; $this->autoFollowRedirection = false;
/** @var Page $draftOnlyPage */ /** @var Page $draftOnlyPage */
$draftOnlyPage = $this->objFromFixture('Page', 'draftOnlyPage'); $draftOnlyPage = $this->objFromFixture(Page::class, 'draftOnlyPage');
$this->logOut(); $this->logOut();
$response = $this->get($draftOnlyPage->URLSegment . '?stage=Live'); $response = $this->get($draftOnlyPage->URLSegment . '?stage=Live');
@ -69,7 +75,7 @@ class SiteTreePermissionsTest extends FunctionalTest
$response = $this->get($draftOnlyPage->URLSegment . '?stage=Stage'); $response = $this->get($draftOnlyPage->URLSegment . '?stage=Stage');
$this->assertEquals('200', $response->getStatusCode()); $this->assertEquals('200', $response->getStatusCode());
// Stage is remembered from last request $draftOnlyPage->publishSingle();
$response = $this->get($draftOnlyPage->URLSegment); $response = $this->get($draftOnlyPage->URLSegment);
$this->assertEquals('200', $response->getStatusCode()); $this->assertEquals('200', $response->getStatusCode());
} }
@ -78,7 +84,7 @@ class SiteTreePermissionsTest extends FunctionalTest
{ {
// Set up fixture - a published page deleted from draft // Set up fixture - a published page deleted from draft
$this->logInWithPermission("ADMIN"); $this->logInWithPermission("ADMIN");
$page = $this->objFromFixture('Page', 'restrictedEditOnlySubadminGroup'); $page = $this->objFromFixture(Page::class, 'restrictedEditOnlySubadminGroup');
$pageID = $page->ID; $pageID = $page->ID;
$this->assertTrue($page->publishRecursive()); $this->assertTrue($page->publishRecursive());
$page->delete(); $page->delete();
@ -105,7 +111,7 @@ class SiteTreePermissionsTest extends FunctionalTest
{ {
// Set up fixture - an unpublished page // Set up fixture - an unpublished page
$this->logInWithPermission("ADMIN"); $this->logInWithPermission("ADMIN");
$page = $this->objFromFixture('Page', 'restrictedEditOnlySubadminGroup'); $page = $this->objFromFixture(Page::class, 'restrictedEditOnlySubadminGroup');
$pageID = $page->ID; $pageID = $page->ID;
$page->doUnpublish(); $page->doUnpublish();
@ -128,7 +134,7 @@ class SiteTreePermissionsTest extends FunctionalTest
{ {
// Find a page that exists and delete it from both stage and published // Find a page that exists and delete it from both stage and published
$this->logInWithPermission("ADMIN"); $this->logInWithPermission("ADMIN");
$page = $this->objFromFixture('Page', 'restrictedEditOnlySubadminGroup'); $page = $this->objFromFixture(Page::class, 'restrictedEditOnlySubadminGroup');
$pageID = $page->ID; $pageID = $page->ID;
$page->doUnpublish(); $page->doUnpublish();
$page->delete(); $page->delete();
@ -145,11 +151,10 @@ class SiteTreePermissionsTest extends FunctionalTest
public function testCanViewStage() public function testCanViewStage()
{ {
$this->useDraftSite(false); // useDraftSite deliberately disables checking the stage as part of canView
// Get page & make sure it exists on Live // Get page & make sure it exists on Live
$page = $this->objFromFixture('Page', 'standardpage'); /** @var Page $page */
$page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $page = $this->objFromFixture(Page::class, 'standardpage');
$page->publishSingle();
// Then make sure there's a new version on Stage // Then make sure there's a new version on Stage
$page->Title = 1; $page->Title = 1;
@ -163,13 +168,11 @@ class SiteTreePermissionsTest extends FunctionalTest
$this->assertTrue($page->canViewStage('Live', $editor)); $this->assertTrue($page->canViewStage('Live', $editor));
$this->assertTrue($page->canViewStage('Stage', $editor)); $this->assertTrue($page->canViewStage('Stage', $editor));
$this->useDraftSite();
} }
public function testAccessTabOnlyDisplaysWithGrantAccessPermissions() public function testAccessTabOnlyDisplaysWithGrantAccessPermissions()
{ {
$page = $this->objFromFixture('Page', 'standardpage'); $page = $this->objFromFixture(Page::class, 'standardpage');
$subadminuser = $this->objFromFixture(Member::class, 'subadmin'); $subadminuser = $this->objFromFixture(Member::class, 'subadmin');
Security::setCurrentUser($subadminuser); Security::setCurrentUser($subadminuser);
@ -200,7 +203,7 @@ class SiteTreePermissionsTest extends FunctionalTest
public function testRestrictedViewLoggedInUsers() public function testRestrictedViewLoggedInUsers()
{ {
$page = $this->objFromFixture('Page', 'restrictedViewLoggedInUsers'); $page = $this->objFromFixture(Page::class, 'restrictedViewLoggedInUsers');
// unauthenticated users // unauthenticated users
$this->assertFalse( $this->assertFalse(
@ -233,7 +236,7 @@ class SiteTreePermissionsTest extends FunctionalTest
public function testRestrictedViewOnlyTheseUsers() public function testRestrictedViewOnlyTheseUsers()
{ {
$page = $this->objFromFixture('Page', 'restrictedViewOnlyWebsiteUsers'); $page = $this->objFromFixture(Page::class, 'restrictedViewOnlyWebsiteUsers');
// unauthenticcated users // unauthenticcated users
$this->assertFalse( $this->assertFalse(
@ -281,7 +284,7 @@ class SiteTreePermissionsTest extends FunctionalTest
public function testRestrictedEditLoggedInUsers() public function testRestrictedEditLoggedInUsers()
{ {
$page = $this->objFromFixture('Page', 'restrictedEditLoggedInUsers'); $page = $this->objFromFixture(Page::class, 'restrictedEditLoggedInUsers');
// unauthenticcated users // unauthenticcated users
$this->assertFalse( $this->assertFalse(
@ -307,7 +310,7 @@ class SiteTreePermissionsTest extends FunctionalTest
public function testRestrictedEditOnlySubadminGroup() public function testRestrictedEditOnlySubadminGroup()
{ {
$page = $this->objFromFixture('Page', 'restrictedEditOnlySubadminGroup'); $page = $this->objFromFixture(Page::class, 'restrictedEditOnlySubadminGroup');
// unauthenticated users // unauthenticated users
$this->assertFalse( $this->assertFalse(
@ -332,8 +335,8 @@ class SiteTreePermissionsTest extends FunctionalTest
public function testRestrictedViewInheritance() public function testRestrictedViewInheritance()
{ {
$parentPage = $this->objFromFixture('Page', 'parent_restrictedViewOnlySubadminGroup'); $parentPage = $this->objFromFixture(Page::class, 'parent_restrictedViewOnlySubadminGroup');
$childPage = $this->objFromFixture('Page', 'child_restrictedViewOnlySubadminGroup'); $childPage = $this->objFromFixture(Page::class, 'child_restrictedViewOnlySubadminGroup');
// unauthenticated users // unauthenticated users
$this->assertFalse( $this->assertFalse(
@ -366,8 +369,8 @@ class SiteTreePermissionsTest extends FunctionalTest
public function testRestrictedEditInheritance() public function testRestrictedEditInheritance()
{ {
$parentPage = $this->objFromFixture('Page', 'parent_restrictedEditOnlySubadminGroup'); $parentPage = $this->objFromFixture(Page::class, 'parent_restrictedEditOnlySubadminGroup');
$childPage = $this->objFromFixture('Page', 'child_restrictedEditOnlySubadminGroup'); $childPage = $this->objFromFixture(Page::class, 'child_restrictedEditOnlySubadminGroup');
// unauthenticated users // unauthenticated users
$this->assertFalse( $this->assertFalse(
@ -385,8 +388,8 @@ class SiteTreePermissionsTest extends FunctionalTest
public function testDeleteRestrictedChild() public function testDeleteRestrictedChild()
{ {
$parentPage = $this->objFromFixture('Page', 'deleteTestParentPage'); $parentPage = $this->objFromFixture(Page::class, 'deleteTestParentPage');
$childPage = $this->objFromFixture('Page', 'deleteTestChildPage'); $childPage = $this->objFromFixture(Page::class, 'deleteTestChildPage');
// unauthenticated users // unauthenticated users
$this->assertFalse( $this->assertFalse(
@ -401,7 +404,7 @@ class SiteTreePermissionsTest extends FunctionalTest
public function testRestrictedEditLoggedInUsersDeletedFromStage() public function testRestrictedEditLoggedInUsersDeletedFromStage()
{ {
$page = $this->objFromFixture('Page', 'restrictedEditLoggedInUsers'); $page = $this->objFromFixture(Page::class, 'restrictedEditLoggedInUsers');
$pageID = $page->ID; $pageID = $page->ID;
$this->logInWithPermission("ADMIN"); $this->logInWithPermission("ADMIN");
@ -423,7 +426,7 @@ class SiteTreePermissionsTest extends FunctionalTest
public function testInheritCanViewFromSiteConfig() public function testInheritCanViewFromSiteConfig()
{ {
$page = $this->objFromFixture('Page', 'inheritWithNoParent'); $page = $this->objFromFixture(Page::class, 'inheritWithNoParent');
$siteconfig = $this->objFromFixture(SiteConfig::class, 'default'); $siteconfig = $this->objFromFixture(SiteConfig::class, 'default');
$editor = $this->objFromFixture(Member::class, 'editor'); $editor = $this->objFromFixture(Member::class, 'editor');
$editorGroup = $this->objFromFixture(Group::class, 'editorgroup'); $editorGroup = $this->objFromFixture(Group::class, 'editorgroup');
@ -449,7 +452,7 @@ class SiteTreePermissionsTest extends FunctionalTest
public function testInheritCanEditFromSiteConfig() public function testInheritCanEditFromSiteConfig()
{ {
$page = $this->objFromFixture('Page', 'inheritWithNoParent'); $page = $this->objFromFixture(Page::class, 'inheritWithNoParent');
$siteconfig = $this->objFromFixture(SiteConfig::class, 'default'); $siteconfig = $this->objFromFixture(SiteConfig::class, 'default');
$editor = $this->objFromFixture(Member::class, 'editor'); $editor = $this->objFromFixture(Member::class, 'editor');
$user = $this->objFromFixture(Member::class, 'websiteuser'); $user = $this->objFromFixture(Member::class, 'websiteuser');

View File

@ -612,12 +612,8 @@ class SiteTreeTest extends SapphireTest
Versioned::reading_archived_date($date); Versioned::reading_archived_date($date);
SiteTree::get()->where(array( SiteTree::get()->where(array(
'"SiteTree"."ParentID"' => 0 '"SiteTree"."ParentID"' => 0
)); ))->sql($args);
Versioned::reading_archived_date(null); $this->assertContains($date, $args);
$this->assertEquals(
Versioned::get_reading_mode(),
'Archive.'
);
} }
public function testEditPermissions() public function testEditPermissions()

View File

@ -17,7 +17,7 @@ use SilverStripe\Versioned\Versioned;
class VirtualPageTest extends FunctionalTest class VirtualPageTest extends FunctionalTest
{ {
protected static $fixture_file = 'VirtualPageTest.yml'; protected static $fixture_file = 'VirtualPageTest.yml';
protected static $use_draft_site = false;
protected $autoFollowRedirection = false; protected $autoFollowRedirection = false;
protected static $extra_dataobjects = [ protected static $extra_dataobjects = [
@ -58,6 +58,12 @@ class VirtualPageTest extends FunctionalTest
'non_virtual_fields', 'non_virtual_fields',
array('MyNonVirtualField', 'MySharedNonVirtualField') array('MyNonVirtualField', 'MySharedNonVirtualField')
); );
// Ensure all pages are published
/** @var Page $page */
foreach (Page::get() as $page) {
$page->publishSingle();
}
} }
/** /**
@ -66,11 +72,13 @@ class VirtualPageTest extends FunctionalTest
*/ */
public function testEditingSourcePageUpdatesVirtualPages() public function testEditingSourcePageUpdatesVirtualPages()
{ {
/** @var Page $master */
$master = $this->objFromFixture('Page', 'master'); $master = $this->objFromFixture('Page', 'master');
$master->Title = "New title"; $master->Title = "New title";
$master->MenuTitle = "New menutitle"; $master->MenuTitle = "New menutitle";
$master->Content = "<p>New content</p>"; $master->Content = "<p>New content</p>";
$master->write(); $master->write();
$master->publishSingle();
$vp1 = $this->objFromFixture(VirtualPage::class, 'vp1'); $vp1 = $this->objFromFixture(VirtualPage::class, 'vp1');
$vp2 = $this->objFromFixture(VirtualPage::class, 'vp2'); $vp2 = $this->objFromFixture(VirtualPage::class, 'vp2');
@ -619,16 +627,19 @@ class VirtualPageTest extends FunctionalTest
public function testVirtualPageRendersCorrectTemplate() public function testVirtualPageRendersCorrectTemplate()
{ {
$this->useDraftSite(true);
$this->useTestTheme(dirname(__FILE__), 'virtualpagetest', function () { $this->useTestTheme(dirname(__FILE__), 'virtualpagetest', function () {
$page = new VirtualPageTest_ClassA(); $page = new VirtualPageTest_ClassA();
$page->Title = 'Test Page'; $page->Title = 'Test Page';
$page->Content = 'NotThisContent'; $page->Content = 'NotThisContent';
$page->MyInitiallyCopiedField = 'TestContent'; $page->MyInitiallyCopiedField = 'TestContent';
$page->write(); $page->write();
$page->publishSingle();
$vp = new VirtualPage(); $vp = new VirtualPage();
$vp->CopyContentFromID = $page->ID; $vp->CopyContentFromID = $page->ID;
$vp->write(); $vp->write();
$vp->publishSingle();
$response = $this->get($vp->Link()); $response = $this->get($vp->Link());
$this->assertEquals(200, $response->getStatusCode()); $this->assertEquals(200, $response->getStatusCode());
$this->assertContains('TestContent', $response->getBody()); $this->assertContains('TestContent', $response->getBody());
@ -639,9 +650,13 @@ class VirtualPageTest extends FunctionalTest
$page = new VirtualPageTest_ClassB(); $page = new VirtualPageTest_ClassB();
$page->Title = 'Test Page B'; $page->Title = 'Test Page B';
$page->write(); $page->write();
$page->publishSingle();
$vp = new VirtualPage(); $vp = new VirtualPage();
$vp->CopyContentFromID = $page->ID; $vp->CopyContentFromID = $page->ID;
$vp->write(); $vp->write();
$vp->publishSingle();
$response = $this->get($vp->Link()); $response = $this->get($vp->Link());
$this->assertEquals(200, $response->getStatusCode()); $this->assertEquals(200, $response->getStatusCode());
$this->assertContains('Test Page B', $response->getBody()); $this->assertContains('Test Page B', $response->getBody());

View File

@ -2,6 +2,7 @@
namespace SilverStripe\CMS\Tests\Search; namespace SilverStripe\CMS\Tests\Search;
use SilverStripe\CMS\Controllers\CMSSiteTreeFilter_Search;
use SilverStripe\Dev\FunctionalTest; use SilverStripe\Dev\FunctionalTest;
use SilverStripe\Security\Member; use SilverStripe\Security\Member;
@ -13,12 +14,12 @@ class CMSMainSearchFormTest extends FunctionalTest
{ {
$this->session()->set('loggedInAs', $this->idFromFixture(Member::class, 'admin')); $this->session()->set('loggedInAs', $this->idFromFixture(Member::class, 'admin'));
$response = $this->get( $this->get(
'admin/pages/SearchForm/?' . 'admin/pages/SearchForm/?' .
http_build_query(array( http_build_query(array(
'q' => array( 'q' => array(
'Title' => 'Page 10', 'Title' => 'Page 10',
'FilterClass' => 'SilverStripe\\CMS\\Controllers\\CMSSiteTreeFilter_Search', 'FilterClass' => CMSSiteTreeFilter_Search::class,
), ),
'action_doSearch' => true 'action_doSearch' => true
)) ))

View File

@ -2,6 +2,7 @@
namespace SilverStripe\CMS\Tests\Tasks; namespace SilverStripe\CMS\Tests\Tasks;
use SilverStripe\CMS\Tasks\RemoveOrphanedPagesTask;
use SilverStripe\Versioned\Versioned; use SilverStripe\Versioned\Versioned;
use SilverStripe\Dev\FunctionalTest; use SilverStripe\Dev\FunctionalTest;
@ -37,20 +38,18 @@ class RemoveOrphanedPagesTaskTest extends FunctionalTest
{ {
protected static $fixture_file = 'RemoveOrphanedPagesTaskTest.yml'; protected static $fixture_file = 'RemoveOrphanedPagesTaskTest.yml';
protected static $use_draft_site = false;
public function setUp() public function setUp()
{ {
parent::setUp(); parent::setUp();
$parent1_published = $this->objFromFixture('Page', 'parent1_published'); $parent1_published = $this->objFromFixture('Page', 'parent1_published');
$parent1_published->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $parent1_published->publishSingle();
$child1_1_published = $this->objFromFixture('Page', 'child1_1_published'); $child1_1_published = $this->objFromFixture('Page', 'child1_1_published');
$child1_1_published->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $child1_1_published->publishSingle();
$child1_2_published = $this->objFromFixture('Page', 'child1_2_published'); $child1_2_published = $this->objFromFixture('Page', 'child1_2_published');
$child1_2_published->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $child1_2_published->publishSingle();
$child1_3_orphaned = $this->objFromFixture('Page', 'child1_3_orphaned'); $child1_3_orphaned = $this->objFromFixture('Page', 'child1_3_orphaned');
$child1_3_orphaned->ParentID = 9999; $child1_3_orphaned->ParentID = 9999;
@ -59,10 +58,10 @@ class RemoveOrphanedPagesTaskTest extends FunctionalTest
$child1_4_orphaned_published = $this->objFromFixture('Page', 'child1_4_orphaned_published'); $child1_4_orphaned_published = $this->objFromFixture('Page', 'child1_4_orphaned_published');
$child1_4_orphaned_published->ParentID = 9999; $child1_4_orphaned_published->ParentID = 9999;
$child1_4_orphaned_published->write(); $child1_4_orphaned_published->write();
$child1_4_orphaned_published->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $child1_4_orphaned_published->publishSingle();
$grandchild1_1_2_published = $this->objFromFixture('Page', 'grandchild1_1_2_published'); $grandchild1_1_2_published = $this->objFromFixture('Page', 'grandchild1_1_2_published');
$grandchild1_1_2_published->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $grandchild1_1_2_published->publishSingle();
$grandchild1_1_3_orphaned = $this->objFromFixture('Page', 'grandchild1_1_3_orphaned'); $grandchild1_1_3_orphaned = $this->objFromFixture('Page', 'grandchild1_1_3_orphaned');
$grandchild1_1_3_orphaned->ParentID = 9999; $grandchild1_1_3_orphaned->ParentID = 9999;
@ -74,10 +73,10 @@ class RemoveOrphanedPagesTaskTest extends FunctionalTest
); );
$grandchild1_1_4_orphaned_published->ParentID = 9999; $grandchild1_1_4_orphaned_published->ParentID = 9999;
$grandchild1_1_4_orphaned_published->write(); $grandchild1_1_4_orphaned_published->write();
$grandchild1_1_4_orphaned_published->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $grandchild1_1_4_orphaned_published->publishSingle();
$child2_1_published_orphaned = $this->objFromFixture('Page', 'child2_1_published_orphaned'); $child2_1_published_orphaned = $this->objFromFixture('Page', 'child2_1_published_orphaned');
$child2_1_published_orphaned->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $child2_1_published_orphaned->publishSingle();
} }
public function testGetOrphansByStage() public function testGetOrphansByStage()
@ -92,7 +91,7 @@ class RemoveOrphanedPagesTaskTest extends FunctionalTest
); );
$child2_1_published_orphaned = $this->objFromFixture('Page', 'child2_1_published_orphaned'); $child2_1_published_orphaned = $this->objFromFixture('Page', 'child2_1_published_orphaned');
$task = singleton('SilverStripe\\CMS\\Tasks\\RemoveOrphanedPagesTask'); $task = singleton(RemoveOrphanedPagesTask::class);
$orphans = $task->getOrphanedPages(); $orphans = $task->getOrphanedPages();
$orphanIDs = $orphans->column('ID'); $orphanIDs = $orphans->column('ID');
sort($orphanIDs); sort($orphanIDs);