diff --git a/code/Controllers/CMSPageAddController.php b/code/Controllers/CMSPageAddController.php index 78c55ce5..cb4b576c 100644 --- a/code/Controllers/CMSPageAddController.php +++ b/code/Controllers/CMSPageAddController.php @@ -206,6 +206,7 @@ class CMSPageAddController extends CMSPageEditController $record->write(); $editController = CMSPageEditController::singleton(); + $editController->setRequest($this->getRequest()); $editController->setCurrentPageID($record->ID); $session = $this->getRequest()->getSession(); diff --git a/code/Model/ErrorPage.php b/code/Model/ErrorPage.php index 856a719b..47457f7e 100644 --- a/code/Model/ErrorPage.php +++ b/code/Model/ErrorPage.php @@ -6,6 +6,7 @@ use Page; use SilverStripe\Assets\File; use SilverStripe\Assets\Storage\GeneratedAssetHandler; use SilverStripe\CMS\Controllers\ModelAsController; +use SilverStripe\Control\Controller; use SilverStripe\Control\Director; use SilverStripe\Control\HTTPRequest; use SilverStripe\Control\HTTPResponse; @@ -96,8 +97,10 @@ class ErrorPage extends Page Requirements::clear(); Requirements::clear_combined_files(); + $request = new HTTPRequest('GET', ''); + $request->setSession(Controller::curr()->getRequest()->getSession()); return ModelAsController::controller_for($errorPage) - ->handleRequest(new HTTPRequest('GET', '')); + ->handleRequest($request); } // then fall back on a cached version diff --git a/code/Model/RedirectorPage.php b/code/Model/RedirectorPage.php index e0da1b67..01c86485 100644 --- a/code/Model/RedirectorPage.php +++ b/code/Model/RedirectorPage.php @@ -2,12 +2,13 @@ namespace SilverStripe\CMS\Model; +use Page; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\HeaderField; use SilverStripe\Forms\OptionsetField; use SilverStripe\Forms\TextField; use SilverStripe\Forms\TreeDropdownField; -use Page; +use SilverStripe\Versioned\Versioned; /** * A redirector page redirects when the page is visited. @@ -120,7 +121,9 @@ class RedirectorPage extends Page { if ($this->RedirectionType == 'Internal') { if ($this->LinkToID) { - $this->HasBrokenLink = SiteTree::get()->byID($this->LinkToID) ? false : true; + $this->HasBrokenLink = Versioned::get_by_stage(SiteTree::class, Versioned::DRAFT) + ->filter('ID', $this->LinkToID) + ->count() === 0; } else { // An incomplete redirector page definitely has a broken link $this->HasBrokenLink = true; diff --git a/code/Model/SiteTree.php b/code/Model/SiteTree.php index c1c5a70a..f319c3d8 100755 --- a/code/Model/SiteTree.php +++ b/code/Model/SiteTree.php @@ -4,8 +4,6 @@ namespace SilverStripe\CMS\Model; use Page; use SilverStripe\CampaignAdmin\AddToCampaignHandler_FormAction; -use SilverStripe\Core\Injector\Injector; -use SilverStripe\ORM\CMSPreviewable; use SilverStripe\CMS\Controllers\CMSPageEditController; use SilverStripe\CMS\Controllers\ContentController; use SilverStripe\CMS\Controllers\ModelAsController; @@ -18,6 +16,7 @@ use SilverStripe\Control\RequestHandler; use SilverStripe\Core\ClassInfo; use SilverStripe\Core\Config\Config; use SilverStripe\Core\Convert; +use SilverStripe\Core\Injector\Injector; use SilverStripe\Core\Resettable; use SilverStripe\Dev\Deprecation; use SilverStripe\Forms\CheckboxField; @@ -41,6 +40,7 @@ use SilverStripe\Forms\TreeDropdownField; use SilverStripe\i18n\i18n; use SilverStripe\i18n\i18nEntityProvider; use SilverStripe\ORM\ArrayList; +use SilverStripe\ORM\CMSPreviewable; use SilverStripe\ORM\DataList; use SilverStripe\ORM\DataObject; use SilverStripe\ORM\DB; @@ -48,16 +48,16 @@ use SilverStripe\ORM\HiddenClass; use SilverStripe\ORM\Hierarchy\Hierarchy; use SilverStripe\ORM\ManyManyList; use SilverStripe\ORM\ValidationResult; +use SilverStripe\Security\Group; use SilverStripe\Security\InheritedPermissions; use SilverStripe\Security\InheritedPermissionsExtension; -use SilverStripe\Security\PermissionChecker; -use SilverStripe\Security\Security; -use SilverStripe\Versioned\Versioned; -use SilverStripe\Security\Group; use SilverStripe\Security\Member; use SilverStripe\Security\Permission; +use SilverStripe\Security\PermissionChecker; use SilverStripe\Security\PermissionProvider; +use SilverStripe\Security\Security; use SilverStripe\SiteConfig\SiteConfig; +use SilverStripe\Versioned\Versioned; use SilverStripe\View\ArrayData; use SilverStripe\View\HTML; use SilverStripe\View\Parsers\ShortcodeParser; @@ -1472,18 +1472,7 @@ class SiteTree extends DataObject implements PermissionProvider, i18nEntityProvi public function onAfterDelete() { - // Need to flush cache to avoid outdated versionnumber references - $this->flushCache(); - - // Need to mark pages depending to this one as broken - $dependentPages = $this->DependentPages(); - if ($dependentPages) { - foreach ($dependentPages as $page) { - // $page->write() calls syncLinkTracking, which does all the hard work for us. - $page->write(); - } - } - + $this->updateDependentPages(); parent::onAfterDelete(); } @@ -2336,14 +2325,11 @@ class SiteTree extends DataObject implements PermissionProvider, i18nEntityProvi /** @var SiteTree $result */ $result = DataObject::get_by_id(self::class, $this->ID); - // Need to update pages linking to this one as no longer broken - foreach ($result->DependentPages(false) as $page) { - // $page->write() calls syncLinkTracking, which does all the hard work for us. - $page->write(); - } - Versioned::set_reading_mode($oldReadingMode); + // Need to update pages linking to this one as no longer broken + $this->updateDependentPages(); + $this->invokeWithExtensions('onAfterRestoreToStage', $this); return $result; @@ -2865,4 +2851,22 @@ class SiteTree extends DataObject implements PermissionProvider, i18nEntityProvi $permissions->clearCache(); } } + + /** + * Update dependant pages + */ + protected function updateDependentPages() + { + // Need to flush cache to avoid outdated versionnumber references + $this->flushCache(); + + // Need to mark pages depending to this one as broken + $dependentPages = $this->DependentPages(); + if ($dependentPages) { + foreach ($dependentPages as $page) { + // $page->write() calls syncLinkTracking, which does all the hard work for us. + $page->write(); + } + } + } } diff --git a/code/Model/SiteTreeLinkTracking.php b/code/Model/SiteTreeLinkTracking.php index 2e5d987f..9a1f2464 100644 --- a/code/Model/SiteTreeLinkTracking.php +++ b/code/Model/SiteTreeLinkTracking.php @@ -2,13 +2,13 @@ namespace SilverStripe\CMS\Model; +use DOMElement; use SilverStripe\Assets\File; use SilverStripe\ORM\DataExtension; use SilverStripe\ORM\DataObject; use SilverStripe\ORM\FieldType\DBHTMLText; use SilverStripe\ORM\ManyManyList; use SilverStripe\Versioned\Versioned; -use DOMElement; use SilverStripe\View\Parsers\HTMLValue; /** diff --git a/code/Model/VirtualPage.php b/code/Model/VirtualPage.php index d4d4ace3..fc47d929 100644 --- a/code/Model/VirtualPage.php +++ b/code/Model/VirtualPage.php @@ -159,8 +159,9 @@ class VirtualPage extends Page public function syncLinkTracking() { if ($this->CopyContentFromID) { - $copyPage = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $this->CopyContentFromID); - $this->HasBrokenLink = !$copyPage; + $this->HasBrokenLink = Versioned::get_by_stage(SiteTree::class, Versioned::DRAFT) + ->filter('ID', $this->CopyContentFromID) + ->count() === 0; } else { $this->HasBrokenLink = true; } diff --git a/code/Search/ContentControllerSearchExtension.php b/code/Search/ContentControllerSearchExtension.php index cd68577b..8d3c6caf 100644 --- a/code/Search/ContentControllerSearchExtension.php +++ b/code/Search/ContentControllerSearchExtension.php @@ -22,6 +22,8 @@ class ContentControllerSearchExtension extends Extension /** * Site search form + * + * @return SearchForm */ public function SearchForm() { diff --git a/tests/bootstrap.php b/tests/bootstrap.php index bbb7671a..538cda60 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -5,5 +5,3 @@ require FRAMEWORK_PATH . '/tests/bootstrap/init.php'; require FRAMEWORK_PATH . '/tests/bootstrap/cli.php'; require FRAMEWORK_PATH . '/tests/bootstrap/environment.php'; require __DIR__ . '/bootstrap/mysite.php'; -require FRAMEWORK_PATH . '/tests/bootstrap/mysite.php'; -require FRAMEWORK_PATH . '/tests/bootstrap/phpunit.php'; diff --git a/tests/controller/CMSMainTest.php b/tests/controller/CMSMainTest.php index bc145ba8..b440ef4c 100644 --- a/tests/controller/CMSMainTest.php +++ b/tests/controller/CMSMainTest.php @@ -1,25 +1,26 @@ markTestIncomplete(); - - // $classes = ClassInfo::subclassesFor("SiteTree"); - // array_shift($classes); - - // foreach($classes as $class) { - // $page = new $class(); - // if($class instanceof TestOnly) continue; - - // $page->Title = "Test $class page"; - - // $page->write(); - // $this->assertEquals("Test $class page", DB::query("SELECT \"Title\" FROM \"SiteTree\" WHERE \"ID\" = $page->ID")->value()); - - // $page->publishRecursive(); - // $this->assertEquals("Test $class page", DB::query("SELECT \"Title\" FROM \"SiteTree_Live\" WHERE \"ID\" = $page->ID")->value()); - - // // Check that you can visit the page - // $this->get($page->URLSegment); - // } - } - /** * Test that getCMSFields works on each page type. * Mostly, this is just checking that the method doesn't return an error @@ -275,6 +249,7 @@ class CMSMainTest extends FunctionalTest $page1->delete(); $cmsMain = new CMSMain(); + $cmsMain->setRequest(Controller::curr()->getRequest()); // Bad calls $this->assertNull($cmsMain->getRecord('0')); @@ -450,6 +425,7 @@ class CMSMainTest extends FunctionalTest public function testGetNewItem() { $controller = new CMSMain(); + $controller->setRequest(Controller::curr()->getRequest()); $id = 'new-Page-0'; // Test success @@ -475,6 +451,7 @@ class CMSMainTest extends FunctionalTest public function testGetList() { $controller = new CMSMain(); + $controller->setRequest(Controller::curr()->getRequest()); // Test all pages (stage) $pages = $controller->getList()->sort('Title'); @@ -567,6 +544,7 @@ class CMSMainTest extends FunctionalTest // Get a associated with a fixture page. $page = $this->objFromFixture(Page::class, 'page1'); $controller = new CMSMain(); + $controller->setRequest(Controller::curr()->getRequest()); $form = $controller->getEditForm($page->ID); $this->assertInstanceOf("SilverStripe\\Forms\\Form", $form); @@ -583,6 +561,7 @@ class CMSMainTest extends FunctionalTest { $this->logInWithPermission('ADMIN'); $cms = new CMSMain(); + $cms->setRequest(Controller::curr()->getRequest()); $page = new CMSMainTest_ClassA(); $page->Title = 'Class A'; $page->write(); @@ -602,40 +581,3 @@ class CMSMainTest extends FunctionalTest $this->assertEquals('Class A', $newPage->Title); } } - -class CMSMainTest_ClassA extends Page implements TestOnly -{ - private static $allowed_children = array('CMSMainTest_ClassB'); - - protected function onBeforeWrite() - { - parent::onBeforeWrite(); - - if ($this->ClassName !== self::class) { - throw new ValidationException("Class saved with incorrect ClassName"); - } - } -} - -class CMSMainTest_ClassB extends Page implements TestOnly -{ - - protected function onBeforeWrite() - { - parent::onBeforeWrite(); - - if ($this->ClassName !== self::class) { - throw new ValidationException("Class saved with incorrect ClassName"); - } - } -} - -class CMSMainTest_NotRoot extends Page implements TestOnly -{ - private static $can_be_root = false; -} - -class CMSMainTest_HiddenClass extends Page implements TestOnly, HiddenClass -{ - -} diff --git a/tests/controller/CMSMainTest_ClassA.php b/tests/controller/CMSMainTest_ClassA.php new file mode 100644 index 00000000..afbdb743 --- /dev/null +++ b/tests/controller/CMSMainTest_ClassA.php @@ -0,0 +1,18 @@ +ClassName !== self::class) { + throw new ValidationException("Class saved with incorrect ClassName"); + } + } +} diff --git a/tests/controller/CMSMainTest_ClassB.php b/tests/controller/CMSMainTest_ClassB.php new file mode 100644 index 00000000..9bd88aa4 --- /dev/null +++ b/tests/controller/CMSMainTest_ClassB.php @@ -0,0 +1,16 @@ +ClassName !== self::class) { + throw new ValidationException("Class saved with incorrect ClassName"); + } + } +} diff --git a/tests/controller/CMSMainTest_HiddenClass.php b/tests/controller/CMSMainTest_HiddenClass.php new file mode 100644 index 00000000..4e21c759 --- /dev/null +++ b/tests/controller/CMSMainTest_HiddenClass.php @@ -0,0 +1,9 @@ +setRequest(Controller::curr()->getRequest()); // should get the latest version which we cannot rollback to $form = $controller->getEditForm($this->page->ID); @@ -98,7 +100,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest */ public function testVersionsForm() { - $history = $this->get('admin/pages/history/show/'. $this->page->ID); + $this->get('admin/pages/history/show/'. $this->page->ID); $form = $this->cssParser()->getBySelector('#Form_VersionsForm'); $this->assertEquals(1, count($form)); @@ -116,7 +118,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest public function testVersionsFormTableContainsInformation() { - $history = $this->get('admin/pages/history/show/'. $this->page->ID); + $this->get('admin/pages/history/show/'. $this->page->ID); $form = $this->cssParser()->getBySelector('#Form_VersionsForm'); $rows = $form[0]->xpath("fieldset/table/tbody/tr"); @@ -142,7 +144,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest public function testVersionsFormSelectsUnpublishedCheckbox() { - $history = $this->get('admin/pages/history/show/'. $this->page->ID); + $this->get('admin/pages/history/show/'. $this->page->ID); $checkbox = $this->cssParser()->getBySelector('#Form_VersionsForm_ShowUnpublished'); $this->assertThat($checkbox[0], $this->logicalNot($this->isNull())); @@ -151,7 +153,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest $this->assertThat($checked, $this->logicalNot($this->stringContains('checked'))); // viewing an unpublished - $history = $this->get('admin/pages/history/show/'.$this->page->ID .'/'.$this->versionUnpublishedCheck); + $this->get('admin/pages/history/show/'.$this->page->ID .'/'.$this->versionUnpublishedCheck); $checkbox = $this->cssParser()->getBySelector('#Form_VersionsForm_ShowUnpublished'); $this->assertThat($checkbox[0], $this->logicalNot($this->isNull())); @@ -161,7 +163,8 @@ class CMSPageHistoryControllerTest extends FunctionalTest public function testTransformReadonly() { /** @var CMSPageHistoryController $history */ - $history = singleton(CMSPageHistoryController::class); + $history = new CMSPageHistoryController(); + $history->setRequest(Controller::curr()->getRequest()); $fieldList = FieldList::create([ FieldGroup::create('group', [ diff --git a/tests/controller/ContentControllerSearchExtensionTest.php b/tests/controller/ContentControllerSearchExtensionTest.php index feee8c76..568f6e3f 100644 --- a/tests/controller/ContentControllerSearchExtensionTest.php +++ b/tests/controller/ContentControllerSearchExtensionTest.php @@ -1,19 +1,18 @@ [ - \SilverStripe\CMS\Search\ContentControllerSearchExtension::class, - ], + ContentControllerSearchExtension::class, + ] ); public function testCustomSearchFormClassesToTest() @@ -23,19 +22,16 @@ class ContentControllerSearchExtensionTest extends SapphireTest $page->Content = 'oh really?'; $page->write(); $page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); + /** @var ContentController|ContentControllerSearchExtension $controller */ $controller = new ContentController($page); $form = $controller->SearchForm(); - - if (get_class($form) == 'SilverStripe\\CMS\\Search\\SearchForm') { - $this->assertEquals(array('SilverStripe\\Assets\\File'), $form->getClassesToSearch()); - } + $this->assertEquals([ File::class ], $form->getClassesToSearch()); } public static function setUpBeforeClass() { parent::setUpBeforeClass(); - - FulltextSearchable::enable('SilverStripe\\Assets\\File'); + FulltextSearchable::enable(File::class); } /** @@ -45,9 +41,7 @@ class ContentControllerSearchExtensionTest extends SapphireTest */ public static function tearDownAfterClass() { + File::remove_extension(FulltextSearchable::class); parent::tearDownAfterClass(); - - Config::inst()->update('SilverStripe\\Assets\\File', 'create_table_options', array('SilverStripe\ORM\Connect\MySQLDatabase' => 'ENGINE=InnoDB')); - File::remove_extension('SilverStripe\\ORM\\Search\\FulltextSearchable'); } } diff --git a/tests/controller/ContentControllerTest.php b/tests/controller/ContentControllerTest.php index c8c814eb..14a03ebc 100755 --- a/tests/controller/ContentControllerTest.php +++ b/tests/controller/ContentControllerTest.php @@ -1,13 +1,13 @@ assertEquals('403', $response->getstatusCode()); - // test when user does have permission, should show page title and header ok. $this->logInWithPermission('ADMIN'); - $this->assertEquals('200', $this->get('/contact/?stage=Stage')->getstatusCode()); + $this->assertEquals('200', $this->get('contact/?stage=Stage')->getstatusCode()); } public function testLinkShortcodes() @@ -200,48 +205,3 @@ class ContentControllerTest extends FunctionalTest } } -class ContentControllerTest_Page extends Page -{ - -} - -class ContentControllerTest_PageController extends PageController -{ - - private static $allowed_actions = array ( - 'second_index' - ); - - public function index() - { - return $this->Title; - } - - public function second_index() - { - return $this->index(); - } -} - -// For testing templates -class ContentControllerTestPageWithoutController extends Page -{ - -} - -class ContentControllerTestPage extends Page -{ - -} -class ContentControllerTestPageController extends PageController -{ - private static $allowed_actions = array( - 'test', - 'testwithouttemplate' - ); - - public function testwithouttemplate() - { - return array(); - } -} diff --git a/tests/controller/ContentControllerTestPage.php b/tests/controller/ContentControllerTestPage.php new file mode 100644 index 00000000..7208516a --- /dev/null +++ b/tests/controller/ContentControllerTestPage.php @@ -0,0 +1,8 @@ +Title; + } + + public function second_index() + { + return $this->index(); + } +} diff --git a/tests/controller/SilverStripeNavigatorTest.php b/tests/controller/SilverStripeNavigatorTest.php index 1820d8f6..5dc338e0 100644 --- a/tests/controller/SilverStripeNavigatorTest.php +++ b/tests/controller/SilverStripeNavigatorTest.php @@ -57,37 +57,3 @@ class SilverStripeNavigatorTest extends SapphireTest $this->assertContains('SilverStripeNavigatorTest_ProtectedTestItem', $classes); } } - -class SilverStripeNavigatorTest_TestItem extends SilverStripeNavigatorItem implements TestOnly -{ - public function getTitle() - { - return self::class; - } - public function getHTML() - { - return null; - } -} - -class SilverStripeNavigatorTest_ProtectedTestItem extends SilverStripeNavigatorItem implements TestOnly -{ - - public function getTitle() - { - return self::class; - } - - public function getHTML() - { - return null; - } - - public function canView($member = null) - { - if (!$member) { - $member = Security::getCurrentUser(); - } - return Permission::checkMember($member, 'ADMIN'); - } -} diff --git a/tests/controller/SilverStripeNavigatorTest_ProtectedTestItem.php b/tests/controller/SilverStripeNavigatorTest_ProtectedTestItem.php new file mode 100644 index 00000000..c33122a8 --- /dev/null +++ b/tests/controller/SilverStripeNavigatorTest_ProtectedTestItem.php @@ -0,0 +1,27 @@ +owner->redirect('/foo'); - } -} diff --git a/tests/model/RedirectorPageTest_RedirectExtension.php b/tests/model/RedirectorPageTest_RedirectExtension.php new file mode 100644 index 00000000..58479a6c --- /dev/null +++ b/tests/model/RedirectorPageTest_RedirectExtension.php @@ -0,0 +1,13 @@ +owner->redirect('/foo'); + } +} diff --git a/tests/model/SiteTreeActionsTest.php b/tests/model/SiteTreeActionsTest.php index 443a0466..730137a0 100644 --- a/tests/model/SiteTreeActionsTest.php +++ b/tests/model/SiteTreeActionsTest.php @@ -28,10 +28,6 @@ class SiteTreeActionsTest extends FunctionalTest public function testActionsReadonly() { - if (class_exists('SiteTreeCMSWorkflow')) { - $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed'); - } - // Publish record $this->logInWithPermission('ADMIN'); $page = new SiteTreeActionsTest_Page(); @@ -58,10 +54,6 @@ class SiteTreeActionsTest extends FunctionalTest public function testActionsNoDeletePublishedRecord() { - if (class_exists('SiteTreeCMSWorkflow')) { - $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed'); - } - $this->logInWithPermission('ADMIN'); $page = new SiteTreeActionsTest_Page(); @@ -92,10 +84,6 @@ class SiteTreeActionsTest extends FunctionalTest public function testActionsPublishedRecord() { - if (class_exists('SiteTreeCMSWorkflow')) { - $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed'); - } - $author = $this->objFromFixture(Member::class, 'cmseditor'); Security::setCurrentUser($author); @@ -121,10 +109,6 @@ class SiteTreeActionsTest extends FunctionalTest public function testActionsDeletedFromStageRecord() { - if (class_exists('SiteTreeCMSWorkflow')) { - $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed'); - } - $author = $this->objFromFixture(Member::class, 'cmseditor'); Security::setCurrentUser($author); @@ -154,10 +138,6 @@ class SiteTreeActionsTest extends FunctionalTest public function testActionsChangedOnStageRecord() { - if (class_exists('SiteTreeCMSWorkflow')) { - $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed'); - } - $author = $this->objFromFixture(Member::class, 'cmseditor'); Security::setCurrentUser($author); @@ -185,10 +165,6 @@ class SiteTreeActionsTest extends FunctionalTest public function testActionsViewingOldVersion() { - if (class_exists('SiteTreeCMSWorkflow')) { - $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed'); - } - $p = new Page(); $p->Content = 'test page first version'; $p->write(); @@ -207,16 +183,3 @@ class SiteTreeActionsTest extends FunctionalTest $this->assertNotNull($actions->dataFieldByName('action_rollback')); } } - -class SiteTreeActionsTest_Page extends Page implements TestOnly -{ - public function canEdit($member = null) - { - return Permission::checkMember($member, 'SiteTreeActionsTest_Page_CANEDIT'); - } - - public function canDelete($member = null) - { - return Permission::checkMember($member, 'SiteTreeActionsTest_Page_CANDELETE'); - } -} diff --git a/tests/model/SiteTreeActionsTest_Page.php b/tests/model/SiteTreeActionsTest_Page.php new file mode 100644 index 00000000..6ea08b5e --- /dev/null +++ b/tests/model/SiteTreeActionsTest_Page.php @@ -0,0 +1,17 @@ + array('SiteTreeBacklinksTest_DOD'), - ); + protected static $required_extensions = [ + SiteTree::class => [ + SiteTreeBacklinksTest_DOD::class + ], + ]; public function setUp() { @@ -96,8 +99,6 @@ class SiteTreeBacklinksTest extends SapphireTest public function testChangingUrlOnLiveSiteRewritesLink() { - $this->markTestSkipped("Test disabled until versioned many_many implemented"); - // publish page 1 & 3 $page1 = $this->objFromFixture('Page', 'page1'); $page3 = $this->objFromFixture('Page', 'page3'); @@ -130,8 +131,6 @@ class SiteTreeBacklinksTest extends SapphireTest public function testPublishingPageWithModifiedUrlRewritesLink() { - $this->markTestSkipped("Test disabled until versioned many_many implemented"); - // publish page 1 & 3 $page1 = $this->objFromFixture('Page', 'page1'); $page3 = $this->objFromFixture('Page', 'page3'); @@ -168,8 +167,6 @@ class SiteTreeBacklinksTest extends SapphireTest public function testPublishingPageWithModifiedLinksRewritesLinks() { - $this->markTestSkipped("Test disabled until versioned many_many implemented"); - // publish page 1 & 3 $page1 = $this->objFromFixture('Page', 'page1'); $page3 = $this->objFromFixture('Page', 'page3'); @@ -211,7 +208,9 @@ class SiteTreeBacklinksTest extends SapphireTest public function testLinkTrackingOnExtraContentFields() { + /** @var Page $page1 */ $page1 = $this->objFromFixture('Page', 'page1'); + /** @var Page $page2 */ $page2 = $this->objFromFixture('Page', 'page2'); $page1->publishRecursive(); $page2->publishRecursive(); @@ -236,9 +235,6 @@ class SiteTreeBacklinksTest extends SapphireTest $page2 = $this->objFromFixture('Page', 'page2'); $this->assertEquals('

Testing page 1 link

', $page2->obj('ExtraContent')->forTemplate()); - // @todo - Implement versioned many_many - $this->markTestSkipped("Test disabled until versioned many_many implemented"); - // confirm that published link hasn't $page2Live = Versioned::get_one_by_stage("Page", "Live", "\"SiteTree\".\"ID\" = $page2->ID"); Versioned::set_stage(Versioned::LIVE); @@ -249,8 +245,8 @@ class SiteTreeBacklinksTest extends SapphireTest $page2Live = Versioned::get_one_by_stage("Page", "Live", "\"SiteTree\".\"ID\" = $page2->ID"); $this->assertEquals('

Testing page 1 link

', $page2Live->obj('ExtraContent')->forTemplate()); - - // remove hyperlink to page 1 + // Edit draft again + Versioned::set_stage(Versioned::DRAFT); $page2->ExtraContent = '

No links anymore!

'; $page2->write(); @@ -258,16 +254,3 @@ class SiteTreeBacklinksTest extends SapphireTest $this->assertNotContains($page2->ID, $page1->BackLinkTracking()->column('ID'), 'Assert backlink to page 2 has been removed'); } } - -class SiteTreeBacklinksTest_DOD extends DataExtension implements TestOnly -{ - - private static $db = array( - 'ExtraContent' => 'HTMLText', - ); - - public function updateCMSFields(FieldList $fields) - { - $fields->addFieldToTab("Root.Content", new HTMLEditorField("ExtraContent")); - } -} diff --git a/tests/model/SiteTreeBacklinksTest_DOD.php b/tests/model/SiteTreeBacklinksTest_DOD.php new file mode 100644 index 00000000..1319a4e2 --- /dev/null +++ b/tests/model/SiteTreeBacklinksTest_DOD.php @@ -0,0 +1,18 @@ + 'HTMLText', + ); + + public function updateCMSFields(FieldList $fields) + { + $fields->addFieldToTab("Root.Content", new HTMLEditorField("ExtraContent")); + } +} diff --git a/tests/model/SiteTreeBrokenLinksTest.php b/tests/model/SiteTreeBrokenLinksTest.php index a98f443e..6e12d46c 100644 --- a/tests/model/SiteTreeBrokenLinksTest.php +++ b/tests/model/SiteTreeBrokenLinksTest.php @@ -153,8 +153,6 @@ class SiteTreeBrokenLinksTest extends SapphireTest public function testPublishingSourceBeforeDestHasBrokenLink() { - $this->markTestSkipped("Test disabled until versioned many_many implemented"); - $this->logInWithPermission('ADMIN'); // Set up two draft pages with a link from content -> about @@ -169,15 +167,16 @@ class SiteTreeBrokenLinksTest extends SapphireTest // Publish the source of the link, while the dest is still unpublished. $linkSrc->publishRecursive(); - // Verify that the link isn't broken on draft but is broken on published + // Verify that the link is not marked as broken on draft (source of truth) $this->assertEquals(0, (int)$linkSrc->HasBrokenLink); - $this->assertEquals(1, DB::query("SELECT \"HasBrokenLink\" FROM \"SiteTree_Live\" + + // Live doesn't have separate broken link tracking + $this->assertEquals(0, DB::query("SELECT \"HasBrokenLink\" FROM \"SiteTree_Live\" WHERE \"ID\" = $linkSrc->ID")->value()); } public function testRestoreFixesBrokenLinks() { - $this->markTestSkipped("Test disabled until versioned many_many implemented"); // Create page and virtual page $p = new Page(); $p->Title = "source"; @@ -210,43 +209,44 @@ class SiteTreeBrokenLinksTest extends SapphireTest $this->assertFalse($vp->HasBrokenLink); $this->assertFalse($rp->HasBrokenLink); - // Unpublish the source page, confirm that the page 2 and RP has a broken link on published + // Unpublishing doesn't affect broken state on live (draft is source of truth) $p->doUnpublish(); - $p2Live = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', 'Live', '"SiteTree"."ID" = ' . $p2->ID); - $rpLive = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', 'Live', '"SiteTree"."ID" = ' . $rp->ID); - $this->assertEquals(1, $p2Live->HasBrokenLink); - $this->assertEquals(1, $rpLive->HasBrokenLink); + $p2Live = Versioned::get_one_by_stage(SiteTree::class, 'Live', '"SiteTree"."ID" = ' . $p2->ID); + $rpLive = Versioned::get_one_by_stage(SiteTree::class, 'Live', '"SiteTree"."ID" = ' . $rp->ID); + $this->assertEquals(0, $p2Live->HasBrokenLink); + $this->assertEquals(0, $rpLive->HasBrokenLink); // Delete the source page, confirm that the VP, RP and page 2 have broken links on draft $p->delete(); $vp->flushCache(); - $vp = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $vp->ID); + $vp = DataObject::get_by_id(SiteTree::class, $vp->ID); $p2->flushCache(); - $p2 = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $p2->ID); + $p2 = DataObject::get_by_id(SiteTree::class, $p2->ID); $rp->flushCache(); - $rp = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $rp->ID); + $rp = DataObject::get_by_id(SiteTree::class, $rp->ID); $this->assertEquals(1, $p2->HasBrokenLink); $this->assertEquals(1, $vp->HasBrokenLink); $this->assertEquals(1, $rp->HasBrokenLink); // Restore the page to stage, confirm that this fixes the links - $p = Versioned::get_latest_version('SilverStripe\\CMS\\Model\\SiteTree', $pageID); + /** @var SiteTree $p */ + $p = Versioned::get_latest_version(SiteTree::class, $pageID); $p->doRestoreToStage(); $p2->flushCache(); - $p2 = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $p2->ID); + $p2 = DataObject::get_by_id(SiteTree::class, $p2->ID); $vp->flushCache(); - $vp = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $vp->ID); + $vp = DataObject::get_by_id(SiteTree::class, $vp->ID); $rp->flushCache(); - $rp = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $rp->ID); + $rp = DataObject::get_by_id(SiteTree::class, $rp->ID); $this->assertFalse((bool)$p2->HasBrokenLink); $this->assertFalse((bool)$vp->HasBrokenLink); $this->assertFalse((bool)$rp->HasBrokenLink); // Publish and confirm that the p2 and RP broken links are fixed on published $this->assertTrue($p->publishRecursive()); - $p2Live = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', 'Live', '"SiteTree"."ID" = ' . $p2->ID); - $rpLive = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', 'Live', '"SiteTree"."ID" = ' . $rp->ID); + $p2Live = Versioned::get_one_by_stage(SiteTree::class, 'Live', '"SiteTree"."ID" = ' . $p2->ID); + $rpLive = Versioned::get_one_by_stage(SiteTree::class, 'Live', '"SiteTree"."ID" = ' . $rp->ID); $this->assertFalse((bool)$p2Live->HasBrokenLink); $this->assertFalse((bool)$rpLive->HasBrokenLink); } @@ -290,25 +290,25 @@ class SiteTreeBrokenLinksTest extends SapphireTest $p->delete(); $vp->flushCache(); - $vp = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $vp->ID); + $vp = DataObject::get_by_id(SiteTree::class, $vp->ID); $p2->flushCache(); - $p2 = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $p2->ID); + $p2 = DataObject::get_by_id(SiteTree::class, $p2->ID); $rp->flushCache(); - $rp = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $rp->ID); + $rp = DataObject::get_by_id(SiteTree::class, $rp->ID); $this->assertEquals(1, $p2->HasBrokenLink); $this->assertEquals(1, $vp->HasBrokenLink); $this->assertEquals(1, $rp->HasBrokenLink); // Call doRevertToLive and confirm that broken links are restored - $pLive = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', 'Live', '"SiteTree"."ID" = ' . $pID); + $pLive = Versioned::get_one_by_stage(SiteTree::class, 'Live', '"SiteTree"."ID" = ' . $pID); $pLive->doRevertToLive(); $p2->flushCache(); - $p2 = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $p2->ID); + $p2 = DataObject::get_by_id(SiteTree::class, $p2->ID); $vp->flushCache(); - $vp = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $vp->ID); + $vp = DataObject::get_by_id(SiteTree::class, $vp->ID); $rp->flushCache(); - $rp = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $rp->ID); + $rp = DataObject::get_by_id(SiteTree::class, $rp->ID); $this->assertFalse((bool)$p2->HasBrokenLink); $this->assertFalse((bool)$vp->HasBrokenLink); $this->assertFalse((bool)$rp->HasBrokenLink); diff --git a/tests/model/SiteTreePermissionsTest.php b/tests/model/SiteTreePermissionsTest.php index 3392f780..2efe8739 100644 --- a/tests/model/SiteTreePermissionsTest.php +++ b/tests/model/SiteTreePermissionsTest.php @@ -41,40 +41,39 @@ class SiteTreePermissionsTest extends FunctionalTest $this->useDraftSite(false); $this->autoFollowRedirection = false; - $page = $this->objFromFixture('Page', 'draftOnlyPage'); + /** @var Page $draftOnlyPage */ + $draftOnlyPage = $this->objFromFixture('Page', 'draftOnlyPage'); + $this->logOut(); - if ($member = Security::getCurrentUser()) { - Security::setCurrentUser(null); - } - - $response = $this->get($page->URLSegment . '?stage=Live'); + $response = $this->get($draftOnlyPage->URLSegment . '?stage=Live'); $this->assertEquals($response->getStatusCode(), '404'); - $response = $this->get($page->URLSegment . '?stage='); + $response = $this->get($draftOnlyPage->URLSegment); $this->assertEquals($response->getStatusCode(), '404'); // should be prompted for a login try { - $response = $this->get($page->URLSegment . '?stage=Stage'); + $response = $this->get($draftOnlyPage->URLSegment . '?stage=Stage'); } catch (HTTPResponse_Exception $responseException) { $response = $responseException->getResponse(); } $this->assertEquals($response->getStatusCode(), '302'); $this->assertContains( - Config::inst()->get('SilverStripe\\Security\\Security', 'login_url'), + Security::config()->get('login_url'), $response->getHeader('Location') ); $this->logInWithPermission('ADMIN'); - $response = $this->get($page->URLSegment . '?stage=Live'); - $this->assertEquals($response->getStatusCode(), '404'); + $response = $this->get($draftOnlyPage->URLSegment . '?stage=Live'); + $this->assertEquals('404', $response->getStatusCode()); - $response = $this->get($page->URLSegment . '?stage=Stage'); - $this->assertEquals($response->getStatusCode(), '200'); + $response = $this->get($draftOnlyPage->URLSegment . '?stage=Stage'); + $this->assertEquals('200', $response->getStatusCode()); - $response = $this->get($page->URLSegment . '?stage='); - $this->assertEquals($response->getStatusCode(), '404'); + // Stage is remembered from last request + $response = $this->get($draftOnlyPage->URLSegment); + $this->assertEquals('200', $response->getStatusCode()); } public function testPermissionCheckingWorksOnDeletedPages() @@ -87,7 +86,7 @@ class SiteTreePermissionsTest extends FunctionalTest $page->delete(); // Re-fetch the page from the live site - $page = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', 'Live', "\"SiteTree\".\"ID\" = $pageID"); + $page = Versioned::get_one_by_stage(SiteTree::class, 'Live', "\"SiteTree\".\"ID\" = $pageID"); // subadmin has edit rights on that page $member = $this->objFromFixture(Member::class, 'subadmin'); @@ -137,7 +136,7 @@ class SiteTreePermissionsTest extends FunctionalTest $page->delete(); // We'll need to resurrect the page from the version cache to test this case - $page = Versioned::get_latest_version('SilverStripe\\CMS\\Model\\SiteTree', $pageID); + $page = Versioned::get_latest_version(SiteTree::class, $pageID); // subadmin had edit rights on that page, but now it's gone $member = $this->objFromFixture(Member::class, 'subadmin'); diff --git a/tests/model/SiteTreeTest.php b/tests/model/SiteTreeTest.php index de671c7b..6a6fd7e4 100644 --- a/tests/model/SiteTreeTest.php +++ b/tests/model/SiteTreeTest.php @@ -1432,192 +1432,3 @@ class SiteTreeTest extends SapphireTest $this->assertSame('SiteTreeTest_LegacyControllerName_Controller', $class->getControllerName()); } } - -/**#@+ - * @ignore - */ - -class SiteTreeTest_PageNode extends Page implements TestOnly -{ - -} -class SiteTreeTest_PageNodeController extends PageController implements TestOnly -{ -} - -class SiteTreeTest_Conflicted extends Page implements TestOnly -{ - -} -class SiteTreeTest_ConflictedController extends PageController implements TestOnly -{ - - private static $allowed_actions = array ( - 'conflicted-action' - ); - - public function hasActionTemplate($template) - { - if ($template == 'conflicted-template') { - return true; - } else { - return parent::hasActionTemplate($template); - } - } -} - -class SiteTreeTest_NullHtmlCleaner extends HTMLCleaner -{ - public function cleanHTML($html) - { - return $html; - } -} - -class SiteTreeTest_ClassA extends Page implements TestOnly -{ - private static $need_permission = [ - 'ADMIN', - 'CMS_ACCESS_CMSMain' - ]; - - private static $allowed_children = [ - SiteTreeTest_ClassB::class - ]; -} - -class SiteTreeTest_ClassB extends Page implements TestOnly -{ - // Also allowed subclasses - private static $allowed_children = array(SiteTreeTest_ClassC::class); -} - -class SiteTreeTest_ClassC extends Page implements TestOnly -{ - private static $allowed_children = array(); -} - -class SiteTreeTest_ClassD extends Page implements TestOnly -{ - // Only allows this class, no children classes - private static $allowed_children = array('*SiteTreeTest_ClassC'); - - private static $extensions = [ - 'SiteTreeTest_ExtensionA', - 'SiteTreeTest_ExtensionB', - ]; - - public $canEditValue = null; - - public function canEdit($member = null) - { - return isset($this->canEditValue) - ? $this->canEditValue - : parent::canEdit($member); - } -} - -class SiteTreeTest_ClassE extends Page implements TestOnly, HiddenClass -{ - -} - -class SiteTreeTest_ClassCext extends SiteTreeTest_ClassC implements TestOnly -{ - // Override SiteTreeTest_ClassC definitions - private static $allowed_children = array(SiteTreeTest_ClassB::class); -} - -class SiteTreeTest_NotRoot extends Page implements TestOnly -{ - private static $can_be_root = false; -} - -class SiteTreeTest_StageStatusInherit extends SiteTree implements TestOnly -{ - public function getStatusFlags($cached = true) - { - $flags = parent::getStatusFlags($cached); - $flags['inherited-class'] = "InheritedTitle"; - return $flags; - } -} - -class SiteTreeTest_Extension extends DataExtension implements TestOnly -{ - - public function augmentValidURLSegment() - { - return false; - } -} - -class SiteTreeTest_AdminDenied extends Page implements TestOnly -{ - private static $extensions = array( - 'SiteTreeTest_AdminDeniedExtension' - ); -} - -class SiteTreeTest_ExtensionA extends SiteTreeExtension implements TestOnly -{ - - public static $can_publish = true; - - public function canPublish($member) - { - return static::$can_publish; - } -} - -class SiteTreeTest_ExtensionB extends SiteTreeExtension implements TestOnly -{ - - public static $can_publish = true; - - public function canPublish($member) - { - return static::$can_publish; - } -} - - -/** - * An extension that can even deny actions to admins - */ -class SiteTreeTest_AdminDeniedExtension extends DataExtension implements TestOnly -{ - public function canCreate($member) - { - return false; - } - public function canEdit($member) - { - return false; - } - public function canDelete($member) - { - return false; - } - public function canAddChildren() - { - return false; - } - public function canView() - { - return false; - } -} - -/** - * An empty SiteTree instance with a controller to test that legacy controller names can still be loaded - */ -class SiteTreeTest_LegacyControllerName extends Page implements TestOnly -{ - -} - -class SiteTreeTest_LegacyControllerName_Controller extends PageController implements TestOnly -{ - -} diff --git a/tests/model/SiteTreeTest_AdminDenied.php b/tests/model/SiteTreeTest_AdminDenied.php new file mode 100644 index 00000000..3b6de533 --- /dev/null +++ b/tests/model/SiteTreeTest_AdminDenied.php @@ -0,0 +1,10 @@ +canEditValue) + ? $this->canEditValue + : parent::canEdit($member); + } +} diff --git a/tests/model/SiteTreeTest_ClassE.php b/tests/model/SiteTreeTest_ClassE.php new file mode 100644 index 00000000..2fc7d40d --- /dev/null +++ b/tests/model/SiteTreeTest_ClassE.php @@ -0,0 +1,9 @@ +markTestSkipped('RedirectorPage required'); - } - $rp = new RedirectorPage(array('ExternalURL' => 'http://google.com', 'RedirectionType' => 'External')); $rp->write(); $rp->publishRecursive(); @@ -653,82 +649,3 @@ class VirtualPageTest extends FunctionalTest $this->assertContains('testaction', $controller->allowedActions()); } } - -class VirtualPageTest_ClassA extends Page implements TestOnly -{ - - private static $db = array( - 'MyInitiallyCopiedField' => 'Text', - 'MyVirtualField' => 'Text', - 'MyNonVirtualField' => 'Text', - 'CastingTest' => 'VirtualPageTest_TestDBField' - ); - - private static $allowed_children = array('VirtualPageTest_ClassB'); - - public function modelMethod() - { - return 'hi there'; - } -} - -class VirtualPageTest_ClassAController extends PageController implements TestOnly -{ - private static $allowed_actions = [ - 'testaction' - ]; - - public function testMethod() - { - return 'hello'; - } -} - -class VirtualPageTest_ClassB extends Page implements TestOnly -{ - private static $allowed_children = array('VirtualPageTest_ClassC'); -} - -class VirtualPageTest_ClassC extends Page implements TestOnly -{ - private static $allowed_children = array(); -} - -class VirtualPageTest_NotRoot extends Page implements TestOnly -{ - private static $can_be_root = false; -} - -class VirtualPageTest_TestDBField extends DBVarchar implements TestOnly -{ - public function forTemplate() - { - return strtoupper($this->XML()); - } -} - -class VirtualPageTest_VirtualPageSub extends VirtualPage implements TestOnly -{ - private static $db = array( - 'MyProperty' => 'Varchar', - ); -} - -class VirtualPageTest_PageExtension extends DataExtension implements TestOnly -{ - - private static $db = array( - // These fields are just on an extension to simulate shared properties between Page and VirtualPage. - // Not possible through direct $db definitions due to VirtualPage inheriting from Page, and Page being defined elsewhere. - 'MySharedVirtualField' => 'Text', - 'MySharedNonVirtualField' => 'Text', - ); -} - -class VirtualPageTest_PageWithAllowedChildren extends Page implements TestOnly -{ - private static $allowed_children = array( - 'VirtualPageTest_ClassA', - 'SilverStripe\\CMS\\Model\\VirtualPage' - ); -} diff --git a/tests/model/VirtualPageTest_ClassA.php b/tests/model/VirtualPageTest_ClassA.php new file mode 100644 index 00000000..53331e04 --- /dev/null +++ b/tests/model/VirtualPageTest_ClassA.php @@ -0,0 +1,20 @@ + 'Text', + 'MyVirtualField' => 'Text', + 'MyNonVirtualField' => 'Text', + 'CastingTest' => 'VirtualPageTest_TestDBField' + ); + + private static $allowed_children = array('VirtualPageTest_ClassB'); + + public function modelMethod() + { + return 'hi there'; + } +} diff --git a/tests/model/VirtualPageTest_ClassAController.php b/tests/model/VirtualPageTest_ClassAController.php new file mode 100644 index 00000000..986e44be --- /dev/null +++ b/tests/model/VirtualPageTest_ClassAController.php @@ -0,0 +1,15 @@ + 'Text', + 'MySharedNonVirtualField' => 'Text', + ); +} diff --git a/tests/model/VirtualPageTest_PageWithAllowedChildren.php b/tests/model/VirtualPageTest_PageWithAllowedChildren.php new file mode 100644 index 00000000..43ae8968 --- /dev/null +++ b/tests/model/VirtualPageTest_PageWithAllowedChildren.php @@ -0,0 +1,12 @@ +XML()); + } +} diff --git a/tests/model/VirtualPageTest_VirtualPageSub.php b/tests/model/VirtualPageTest_VirtualPageSub.php new file mode 100644 index 00000000..695eaf6d --- /dev/null +++ b/tests/model/VirtualPageTest_VirtualPageSub.php @@ -0,0 +1,11 @@ + 'Varchar', + ); +} diff --git a/tests/search/SearchFormTest.php b/tests/search/SearchFormTest.php index a654053d..7269f570 100644 --- a/tests/search/SearchFormTest.php +++ b/tests/search/SearchFormTest.php @@ -51,10 +51,10 @@ class ZZZSearchFormTest extends FunctionalTest { // HACK Postgres doesn't refresh TSearch indexes when the schema changes after CREATE TABLE // MySQL will need a different table type - static::kill_temp_db(); + static::$tempDB->kill(); Config::modify(); FulltextSearchable::enable(); - static::create_temp_db(); + static::$tempDB->build(); static::resetDBSchema(true); parent::setUpBeforeClass(); } @@ -116,9 +116,11 @@ class ZZZSearchFormTest extends FunctionalTest } $request = new HTTPRequest('GET', 'search', ['Search'=>'publicPublishedPage']); + $request->setSession($this->session()); $this->mockController->setRequest($request); $sf = new SearchForm($this->mockController); + /** @var SiteTree $publishedPage */ $publishedPage = $this->objFromFixture(SiteTree::class, 'publicPublishedPage'); $publishedPage->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); @@ -142,9 +144,11 @@ class ZZZSearchFormTest extends FunctionalTest } $request = new HTTPRequest('GET', 'search', ['Search'=>'"finding butterflies"']); + $request->setSession($this->session()); $this->mockController->setRequest($request); $sf = new SearchForm($this->mockController); + /** @var SiteTree $publishedPage */ $publishedPage = $this->objFromFixture(SiteTree::class, 'publicPublishedPage'); $publishedPage->Title = "finding butterflies"; $publishedPage->write(); @@ -169,6 +173,7 @@ class ZZZSearchFormTest extends FunctionalTest } $request = new HTTPRequest('GET', 'search', ['Search'=>'publicUnpublishedPage']); + $request->setSession($this->session()); $this->mockController->setRequest($request); $sf = new SearchForm($this->mockController); @@ -188,9 +193,11 @@ class ZZZSearchFormTest extends FunctionalTest } $request = new HTTPRequest('GET', 'search', ['Search'=>'restrictedViewLoggedInUsers']); + $request->setSession($this->session()); $this->mockController->setRequest($request); $sf = new SearchForm($this->mockController); + /** @var SiteTree $page */ $page = $this->objFromFixture(SiteTree::class, 'restrictedViewLoggedInUsers'); $page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $results = $sf->getResults(); @@ -218,9 +225,11 @@ class ZZZSearchFormTest extends FunctionalTest } $request = new HTTPRequest('GET', 'search', ['Search'=>'restrictedViewOnlyWebsiteUsers']); + $request->setSession($this->session()); $this->mockController->setRequest($request); $sf = new SearchForm($this->mockController); + /** @var SiteTree $page */ $page = $this->objFromFixture(SiteTree::class, 'restrictedViewOnlyWebsiteUsers'); $page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $results = $sf->getResults(); @@ -251,15 +260,21 @@ class ZZZSearchFormTest extends FunctionalTest Security::setCurrentUser(null); } + /** + * + */ public function testInheritedRestrictedPagesNotIncluded() { $request = new HTTPRequest('GET', 'search', ['Search'=>'inheritRestrictedView']); + $request->setSession($this->session()); $this->mockController->setRequest($request); $sf = new SearchForm($this->mockController); + /** @var SiteTree $parent */ $parent = $this->objFromFixture(SiteTree::class, 'restrictedViewLoggedInUsers'); $parent->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); + /** @var SiteTree $page */ $page = $this->objFromFixture(SiteTree::class, 'inheritRestrictedView'); $page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $results = $sf->getResults(); @@ -287,6 +302,7 @@ class ZZZSearchFormTest extends FunctionalTest } $request = new HTTPRequest('GET', 'search', ['Search'=>'dontShowInSearchPage']); + $request->setSession($this->session()); $this->mockController->setRequest($request); $sf = new SearchForm($this->mockController); @@ -306,11 +322,14 @@ class ZZZSearchFormTest extends FunctionalTest } $request = new HTTPRequest('GET', 'search', ['Search'=>'dontShowInSearchFile']); + $request->setSession($this->session()); $this->mockController->setRequest($request); $sf = new SearchForm($this->mockController); + /** @var File $dontShowInSearchFile */ $dontShowInSearchFile = $this->objFromFixture(File::class, 'dontShowInSearchFile'); $dontShowInSearchFile->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); + /** @var File $showInSearchFile */ $showInSearchFile = $this->objFromFixture(File::class, 'showInSearchFile'); $showInSearchFile->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); @@ -323,6 +342,7 @@ class ZZZSearchFormTest extends FunctionalTest // Check ShowInSearch=1 can be found $request = new HTTPRequest('GET', 'search', ['Search'=>'showInSearchFile']); + $request->setSession($this->session()); $this->mockController->setRequest($request); $sf = new SearchForm($this->mockController); $results = $sf->getResults(); @@ -344,9 +364,11 @@ class ZZZSearchFormTest extends FunctionalTest } $request = new HTTPRequest('GET', 'search', ['Search'=>'Brötchen']); + $request->setSession($this->session()); $this->mockController->setRequest($request); $sf = new SearchForm($this->mockController); + /** @var SiteTree $pageWithSpecialChars */ $pageWithSpecialChars = $this->objFromFixture(SiteTree::class, 'pageWithSpecialChars'); $pageWithSpecialChars->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); @@ -359,6 +381,7 @@ class ZZZSearchFormTest extends FunctionalTest // Check another word $request = new HTTPRequest('GET', 'search', ['Search'=>'Bäcker']); + $request->setSession($this->session()); $this->mockController->setRequest($request); $sf = new SearchForm($this->mockController); $results = $sf->getResults();