mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-09-30 05:09:07 +02:00
Fix and upgrade all tests
Fix link tracking
This commit is contained in:
parent
95e304a4ca
commit
c2c75aa9e3
@ -206,6 +206,7 @@ class CMSPageAddController extends CMSPageEditController
|
|||||||
$record->write();
|
$record->write();
|
||||||
|
|
||||||
$editController = CMSPageEditController::singleton();
|
$editController = CMSPageEditController::singleton();
|
||||||
|
$editController->setRequest($this->getRequest());
|
||||||
$editController->setCurrentPageID($record->ID);
|
$editController->setCurrentPageID($record->ID);
|
||||||
|
|
||||||
$session = $this->getRequest()->getSession();
|
$session = $this->getRequest()->getSession();
|
||||||
|
@ -6,6 +6,7 @@ use Page;
|
|||||||
use SilverStripe\Assets\File;
|
use SilverStripe\Assets\File;
|
||||||
use SilverStripe\Assets\Storage\GeneratedAssetHandler;
|
use SilverStripe\Assets\Storage\GeneratedAssetHandler;
|
||||||
use SilverStripe\CMS\Controllers\ModelAsController;
|
use SilverStripe\CMS\Controllers\ModelAsController;
|
||||||
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Control\Director;
|
use SilverStripe\Control\Director;
|
||||||
use SilverStripe\Control\HTTPRequest;
|
use SilverStripe\Control\HTTPRequest;
|
||||||
use SilverStripe\Control\HTTPResponse;
|
use SilverStripe\Control\HTTPResponse;
|
||||||
@ -96,8 +97,10 @@ class ErrorPage extends Page
|
|||||||
Requirements::clear();
|
Requirements::clear();
|
||||||
Requirements::clear_combined_files();
|
Requirements::clear_combined_files();
|
||||||
|
|
||||||
|
$request = new HTTPRequest('GET', '');
|
||||||
|
$request->setSession(Controller::curr()->getRequest()->getSession());
|
||||||
return ModelAsController::controller_for($errorPage)
|
return ModelAsController::controller_for($errorPage)
|
||||||
->handleRequest(new HTTPRequest('GET', ''));
|
->handleRequest($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
// then fall back on a cached version
|
// then fall back on a cached version
|
||||||
|
@ -2,12 +2,13 @@
|
|||||||
|
|
||||||
namespace SilverStripe\CMS\Model;
|
namespace SilverStripe\CMS\Model;
|
||||||
|
|
||||||
|
use Page;
|
||||||
use SilverStripe\Forms\FieldList;
|
use SilverStripe\Forms\FieldList;
|
||||||
use SilverStripe\Forms\HeaderField;
|
use SilverStripe\Forms\HeaderField;
|
||||||
use SilverStripe\Forms\OptionsetField;
|
use SilverStripe\Forms\OptionsetField;
|
||||||
use SilverStripe\Forms\TextField;
|
use SilverStripe\Forms\TextField;
|
||||||
use SilverStripe\Forms\TreeDropdownField;
|
use SilverStripe\Forms\TreeDropdownField;
|
||||||
use Page;
|
use SilverStripe\Versioned\Versioned;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A redirector page redirects when the page is visited.
|
* A redirector page redirects when the page is visited.
|
||||||
@ -120,7 +121,9 @@ class RedirectorPage extends Page
|
|||||||
{
|
{
|
||||||
if ($this->RedirectionType == 'Internal') {
|
if ($this->RedirectionType == 'Internal') {
|
||||||
if ($this->LinkToID) {
|
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 {
|
} else {
|
||||||
// An incomplete redirector page definitely has a broken link
|
// An incomplete redirector page definitely has a broken link
|
||||||
$this->HasBrokenLink = true;
|
$this->HasBrokenLink = true;
|
||||||
|
@ -4,8 +4,6 @@ namespace SilverStripe\CMS\Model;
|
|||||||
|
|
||||||
use Page;
|
use Page;
|
||||||
use SilverStripe\CampaignAdmin\AddToCampaignHandler_FormAction;
|
use SilverStripe\CampaignAdmin\AddToCampaignHandler_FormAction;
|
||||||
use SilverStripe\Core\Injector\Injector;
|
|
||||||
use SilverStripe\ORM\CMSPreviewable;
|
|
||||||
use SilverStripe\CMS\Controllers\CMSPageEditController;
|
use SilverStripe\CMS\Controllers\CMSPageEditController;
|
||||||
use SilverStripe\CMS\Controllers\ContentController;
|
use SilverStripe\CMS\Controllers\ContentController;
|
||||||
use SilverStripe\CMS\Controllers\ModelAsController;
|
use SilverStripe\CMS\Controllers\ModelAsController;
|
||||||
@ -18,6 +16,7 @@ use SilverStripe\Control\RequestHandler;
|
|||||||
use SilverStripe\Core\ClassInfo;
|
use SilverStripe\Core\ClassInfo;
|
||||||
use SilverStripe\Core\Config\Config;
|
use SilverStripe\Core\Config\Config;
|
||||||
use SilverStripe\Core\Convert;
|
use SilverStripe\Core\Convert;
|
||||||
|
use SilverStripe\Core\Injector\Injector;
|
||||||
use SilverStripe\Core\Resettable;
|
use SilverStripe\Core\Resettable;
|
||||||
use SilverStripe\Dev\Deprecation;
|
use SilverStripe\Dev\Deprecation;
|
||||||
use SilverStripe\Forms\CheckboxField;
|
use SilverStripe\Forms\CheckboxField;
|
||||||
@ -41,6 +40,7 @@ use SilverStripe\Forms\TreeDropdownField;
|
|||||||
use SilverStripe\i18n\i18n;
|
use SilverStripe\i18n\i18n;
|
||||||
use SilverStripe\i18n\i18nEntityProvider;
|
use SilverStripe\i18n\i18nEntityProvider;
|
||||||
use SilverStripe\ORM\ArrayList;
|
use SilverStripe\ORM\ArrayList;
|
||||||
|
use SilverStripe\ORM\CMSPreviewable;
|
||||||
use SilverStripe\ORM\DataList;
|
use SilverStripe\ORM\DataList;
|
||||||
use SilverStripe\ORM\DataObject;
|
use SilverStripe\ORM\DataObject;
|
||||||
use SilverStripe\ORM\DB;
|
use SilverStripe\ORM\DB;
|
||||||
@ -48,16 +48,16 @@ use SilverStripe\ORM\HiddenClass;
|
|||||||
use SilverStripe\ORM\Hierarchy\Hierarchy;
|
use SilverStripe\ORM\Hierarchy\Hierarchy;
|
||||||
use SilverStripe\ORM\ManyManyList;
|
use SilverStripe\ORM\ManyManyList;
|
||||||
use SilverStripe\ORM\ValidationResult;
|
use SilverStripe\ORM\ValidationResult;
|
||||||
|
use SilverStripe\Security\Group;
|
||||||
use SilverStripe\Security\InheritedPermissions;
|
use SilverStripe\Security\InheritedPermissions;
|
||||||
use SilverStripe\Security\InheritedPermissionsExtension;
|
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\Member;
|
||||||
use SilverStripe\Security\Permission;
|
use SilverStripe\Security\Permission;
|
||||||
|
use SilverStripe\Security\PermissionChecker;
|
||||||
use SilverStripe\Security\PermissionProvider;
|
use SilverStripe\Security\PermissionProvider;
|
||||||
|
use SilverStripe\Security\Security;
|
||||||
use SilverStripe\SiteConfig\SiteConfig;
|
use SilverStripe\SiteConfig\SiteConfig;
|
||||||
|
use SilverStripe\Versioned\Versioned;
|
||||||
use SilverStripe\View\ArrayData;
|
use SilverStripe\View\ArrayData;
|
||||||
use SilverStripe\View\HTML;
|
use SilverStripe\View\HTML;
|
||||||
use SilverStripe\View\Parsers\ShortcodeParser;
|
use SilverStripe\View\Parsers\ShortcodeParser;
|
||||||
@ -1472,18 +1472,7 @@ class SiteTree extends DataObject implements PermissionProvider, i18nEntityProvi
|
|||||||
|
|
||||||
public function onAfterDelete()
|
public function onAfterDelete()
|
||||||
{
|
{
|
||||||
// Need to flush cache to avoid outdated versionnumber references
|
$this->updateDependentPages();
|
||||||
$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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
parent::onAfterDelete();
|
parent::onAfterDelete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2336,14 +2325,11 @@ class SiteTree extends DataObject implements PermissionProvider, i18nEntityProvi
|
|||||||
/** @var SiteTree $result */
|
/** @var SiteTree $result */
|
||||||
$result = DataObject::get_by_id(self::class, $this->ID);
|
$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);
|
Versioned::set_reading_mode($oldReadingMode);
|
||||||
|
|
||||||
|
// Need to update pages linking to this one as no longer broken
|
||||||
|
$this->updateDependentPages();
|
||||||
|
|
||||||
$this->invokeWithExtensions('onAfterRestoreToStage', $this);
|
$this->invokeWithExtensions('onAfterRestoreToStage', $this);
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
@ -2865,4 +2851,22 @@ class SiteTree extends DataObject implements PermissionProvider, i18nEntityProvi
|
|||||||
$permissions->clearCache();
|
$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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
namespace SilverStripe\CMS\Model;
|
namespace SilverStripe\CMS\Model;
|
||||||
|
|
||||||
|
use DOMElement;
|
||||||
use SilverStripe\Assets\File;
|
use SilverStripe\Assets\File;
|
||||||
use SilverStripe\ORM\DataExtension;
|
use SilverStripe\ORM\DataExtension;
|
||||||
use SilverStripe\ORM\DataObject;
|
use SilverStripe\ORM\DataObject;
|
||||||
use SilverStripe\ORM\FieldType\DBHTMLText;
|
use SilverStripe\ORM\FieldType\DBHTMLText;
|
||||||
use SilverStripe\ORM\ManyManyList;
|
use SilverStripe\ORM\ManyManyList;
|
||||||
use SilverStripe\Versioned\Versioned;
|
use SilverStripe\Versioned\Versioned;
|
||||||
use DOMElement;
|
|
||||||
use SilverStripe\View\Parsers\HTMLValue;
|
use SilverStripe\View\Parsers\HTMLValue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -159,8 +159,9 @@ class VirtualPage extends Page
|
|||||||
public function syncLinkTracking()
|
public function syncLinkTracking()
|
||||||
{
|
{
|
||||||
if ($this->CopyContentFromID) {
|
if ($this->CopyContentFromID) {
|
||||||
$copyPage = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $this->CopyContentFromID);
|
$this->HasBrokenLink = Versioned::get_by_stage(SiteTree::class, Versioned::DRAFT)
|
||||||
$this->HasBrokenLink = !$copyPage;
|
->filter('ID', $this->CopyContentFromID)
|
||||||
|
->count() === 0;
|
||||||
} else {
|
} else {
|
||||||
$this->HasBrokenLink = true;
|
$this->HasBrokenLink = true;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,8 @@ class ContentControllerSearchExtension extends Extension
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Site search form
|
* Site search form
|
||||||
|
*
|
||||||
|
* @return SearchForm
|
||||||
*/
|
*/
|
||||||
public function SearchForm()
|
public function SearchForm()
|
||||||
{
|
{
|
||||||
|
@ -5,5 +5,3 @@ require FRAMEWORK_PATH . '/tests/bootstrap/init.php';
|
|||||||
require FRAMEWORK_PATH . '/tests/bootstrap/cli.php';
|
require FRAMEWORK_PATH . '/tests/bootstrap/cli.php';
|
||||||
require FRAMEWORK_PATH . '/tests/bootstrap/environment.php';
|
require FRAMEWORK_PATH . '/tests/bootstrap/environment.php';
|
||||||
require __DIR__ . '/bootstrap/mysite.php';
|
require __DIR__ . '/bootstrap/mysite.php';
|
||||||
require FRAMEWORK_PATH . '/tests/bootstrap/mysite.php';
|
|
||||||
require FRAMEWORK_PATH . '/tests/bootstrap/phpunit.php';
|
|
||||||
|
@ -1,25 +1,26 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use SilverStripe\Core\Injector\Injector;
|
use Psr\SimpleCache\CacheInterface;
|
||||||
use SilverStripe\ORM\DB;
|
use SilverStripe\Admin\CMSBatchActionHandler;
|
||||||
use SilverStripe\ORM\DataObject;
|
|
||||||
use SilverStripe\ORM\ValidationException;
|
|
||||||
use SilverStripe\Security\Security;
|
|
||||||
use SilverStripe\Versioned\Versioned;
|
|
||||||
use SilverStripe\ORM\HiddenClass;
|
|
||||||
use SilverStripe\CMS\Controllers\CMSMain;
|
use SilverStripe\CMS\Controllers\CMSMain;
|
||||||
use SilverStripe\CMS\Model\SiteTree;
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
use SilverStripe\Admin\CMSBatchActionHandler;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\SiteConfig\SiteConfig;
|
use SilverStripe\Control\HTTPResponse_Exception;
|
||||||
use Psr\SimpleCache\CacheInterface;
|
|
||||||
use SilverStripe\Core\Convert;
|
|
||||||
use SilverStripe\Core\ClassInfo;
|
use SilverStripe\Core\ClassInfo;
|
||||||
|
use SilverStripe\Core\Config\Config;
|
||||||
|
use SilverStripe\Core\Convert;
|
||||||
|
use SilverStripe\Core\Injector\Injector;
|
||||||
|
use SilverStripe\Dev\CSSContentParser;
|
||||||
|
use SilverStripe\Dev\FunctionalTest;
|
||||||
use SilverStripe\Dev\TestOnly;
|
use SilverStripe\Dev\TestOnly;
|
||||||
use SilverStripe\Forms\FieldList;
|
use SilverStripe\Forms\FieldList;
|
||||||
use SilverStripe\Core\Config\Config;
|
use SilverStripe\ORM\DataObject;
|
||||||
use SilverStripe\Dev\CSSContentParser;
|
use SilverStripe\ORM\DB;
|
||||||
use SilverStripe\Control\HTTPResponse_Exception;
|
use SilverStripe\ORM\HiddenClass;
|
||||||
use SilverStripe\Dev\FunctionalTest;
|
use SilverStripe\ORM\ValidationException;
|
||||||
|
use SilverStripe\Security\Security;
|
||||||
|
use SilverStripe\SiteConfig\SiteConfig;
|
||||||
|
use SilverStripe\Versioned\Versioned;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package cms
|
* @package cms
|
||||||
@ -162,33 +163,6 @@ class CMSMainTest extends FunctionalTest
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Test publication of one of every page type
|
|
||||||
*/
|
|
||||||
public function testPublishOneOfEachKindOfPage()
|
|
||||||
{
|
|
||||||
$this->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.
|
* Test that getCMSFields works on each page type.
|
||||||
* Mostly, this is just checking that the method doesn't return an error
|
* Mostly, this is just checking that the method doesn't return an error
|
||||||
@ -275,6 +249,7 @@ class CMSMainTest extends FunctionalTest
|
|||||||
$page1->delete();
|
$page1->delete();
|
||||||
|
|
||||||
$cmsMain = new CMSMain();
|
$cmsMain = new CMSMain();
|
||||||
|
$cmsMain->setRequest(Controller::curr()->getRequest());
|
||||||
|
|
||||||
// Bad calls
|
// Bad calls
|
||||||
$this->assertNull($cmsMain->getRecord('0'));
|
$this->assertNull($cmsMain->getRecord('0'));
|
||||||
@ -450,6 +425,7 @@ class CMSMainTest extends FunctionalTest
|
|||||||
public function testGetNewItem()
|
public function testGetNewItem()
|
||||||
{
|
{
|
||||||
$controller = new CMSMain();
|
$controller = new CMSMain();
|
||||||
|
$controller->setRequest(Controller::curr()->getRequest());
|
||||||
$id = 'new-Page-0';
|
$id = 'new-Page-0';
|
||||||
|
|
||||||
// Test success
|
// Test success
|
||||||
@ -475,6 +451,7 @@ class CMSMainTest extends FunctionalTest
|
|||||||
public function testGetList()
|
public function testGetList()
|
||||||
{
|
{
|
||||||
$controller = new CMSMain();
|
$controller = new CMSMain();
|
||||||
|
$controller->setRequest(Controller::curr()->getRequest());
|
||||||
|
|
||||||
// Test all pages (stage)
|
// Test all pages (stage)
|
||||||
$pages = $controller->getList()->sort('Title');
|
$pages = $controller->getList()->sort('Title');
|
||||||
@ -567,6 +544,7 @@ class CMSMainTest extends FunctionalTest
|
|||||||
// Get a associated with a fixture page.
|
// Get a associated with a fixture page.
|
||||||
$page = $this->objFromFixture(Page::class, 'page1');
|
$page = $this->objFromFixture(Page::class, 'page1');
|
||||||
$controller = new CMSMain();
|
$controller = new CMSMain();
|
||||||
|
$controller->setRequest(Controller::curr()->getRequest());
|
||||||
$form = $controller->getEditForm($page->ID);
|
$form = $controller->getEditForm($page->ID);
|
||||||
$this->assertInstanceOf("SilverStripe\\Forms\\Form", $form);
|
$this->assertInstanceOf("SilverStripe\\Forms\\Form", $form);
|
||||||
|
|
||||||
@ -583,6 +561,7 @@ class CMSMainTest extends FunctionalTest
|
|||||||
{
|
{
|
||||||
$this->logInWithPermission('ADMIN');
|
$this->logInWithPermission('ADMIN');
|
||||||
$cms = new CMSMain();
|
$cms = new CMSMain();
|
||||||
|
$cms->setRequest(Controller::curr()->getRequest());
|
||||||
$page = new CMSMainTest_ClassA();
|
$page = new CMSMainTest_ClassA();
|
||||||
$page->Title = 'Class A';
|
$page->Title = 'Class A';
|
||||||
$page->write();
|
$page->write();
|
||||||
@ -602,40 +581,3 @@ class CMSMainTest extends FunctionalTest
|
|||||||
$this->assertEquals('Class A', $newPage->Title);
|
$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
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
18
tests/controller/CMSMainTest_ClassA.php
Normal file
18
tests/controller/CMSMainTest_ClassA.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ORM\ValidationException;
|
||||||
|
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
16
tests/controller/CMSMainTest_ClassB.php
Normal file
16
tests/controller/CMSMainTest_ClassB.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ORM\ValidationException;
|
||||||
|
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
9
tests/controller/CMSMainTest_HiddenClass.php
Normal file
9
tests/controller/CMSMainTest_HiddenClass.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ORM\HiddenClass;
|
||||||
|
|
||||||
|
class CMSMainTest_HiddenClass extends Page implements TestOnly, HiddenClass
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
8
tests/controller/CMSMainTest_NotRoot.php
Normal file
8
tests/controller/CMSMainTest_NotRoot.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class CMSMainTest_NotRoot extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
private static $can_be_root = false;
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Forms\FieldGroup;
|
use SilverStripe\Forms\FieldGroup;
|
||||||
use SilverStripe\Forms\FieldList;
|
use SilverStripe\Forms\FieldList;
|
||||||
use SilverStripe\Forms\HiddenField;
|
use SilverStripe\Forms\HiddenField;
|
||||||
@ -54,6 +55,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest
|
|||||||
public function testGetEditForm()
|
public function testGetEditForm()
|
||||||
{
|
{
|
||||||
$controller = new CMSPageHistoryController();
|
$controller = new CMSPageHistoryController();
|
||||||
|
$controller->setRequest(Controller::curr()->getRequest());
|
||||||
|
|
||||||
// should get the latest version which we cannot rollback to
|
// should get the latest version which we cannot rollback to
|
||||||
$form = $controller->getEditForm($this->page->ID);
|
$form = $controller->getEditForm($this->page->ID);
|
||||||
@ -98,7 +100,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest
|
|||||||
*/
|
*/
|
||||||
public function testVersionsForm()
|
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');
|
$form = $this->cssParser()->getBySelector('#Form_VersionsForm');
|
||||||
|
|
||||||
$this->assertEquals(1, count($form));
|
$this->assertEquals(1, count($form));
|
||||||
@ -116,7 +118,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testVersionsFormTableContainsInformation()
|
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');
|
$form = $this->cssParser()->getBySelector('#Form_VersionsForm');
|
||||||
$rows = $form[0]->xpath("fieldset/table/tbody/tr");
|
$rows = $form[0]->xpath("fieldset/table/tbody/tr");
|
||||||
|
|
||||||
@ -142,7 +144,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testVersionsFormSelectsUnpublishedCheckbox()
|
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');
|
$checkbox = $this->cssParser()->getBySelector('#Form_VersionsForm_ShowUnpublished');
|
||||||
|
|
||||||
$this->assertThat($checkbox[0], $this->logicalNot($this->isNull()));
|
$this->assertThat($checkbox[0], $this->logicalNot($this->isNull()));
|
||||||
@ -151,7 +153,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest
|
|||||||
$this->assertThat($checked, $this->logicalNot($this->stringContains('checked')));
|
$this->assertThat($checked, $this->logicalNot($this->stringContains('checked')));
|
||||||
|
|
||||||
// viewing an unpublished
|
// 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');
|
$checkbox = $this->cssParser()->getBySelector('#Form_VersionsForm_ShowUnpublished');
|
||||||
|
|
||||||
$this->assertThat($checkbox[0], $this->logicalNot($this->isNull()));
|
$this->assertThat($checkbox[0], $this->logicalNot($this->isNull()));
|
||||||
@ -161,7 +163,8 @@ class CMSPageHistoryControllerTest extends FunctionalTest
|
|||||||
public function testTransformReadonly()
|
public function testTransformReadonly()
|
||||||
{
|
{
|
||||||
/** @var CMSPageHistoryController $history */
|
/** @var CMSPageHistoryController $history */
|
||||||
$history = singleton(CMSPageHistoryController::class);
|
$history = new CMSPageHistoryController();
|
||||||
|
$history->setRequest(Controller::curr()->getRequest());
|
||||||
|
|
||||||
$fieldList = FieldList::create([
|
$fieldList = FieldList::create([
|
||||||
FieldGroup::create('group', [
|
FieldGroup::create('group', [
|
||||||
|
@ -1,19 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use SilverStripe\Versioned\Versioned;
|
|
||||||
use SilverStripe\CMS\Controllers\ContentController;
|
|
||||||
use SilverStripe\ORM\Search\FulltextSearchable;
|
|
||||||
use SilverStripe\Core\Config\Config;
|
|
||||||
use SilverStripe\Assets\File;
|
use SilverStripe\Assets\File;
|
||||||
|
use SilverStripe\CMS\Controllers\ContentController;
|
||||||
|
use SilverStripe\CMS\Search\ContentControllerSearchExtension;
|
||||||
use SilverStripe\Dev\SapphireTest;
|
use SilverStripe\Dev\SapphireTest;
|
||||||
|
use SilverStripe\ORM\Search\FulltextSearchable;
|
||||||
|
use SilverStripe\Versioned\Versioned;
|
||||||
|
|
||||||
class ContentControllerSearchExtensionTest extends SapphireTest
|
class ContentControllerSearchExtensionTest extends SapphireTest
|
||||||
{
|
{
|
||||||
|
|
||||||
protected static $required_extensions = array(
|
protected static $required_extensions = array(
|
||||||
ContentController::class => [
|
ContentController::class => [
|
||||||
\SilverStripe\CMS\Search\ContentControllerSearchExtension::class,
|
ContentControllerSearchExtension::class,
|
||||||
],
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
public function testCustomSearchFormClassesToTest()
|
public function testCustomSearchFormClassesToTest()
|
||||||
@ -23,19 +22,16 @@ class ContentControllerSearchExtensionTest extends SapphireTest
|
|||||||
$page->Content = 'oh really?';
|
$page->Content = 'oh really?';
|
||||||
$page->write();
|
$page->write();
|
||||||
$page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
$page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
||||||
|
/** @var ContentController|ContentControllerSearchExtension $controller */
|
||||||
$controller = new ContentController($page);
|
$controller = new ContentController($page);
|
||||||
$form = $controller->SearchForm();
|
$form = $controller->SearchForm();
|
||||||
|
$this->assertEquals([ File::class ], $form->getClassesToSearch());
|
||||||
if (get_class($form) == 'SilverStripe\\CMS\\Search\\SearchForm') {
|
|
||||||
$this->assertEquals(array('SilverStripe\\Assets\\File'), $form->getClassesToSearch());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function setUpBeforeClass()
|
public static function setUpBeforeClass()
|
||||||
{
|
{
|
||||||
parent::setUpBeforeClass();
|
parent::setUpBeforeClass();
|
||||||
|
FulltextSearchable::enable(File::class);
|
||||||
FulltextSearchable::enable('SilverStripe\\Assets\\File');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -45,9 +41,7 @@ class ContentControllerSearchExtensionTest extends SapphireTest
|
|||||||
*/
|
*/
|
||||||
public static function tearDownAfterClass()
|
public static function tearDownAfterClass()
|
||||||
{
|
{
|
||||||
|
File::remove_extension(FulltextSearchable::class);
|
||||||
parent::tearDownAfterClass();
|
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');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use SilverStripe\Versioned\Versioned;
|
use SilverStripe\CMS\Controllers\ContentController;
|
||||||
use SilverStripe\CMS\Controllers\RootURLController;
|
use SilverStripe\CMS\Controllers\RootURLController;
|
||||||
use SilverStripe\CMS\Model\SiteTree;
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
use SilverStripe\CMS\Controllers\ContentController;
|
|
||||||
use SilverStripe\Core\Config\Config;
|
|
||||||
use SilverStripe\Control\Director;
|
use SilverStripe\Control\Director;
|
||||||
use SilverStripe\Control\HTTPResponse_Exception;
|
use SilverStripe\Control\HTTPResponse_Exception;
|
||||||
|
use SilverStripe\Core\Config\Config;
|
||||||
use SilverStripe\Dev\FunctionalTest;
|
use SilverStripe\Dev\FunctionalTest;
|
||||||
|
use SilverStripe\Versioned\Versioned;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package cms
|
* @package cms
|
||||||
@ -22,6 +22,12 @@ class ContentControllerTest extends FunctionalTest
|
|||||||
|
|
||||||
protected static $disable_themes = true;
|
protected static $disable_themes = true;
|
||||||
|
|
||||||
|
protected static $extra_dataobjects = [
|
||||||
|
ContentControllerTest_Page::class,
|
||||||
|
ContentControllerTestPage::class,
|
||||||
|
ContentControllerTestPageWithoutController::class,
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
*/
|
*/
|
||||||
@ -119,10 +125,9 @@ class ContentControllerTest extends FunctionalTest
|
|||||||
|
|
||||||
$this->assertEquals('403', $response->getstatusCode());
|
$this->assertEquals('403', $response->getstatusCode());
|
||||||
|
|
||||||
|
|
||||||
// test when user does have permission, should show page title and header ok.
|
// test when user does have permission, should show page title and header ok.
|
||||||
$this->logInWithPermission('ADMIN');
|
$this->logInWithPermission('ADMIN');
|
||||||
$this->assertEquals('200', $this->get('/contact/?stage=Stage')->getstatusCode());
|
$this->assertEquals('200', $this->get('contact/?stage=Stage')->getstatusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testLinkShortcodes()
|
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
8
tests/controller/ContentControllerTestPage.php
Normal file
8
tests/controller/ContentControllerTestPage.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class ContentControllerTestPage extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
16
tests/controller/ContentControllerTestPageController.php
Normal file
16
tests/controller/ContentControllerTestPageController.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class ContentControllerTestPageController extends PageController implements TestOnly
|
||||||
|
{
|
||||||
|
private static $allowed_actions = array(
|
||||||
|
'test',
|
||||||
|
'testwithouttemplate'
|
||||||
|
);
|
||||||
|
|
||||||
|
public function testwithouttemplate()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class ContentControllerTestPageWithoutController extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
8
tests/controller/ContentControllerTest_Page.php
Normal file
8
tests/controller/ContentControllerTest_Page.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class ContentControllerTest_Page extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
21
tests/controller/ContentControllerTest_PageController.php
Normal file
21
tests/controller/ContentControllerTest_PageController.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class ContentControllerTest_PageController extends PageController implements TestOnly
|
||||||
|
{
|
||||||
|
|
||||||
|
private static $allowed_actions = array(
|
||||||
|
'second_index'
|
||||||
|
);
|
||||||
|
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return $this->Title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function second_index()
|
||||||
|
{
|
||||||
|
return $this->index();
|
||||||
|
}
|
||||||
|
}
|
@ -57,37 +57,3 @@ class SilverStripeNavigatorTest extends SapphireTest
|
|||||||
$this->assertContains('SilverStripeNavigatorTest_ProtectedTestItem', $classes);
|
$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');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem;
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\Security\Permission;
|
||||||
|
use SilverStripe\Security\Security;
|
||||||
|
|
||||||
|
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');
|
||||||
|
}
|
||||||
|
}
|
17
tests/controller/SilverStripeNavigatorTest_TestItem.php
Normal file
17
tests/controller/SilverStripeNavigatorTest_TestItem.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem;
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SilverStripeNavigatorTest_TestItem extends SilverStripeNavigatorItem implements TestOnly
|
||||||
|
{
|
||||||
|
public function getTitle()
|
||||||
|
{
|
||||||
|
return self::class;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHTML()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -1,16 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Assets\File;
|
||||||
|
use SilverStripe\Assets\Tests\Storage\AssetStoreTest\TestAssetStore;
|
||||||
|
use SilverStripe\Dev\SapphireTest;
|
||||||
use SilverStripe\Security\Security;
|
use SilverStripe\Security\Security;
|
||||||
use SilverStripe\Versioned\Versioned;
|
use SilverStripe\Versioned\Versioned;
|
||||||
use SilverStripe\Assets\File;
|
|
||||||
use SilverStripe\Control\Session;
|
|
||||||
use SilverStripe\View\Parsers\ShortcodeParser;
|
use SilverStripe\View\Parsers\ShortcodeParser;
|
||||||
use SilverStripe\Dev\SapphireTest;
|
|
||||||
use SilverStripe\Assets\Tests\Storage\AssetStoreTest\TestAssetStore;
|
|
||||||
|
|
||||||
class ErrorPageFileExtensionTest extends SapphireTest
|
class ErrorPageFileExtensionTest extends SapphireTest
|
||||||
{
|
{
|
||||||
|
|
||||||
protected static $fixture_file = 'ErrorPageTest.yml';
|
protected static $fixture_file = 'ErrorPageTest.yml';
|
||||||
|
|
||||||
protected $versionedMode = null;
|
protected $versionedMode = null;
|
||||||
|
@ -100,12 +100,3 @@ class RedirectorPageTest extends FunctionalTest
|
|||||||
RedirectorPageController::remove_extension('RedirectorPageTest_RedirectExtension');
|
RedirectorPageController::remove_extension('RedirectorPageTest_RedirectExtension');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class RedirectorPageTest_RedirectExtension extends Extension implements TestOnly
|
|
||||||
{
|
|
||||||
|
|
||||||
public function onBeforeInit()
|
|
||||||
{
|
|
||||||
$this->owner->redirect('/foo');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
13
tests/model/RedirectorPageTest_RedirectExtension.php
Normal file
13
tests/model/RedirectorPageTest_RedirectExtension.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Core\Extension;
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class RedirectorPageTest_RedirectExtension extends Extension implements TestOnly
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onBeforeInit()
|
||||||
|
{
|
||||||
|
$this->owner->redirect('/foo');
|
||||||
|
}
|
||||||
|
}
|
@ -28,10 +28,6 @@ class SiteTreeActionsTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testActionsReadonly()
|
public function testActionsReadonly()
|
||||||
{
|
{
|
||||||
if (class_exists('SiteTreeCMSWorkflow')) {
|
|
||||||
$this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Publish record
|
// Publish record
|
||||||
$this->logInWithPermission('ADMIN');
|
$this->logInWithPermission('ADMIN');
|
||||||
$page = new SiteTreeActionsTest_Page();
|
$page = new SiteTreeActionsTest_Page();
|
||||||
@ -58,10 +54,6 @@ class SiteTreeActionsTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testActionsNoDeletePublishedRecord()
|
public function testActionsNoDeletePublishedRecord()
|
||||||
{
|
{
|
||||||
if (class_exists('SiteTreeCMSWorkflow')) {
|
|
||||||
$this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->logInWithPermission('ADMIN');
|
$this->logInWithPermission('ADMIN');
|
||||||
|
|
||||||
$page = new SiteTreeActionsTest_Page();
|
$page = new SiteTreeActionsTest_Page();
|
||||||
@ -92,10 +84,6 @@ class SiteTreeActionsTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testActionsPublishedRecord()
|
public function testActionsPublishedRecord()
|
||||||
{
|
{
|
||||||
if (class_exists('SiteTreeCMSWorkflow')) {
|
|
||||||
$this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
|
|
||||||
}
|
|
||||||
|
|
||||||
$author = $this->objFromFixture(Member::class, 'cmseditor');
|
$author = $this->objFromFixture(Member::class, 'cmseditor');
|
||||||
Security::setCurrentUser($author);
|
Security::setCurrentUser($author);
|
||||||
|
|
||||||
@ -121,10 +109,6 @@ class SiteTreeActionsTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testActionsDeletedFromStageRecord()
|
public function testActionsDeletedFromStageRecord()
|
||||||
{
|
{
|
||||||
if (class_exists('SiteTreeCMSWorkflow')) {
|
|
||||||
$this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
|
|
||||||
}
|
|
||||||
|
|
||||||
$author = $this->objFromFixture(Member::class, 'cmseditor');
|
$author = $this->objFromFixture(Member::class, 'cmseditor');
|
||||||
Security::setCurrentUser($author);
|
Security::setCurrentUser($author);
|
||||||
|
|
||||||
@ -154,10 +138,6 @@ class SiteTreeActionsTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testActionsChangedOnStageRecord()
|
public function testActionsChangedOnStageRecord()
|
||||||
{
|
{
|
||||||
if (class_exists('SiteTreeCMSWorkflow')) {
|
|
||||||
$this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
|
|
||||||
}
|
|
||||||
|
|
||||||
$author = $this->objFromFixture(Member::class, 'cmseditor');
|
$author = $this->objFromFixture(Member::class, 'cmseditor');
|
||||||
Security::setCurrentUser($author);
|
Security::setCurrentUser($author);
|
||||||
|
|
||||||
@ -185,10 +165,6 @@ class SiteTreeActionsTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testActionsViewingOldVersion()
|
public function testActionsViewingOldVersion()
|
||||||
{
|
{
|
||||||
if (class_exists('SiteTreeCMSWorkflow')) {
|
|
||||||
$this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
|
|
||||||
}
|
|
||||||
|
|
||||||
$p = new Page();
|
$p = new Page();
|
||||||
$p->Content = 'test page first version';
|
$p->Content = 'test page first version';
|
||||||
$p->write();
|
$p->write();
|
||||||
@ -207,16 +183,3 @@ class SiteTreeActionsTest extends FunctionalTest
|
|||||||
$this->assertNotNull($actions->dataFieldByName('action_rollback'));
|
$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');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
17
tests/model/SiteTreeActionsTest_Page.php
Normal file
17
tests/model/SiteTreeActionsTest_Page.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\Security\Permission;
|
||||||
|
|
||||||
|
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');
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
use SilverStripe\Versioned\Versioned;
|
use SilverStripe\Versioned\Versioned;
|
||||||
use SilverStripe\ORM\DataExtension;
|
use SilverStripe\ORM\DataExtension;
|
||||||
use SilverStripe\Control\HTTP;
|
use SilverStripe\Control\HTTP;
|
||||||
@ -16,9 +17,11 @@ class SiteTreeBacklinksTest extends SapphireTest
|
|||||||
{
|
{
|
||||||
protected static $fixture_file = "SiteTreeBacklinksTest.yml";
|
protected static $fixture_file = "SiteTreeBacklinksTest.yml";
|
||||||
|
|
||||||
protected static $required_extensions = array(
|
protected static $required_extensions = [
|
||||||
'SilverStripe\\CMS\\Model\\SiteTree' => array('SiteTreeBacklinksTest_DOD'),
|
SiteTree::class => [
|
||||||
);
|
SiteTreeBacklinksTest_DOD::class
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
@ -96,8 +99,6 @@ class SiteTreeBacklinksTest extends SapphireTest
|
|||||||
|
|
||||||
public function testChangingUrlOnLiveSiteRewritesLink()
|
public function testChangingUrlOnLiveSiteRewritesLink()
|
||||||
{
|
{
|
||||||
$this->markTestSkipped("Test disabled until versioned many_many implemented");
|
|
||||||
|
|
||||||
// publish page 1 & 3
|
// publish page 1 & 3
|
||||||
$page1 = $this->objFromFixture('Page', 'page1');
|
$page1 = $this->objFromFixture('Page', 'page1');
|
||||||
$page3 = $this->objFromFixture('Page', 'page3');
|
$page3 = $this->objFromFixture('Page', 'page3');
|
||||||
@ -130,8 +131,6 @@ class SiteTreeBacklinksTest extends SapphireTest
|
|||||||
|
|
||||||
public function testPublishingPageWithModifiedUrlRewritesLink()
|
public function testPublishingPageWithModifiedUrlRewritesLink()
|
||||||
{
|
{
|
||||||
$this->markTestSkipped("Test disabled until versioned many_many implemented");
|
|
||||||
|
|
||||||
// publish page 1 & 3
|
// publish page 1 & 3
|
||||||
$page1 = $this->objFromFixture('Page', 'page1');
|
$page1 = $this->objFromFixture('Page', 'page1');
|
||||||
$page3 = $this->objFromFixture('Page', 'page3');
|
$page3 = $this->objFromFixture('Page', 'page3');
|
||||||
@ -168,8 +167,6 @@ class SiteTreeBacklinksTest extends SapphireTest
|
|||||||
|
|
||||||
public function testPublishingPageWithModifiedLinksRewritesLinks()
|
public function testPublishingPageWithModifiedLinksRewritesLinks()
|
||||||
{
|
{
|
||||||
$this->markTestSkipped("Test disabled until versioned many_many implemented");
|
|
||||||
|
|
||||||
// publish page 1 & 3
|
// publish page 1 & 3
|
||||||
$page1 = $this->objFromFixture('Page', 'page1');
|
$page1 = $this->objFromFixture('Page', 'page1');
|
||||||
$page3 = $this->objFromFixture('Page', 'page3');
|
$page3 = $this->objFromFixture('Page', 'page3');
|
||||||
@ -211,7 +208,9 @@ class SiteTreeBacklinksTest extends SapphireTest
|
|||||||
|
|
||||||
public function testLinkTrackingOnExtraContentFields()
|
public function testLinkTrackingOnExtraContentFields()
|
||||||
{
|
{
|
||||||
|
/** @var Page $page1 */
|
||||||
$page1 = $this->objFromFixture('Page', 'page1');
|
$page1 = $this->objFromFixture('Page', 'page1');
|
||||||
|
/** @var Page $page2 */
|
||||||
$page2 = $this->objFromFixture('Page', 'page2');
|
$page2 = $this->objFromFixture('Page', 'page2');
|
||||||
$page1->publishRecursive();
|
$page1->publishRecursive();
|
||||||
$page2->publishRecursive();
|
$page2->publishRecursive();
|
||||||
@ -236,9 +235,6 @@ class SiteTreeBacklinksTest extends SapphireTest
|
|||||||
$page2 = $this->objFromFixture('Page', 'page2');
|
$page2 = $this->objFromFixture('Page', 'page2');
|
||||||
$this->assertEquals('<p><a href="'.Director::baseURL().'page1-new-url/">Testing page 1 link</a></p>', $page2->obj('ExtraContent')->forTemplate());
|
$this->assertEquals('<p><a href="'.Director::baseURL().'page1-new-url/">Testing page 1 link</a></p>', $page2->obj('ExtraContent')->forTemplate());
|
||||||
|
|
||||||
// @todo - Implement versioned many_many
|
|
||||||
$this->markTestSkipped("Test disabled until versioned many_many implemented");
|
|
||||||
|
|
||||||
// confirm that published link hasn't
|
// confirm that published link hasn't
|
||||||
$page2Live = Versioned::get_one_by_stage("Page", "Live", "\"SiteTree\".\"ID\" = $page2->ID");
|
$page2Live = Versioned::get_one_by_stage("Page", "Live", "\"SiteTree\".\"ID\" = $page2->ID");
|
||||||
Versioned::set_stage(Versioned::LIVE);
|
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");
|
$page2Live = Versioned::get_one_by_stage("Page", "Live", "\"SiteTree\".\"ID\" = $page2->ID");
|
||||||
$this->assertEquals('<p><a href="'.Director::baseURL().'page1-new-url/">Testing page 1 link</a></p>', $page2Live->obj('ExtraContent')->forTemplate());
|
$this->assertEquals('<p><a href="'.Director::baseURL().'page1-new-url/">Testing page 1 link</a></p>', $page2Live->obj('ExtraContent')->forTemplate());
|
||||||
|
|
||||||
|
// Edit draft again
|
||||||
// remove hyperlink to page 1
|
Versioned::set_stage(Versioned::DRAFT);
|
||||||
$page2->ExtraContent = '<p>No links anymore!</p>';
|
$page2->ExtraContent = '<p>No links anymore!</p>';
|
||||||
$page2->write();
|
$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');
|
$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"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
18
tests/model/SiteTreeBacklinksTest_DOD.php
Normal file
18
tests/model/SiteTreeBacklinksTest_DOD.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\Forms\FieldList;
|
||||||
|
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
||||||
|
use SilverStripe\ORM\DataExtension;
|
||||||
|
|
||||||
|
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"));
|
||||||
|
}
|
||||||
|
}
|
@ -153,8 +153,6 @@ class SiteTreeBrokenLinksTest extends SapphireTest
|
|||||||
|
|
||||||
public function testPublishingSourceBeforeDestHasBrokenLink()
|
public function testPublishingSourceBeforeDestHasBrokenLink()
|
||||||
{
|
{
|
||||||
$this->markTestSkipped("Test disabled until versioned many_many implemented");
|
|
||||||
|
|
||||||
$this->logInWithPermission('ADMIN');
|
$this->logInWithPermission('ADMIN');
|
||||||
|
|
||||||
// Set up two draft pages with a link from content -> about
|
// 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.
|
// Publish the source of the link, while the dest is still unpublished.
|
||||||
$linkSrc->publishRecursive();
|
$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(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());
|
WHERE \"ID\" = $linkSrc->ID")->value());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testRestoreFixesBrokenLinks()
|
public function testRestoreFixesBrokenLinks()
|
||||||
{
|
{
|
||||||
$this->markTestSkipped("Test disabled until versioned many_many implemented");
|
|
||||||
// Create page and virtual page
|
// Create page and virtual page
|
||||||
$p = new Page();
|
$p = new Page();
|
||||||
$p->Title = "source";
|
$p->Title = "source";
|
||||||
@ -210,43 +209,44 @@ class SiteTreeBrokenLinksTest extends SapphireTest
|
|||||||
$this->assertFalse($vp->HasBrokenLink);
|
$this->assertFalse($vp->HasBrokenLink);
|
||||||
$this->assertFalse($rp->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();
|
$p->doUnpublish();
|
||||||
$p2Live = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', 'Live', '"SiteTree"."ID" = ' . $p2->ID);
|
$p2Live = Versioned::get_one_by_stage(SiteTree::class, 'Live', '"SiteTree"."ID" = ' . $p2->ID);
|
||||||
$rpLive = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', 'Live', '"SiteTree"."ID" = ' . $rp->ID);
|
$rpLive = Versioned::get_one_by_stage(SiteTree::class, 'Live', '"SiteTree"."ID" = ' . $rp->ID);
|
||||||
$this->assertEquals(1, $p2Live->HasBrokenLink);
|
$this->assertEquals(0, $p2Live->HasBrokenLink);
|
||||||
$this->assertEquals(1, $rpLive->HasBrokenLink);
|
$this->assertEquals(0, $rpLive->HasBrokenLink);
|
||||||
|
|
||||||
// Delete the source page, confirm that the VP, RP and page 2 have broken links on draft
|
// Delete the source page, confirm that the VP, RP and page 2 have broken links on draft
|
||||||
$p->delete();
|
$p->delete();
|
||||||
$vp->flushCache();
|
$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->flushCache();
|
||||||
$p2 = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $p2->ID);
|
$p2 = DataObject::get_by_id(SiteTree::class, $p2->ID);
|
||||||
$rp->flushCache();
|
$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, $p2->HasBrokenLink);
|
||||||
$this->assertEquals(1, $vp->HasBrokenLink);
|
$this->assertEquals(1, $vp->HasBrokenLink);
|
||||||
$this->assertEquals(1, $rp->HasBrokenLink);
|
$this->assertEquals(1, $rp->HasBrokenLink);
|
||||||
|
|
||||||
// Restore the page to stage, confirm that this fixes the links
|
// 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();
|
$p->doRestoreToStage();
|
||||||
|
|
||||||
$p2->flushCache();
|
$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->flushCache();
|
||||||
$vp = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $vp->ID);
|
$vp = DataObject::get_by_id(SiteTree::class, $vp->ID);
|
||||||
$rp->flushCache();
|
$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)$p2->HasBrokenLink);
|
||||||
$this->assertFalse((bool)$vp->HasBrokenLink);
|
$this->assertFalse((bool)$vp->HasBrokenLink);
|
||||||
$this->assertFalse((bool)$rp->HasBrokenLink);
|
$this->assertFalse((bool)$rp->HasBrokenLink);
|
||||||
|
|
||||||
// Publish and confirm that the p2 and RP broken links are fixed on published
|
// Publish and confirm that the p2 and RP broken links are fixed on published
|
||||||
$this->assertTrue($p->publishRecursive());
|
$this->assertTrue($p->publishRecursive());
|
||||||
$p2Live = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', 'Live', '"SiteTree"."ID" = ' . $p2->ID);
|
$p2Live = Versioned::get_one_by_stage(SiteTree::class, 'Live', '"SiteTree"."ID" = ' . $p2->ID);
|
||||||
$rpLive = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', 'Live', '"SiteTree"."ID" = ' . $rp->ID);
|
$rpLive = Versioned::get_one_by_stage(SiteTree::class, 'Live', '"SiteTree"."ID" = ' . $rp->ID);
|
||||||
$this->assertFalse((bool)$p2Live->HasBrokenLink);
|
$this->assertFalse((bool)$p2Live->HasBrokenLink);
|
||||||
$this->assertFalse((bool)$rpLive->HasBrokenLink);
|
$this->assertFalse((bool)$rpLive->HasBrokenLink);
|
||||||
}
|
}
|
||||||
@ -290,25 +290,25 @@ class SiteTreeBrokenLinksTest extends SapphireTest
|
|||||||
$p->delete();
|
$p->delete();
|
||||||
|
|
||||||
$vp->flushCache();
|
$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->flushCache();
|
||||||
$p2 = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $p2->ID);
|
$p2 = DataObject::get_by_id(SiteTree::class, $p2->ID);
|
||||||
$rp->flushCache();
|
$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, $p2->HasBrokenLink);
|
||||||
$this->assertEquals(1, $vp->HasBrokenLink);
|
$this->assertEquals(1, $vp->HasBrokenLink);
|
||||||
$this->assertEquals(1, $rp->HasBrokenLink);
|
$this->assertEquals(1, $rp->HasBrokenLink);
|
||||||
|
|
||||||
// Call doRevertToLive and confirm that broken links are restored
|
// 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();
|
$pLive->doRevertToLive();
|
||||||
|
|
||||||
$p2->flushCache();
|
$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->flushCache();
|
||||||
$vp = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $vp->ID);
|
$vp = DataObject::get_by_id(SiteTree::class, $vp->ID);
|
||||||
$rp->flushCache();
|
$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)$p2->HasBrokenLink);
|
||||||
$this->assertFalse((bool)$vp->HasBrokenLink);
|
$this->assertFalse((bool)$vp->HasBrokenLink);
|
||||||
$this->assertFalse((bool)$rp->HasBrokenLink);
|
$this->assertFalse((bool)$rp->HasBrokenLink);
|
||||||
|
@ -41,40 +41,39 @@ class SiteTreePermissionsTest extends FunctionalTest
|
|||||||
$this->useDraftSite(false);
|
$this->useDraftSite(false);
|
||||||
$this->autoFollowRedirection = false;
|
$this->autoFollowRedirection = false;
|
||||||
|
|
||||||
$page = $this->objFromFixture('Page', 'draftOnlyPage');
|
/** @var Page $draftOnlyPage */
|
||||||
|
$draftOnlyPage = $this->objFromFixture('Page', 'draftOnlyPage');
|
||||||
|
$this->logOut();
|
||||||
|
|
||||||
if ($member = Security::getCurrentUser()) {
|
$response = $this->get($draftOnlyPage->URLSegment . '?stage=Live');
|
||||||
Security::setCurrentUser(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
$response = $this->get($page->URLSegment . '?stage=Live');
|
|
||||||
$this->assertEquals($response->getStatusCode(), '404');
|
$this->assertEquals($response->getStatusCode(), '404');
|
||||||
|
|
||||||
$response = $this->get($page->URLSegment . '?stage=');
|
$response = $this->get($draftOnlyPage->URLSegment);
|
||||||
$this->assertEquals($response->getStatusCode(), '404');
|
$this->assertEquals($response->getStatusCode(), '404');
|
||||||
|
|
||||||
// should be prompted for a login
|
// should be prompted for a login
|
||||||
try {
|
try {
|
||||||
$response = $this->get($page->URLSegment . '?stage=Stage');
|
$response = $this->get($draftOnlyPage->URLSegment . '?stage=Stage');
|
||||||
} catch (HTTPResponse_Exception $responseException) {
|
} catch (HTTPResponse_Exception $responseException) {
|
||||||
$response = $responseException->getResponse();
|
$response = $responseException->getResponse();
|
||||||
}
|
}
|
||||||
$this->assertEquals($response->getStatusCode(), '302');
|
$this->assertEquals($response->getStatusCode(), '302');
|
||||||
$this->assertContains(
|
$this->assertContains(
|
||||||
Config::inst()->get('SilverStripe\\Security\\Security', 'login_url'),
|
Security::config()->get('login_url'),
|
||||||
$response->getHeader('Location')
|
$response->getHeader('Location')
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->logInWithPermission('ADMIN');
|
$this->logInWithPermission('ADMIN');
|
||||||
|
|
||||||
$response = $this->get($page->URLSegment . '?stage=Live');
|
$response = $this->get($draftOnlyPage->URLSegment . '?stage=Live');
|
||||||
$this->assertEquals($response->getStatusCode(), '404');
|
$this->assertEquals('404', $response->getStatusCode());
|
||||||
|
|
||||||
$response = $this->get($page->URLSegment . '?stage=Stage');
|
$response = $this->get($draftOnlyPage->URLSegment . '?stage=Stage');
|
||||||
$this->assertEquals($response->getStatusCode(), '200');
|
$this->assertEquals('200', $response->getStatusCode());
|
||||||
|
|
||||||
$response = $this->get($page->URLSegment . '?stage=');
|
// Stage is remembered from last request
|
||||||
$this->assertEquals($response->getStatusCode(), '404');
|
$response = $this->get($draftOnlyPage->URLSegment);
|
||||||
|
$this->assertEquals('200', $response->getStatusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testPermissionCheckingWorksOnDeletedPages()
|
public function testPermissionCheckingWorksOnDeletedPages()
|
||||||
@ -87,7 +86,7 @@ class SiteTreePermissionsTest extends FunctionalTest
|
|||||||
$page->delete();
|
$page->delete();
|
||||||
|
|
||||||
// Re-fetch the page from the live site
|
// 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
|
// subadmin has edit rights on that page
|
||||||
$member = $this->objFromFixture(Member::class, 'subadmin');
|
$member = $this->objFromFixture(Member::class, 'subadmin');
|
||||||
@ -137,7 +136,7 @@ class SiteTreePermissionsTest extends FunctionalTest
|
|||||||
$page->delete();
|
$page->delete();
|
||||||
|
|
||||||
// We'll need to resurrect the page from the version cache to test this case
|
// 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
|
// subadmin had edit rights on that page, but now it's gone
|
||||||
$member = $this->objFromFixture(Member::class, 'subadmin');
|
$member = $this->objFromFixture(Member::class, 'subadmin');
|
||||||
|
@ -1432,192 +1432,3 @@ class SiteTreeTest extends SapphireTest
|
|||||||
$this->assertSame('SiteTreeTest_LegacyControllerName_Controller', $class->getControllerName());
|
$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
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
10
tests/model/SiteTreeTest_AdminDenied.php
Normal file
10
tests/model/SiteTreeTest_AdminDenied.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_AdminDenied extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
private static $extensions = array(
|
||||||
|
'SiteTreeTest_AdminDeniedExtension'
|
||||||
|
);
|
||||||
|
}
|
35
tests/model/SiteTreeTest_AdminDeniedExtension.php
Normal file
35
tests/model/SiteTreeTest_AdminDeniedExtension.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ORM\DataExtension;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
}
|
15
tests/model/SiteTreeTest_ClassA.php
Normal file
15
tests/model/SiteTreeTest_ClassA.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_ClassA extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
private static $need_permission = [
|
||||||
|
'ADMIN',
|
||||||
|
'CMS_ACCESS_CMSMain'
|
||||||
|
];
|
||||||
|
|
||||||
|
private static $allowed_children = [
|
||||||
|
SiteTreeTest_ClassB::class
|
||||||
|
];
|
||||||
|
}
|
9
tests/model/SiteTreeTest_ClassB.php
Normal file
9
tests/model/SiteTreeTest_ClassB.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_ClassB extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
// Also allowed subclasses
|
||||||
|
private static $allowed_children = array(SiteTreeTest_ClassC::class);
|
||||||
|
}
|
8
tests/model/SiteTreeTest_ClassC.php
Normal file
8
tests/model/SiteTreeTest_ClassC.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_ClassC extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
private static $allowed_children = array();
|
||||||
|
}
|
9
tests/model/SiteTreeTest_ClassCext.php
Normal file
9
tests/model/SiteTreeTest_ClassCext.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_ClassCext extends SiteTreeTest_ClassC implements TestOnly
|
||||||
|
{
|
||||||
|
// Override SiteTreeTest_ClassC definitions
|
||||||
|
private static $allowed_children = array(SiteTreeTest_ClassB::class);
|
||||||
|
}
|
23
tests/model/SiteTreeTest_ClassD.php
Normal file
23
tests/model/SiteTreeTest_ClassD.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
9
tests/model/SiteTreeTest_ClassE.php
Normal file
9
tests/model/SiteTreeTest_ClassE.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ORM\HiddenClass;
|
||||||
|
|
||||||
|
class SiteTreeTest_ClassE extends Page implements TestOnly, HiddenClass
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
8
tests/model/SiteTreeTest_Conflicted.php
Normal file
8
tests/model/SiteTreeTest_Conflicted.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_Conflicted extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
20
tests/model/SiteTreeTest_ConflictedController.php
Normal file
20
tests/model/SiteTreeTest_ConflictedController.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
tests/model/SiteTreeTest_Extension.php
Normal file
12
tests/model/SiteTreeTest_Extension.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ORM\DataExtension;
|
||||||
|
|
||||||
|
class SiteTreeTest_Extension extends DataExtension implements TestOnly
|
||||||
|
{
|
||||||
|
public function augmentValidURLSegment()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
14
tests/model/SiteTreeTest_ExtensionA.php
Normal file
14
tests/model/SiteTreeTest_ExtensionA.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\CMS\Model\SiteTreeExtension;
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_ExtensionA extends SiteTreeExtension implements TestOnly
|
||||||
|
{
|
||||||
|
public static $can_publish = true;
|
||||||
|
|
||||||
|
public function canPublish($member)
|
||||||
|
{
|
||||||
|
return static::$can_publish;
|
||||||
|
}
|
||||||
|
}
|
14
tests/model/SiteTreeTest_ExtensionB.php
Normal file
14
tests/model/SiteTreeTest_ExtensionB.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\CMS\Model\SiteTreeExtension;
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_ExtensionB extends SiteTreeExtension implements TestOnly
|
||||||
|
{
|
||||||
|
public static $can_publish = true;
|
||||||
|
|
||||||
|
public function canPublish($member)
|
||||||
|
{
|
||||||
|
return static::$can_publish;
|
||||||
|
}
|
||||||
|
}
|
11
tests/model/SiteTreeTest_LegacyControllerName.php
Normal file
11
tests/model/SiteTreeTest_LegacyControllerName.php
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An empty SiteTree instance with a controller to test that legacy controller names can still be loaded
|
||||||
|
*/
|
||||||
|
class SiteTreeTest_LegacyControllerName extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_LegacyControllerName_Controller extends PageController implements TestOnly
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
8
tests/model/SiteTreeTest_NotRoot.php
Normal file
8
tests/model/SiteTreeTest_NotRoot.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_NotRoot extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
private static $can_be_root = false;
|
||||||
|
}
|
12
tests/model/SiteTreeTest_NullHtmlCleaner.php
Normal file
12
tests/model/SiteTreeTest_NullHtmlCleaner.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\View\Parsers\HTMLCleaner;
|
||||||
|
|
||||||
|
class SiteTreeTest_NullHtmlCleaner extends HTMLCleaner implements TestOnly
|
||||||
|
{
|
||||||
|
public function cleanHTML($html)
|
||||||
|
{
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
}
|
8
tests/model/SiteTreeTest_PageNode.php
Normal file
8
tests/model/SiteTreeTest_PageNode.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_PageNode extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
7
tests/model/SiteTreeTest_PageNodeController.php
Normal file
7
tests/model/SiteTreeTest_PageNodeController.php
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_PageNodeController extends PageController implements TestOnly
|
||||||
|
{
|
||||||
|
}
|
14
tests/model/SiteTreeTest_StageStatusInherit.php
Normal file
14
tests/model/SiteTreeTest_StageStatusInherit.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class SiteTreeTest_StageStatusInherit extends SiteTree implements TestOnly
|
||||||
|
{
|
||||||
|
public function getStatusFlags($cached = true)
|
||||||
|
{
|
||||||
|
$flags = parent::getStatusFlags($cached);
|
||||||
|
$flags['inherited-class'] = "InheritedTitle";
|
||||||
|
return $flags;
|
||||||
|
}
|
||||||
|
}
|
@ -617,10 +617,6 @@ class VirtualPageTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testVirtualPagePointingToRedirectorPage()
|
public function testVirtualPagePointingToRedirectorPage()
|
||||||
{
|
{
|
||||||
if (!class_exists('SilverStripe\\CMS\\Model\\RedirectorPage')) {
|
|
||||||
$this->markTestSkipped('RedirectorPage required');
|
|
||||||
}
|
|
||||||
|
|
||||||
$rp = new RedirectorPage(array('ExternalURL' => 'http://google.com', 'RedirectionType' => 'External'));
|
$rp = new RedirectorPage(array('ExternalURL' => 'http://google.com', 'RedirectionType' => 'External'));
|
||||||
$rp->write();
|
$rp->write();
|
||||||
$rp->publishRecursive();
|
$rp->publishRecursive();
|
||||||
@ -653,82 +649,3 @@ class VirtualPageTest extends FunctionalTest
|
|||||||
$this->assertContains('testaction', $controller->allowedActions());
|
$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'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
20
tests/model/VirtualPageTest_ClassA.php
Normal file
20
tests/model/VirtualPageTest_ClassA.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
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';
|
||||||
|
}
|
||||||
|
}
|
15
tests/model/VirtualPageTest_ClassAController.php
Normal file
15
tests/model/VirtualPageTest_ClassAController.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class VirtualPageTest_ClassAController extends PageController implements TestOnly
|
||||||
|
{
|
||||||
|
private static $allowed_actions = [
|
||||||
|
'testaction'
|
||||||
|
];
|
||||||
|
|
||||||
|
public function testMethod()
|
||||||
|
{
|
||||||
|
return 'hello';
|
||||||
|
}
|
||||||
|
}
|
8
tests/model/VirtualPageTest_ClassB.php
Normal file
8
tests/model/VirtualPageTest_ClassB.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class VirtualPageTest_ClassB extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
private static $allowed_children = array('VirtualPageTest_ClassC');
|
||||||
|
}
|
8
tests/model/VirtualPageTest_ClassC.php
Normal file
8
tests/model/VirtualPageTest_ClassC.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class VirtualPageTest_ClassC extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
private static $allowed_children = array();
|
||||||
|
}
|
8
tests/model/VirtualPageTest_NotRoot.php
Normal file
8
tests/model/VirtualPageTest_NotRoot.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class VirtualPageTest_NotRoot extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
private static $can_be_root = false;
|
||||||
|
}
|
14
tests/model/VirtualPageTest_PageExtension.php
Normal file
14
tests/model/VirtualPageTest_PageExtension.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ORM\DataExtension;
|
||||||
|
|
||||||
|
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',
|
||||||
|
);
|
||||||
|
}
|
12
tests/model/VirtualPageTest_PageWithAllowedChildren.php
Normal file
12
tests/model/VirtualPageTest_PageWithAllowedChildren.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\CMS\Model\VirtualPage;
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class VirtualPageTest_PageWithAllowedChildren extends Page implements TestOnly
|
||||||
|
{
|
||||||
|
private static $allowed_children = array(
|
||||||
|
VirtualPageTest_ClassA::class,
|
||||||
|
VirtualPage::class,
|
||||||
|
);
|
||||||
|
}
|
12
tests/model/VirtualPageTest_TestDBField.php
Normal file
12
tests/model/VirtualPageTest_TestDBField.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ORM\FieldType\DBVarchar;
|
||||||
|
|
||||||
|
class VirtualPageTest_TestDBField extends DBVarchar implements TestOnly
|
||||||
|
{
|
||||||
|
public function forTemplate()
|
||||||
|
{
|
||||||
|
return strtoupper($this->XML());
|
||||||
|
}
|
||||||
|
}
|
11
tests/model/VirtualPageTest_VirtualPageSub.php
Normal file
11
tests/model/VirtualPageTest_VirtualPageSub.php
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use SilverStripe\CMS\Model\VirtualPage;
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class VirtualPageTest_VirtualPageSub extends VirtualPage implements TestOnly
|
||||||
|
{
|
||||||
|
private static $db = array(
|
||||||
|
'MyProperty' => 'Varchar',
|
||||||
|
);
|
||||||
|
}
|
@ -51,10 +51,10 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
{
|
{
|
||||||
// HACK Postgres doesn't refresh TSearch indexes when the schema changes after CREATE TABLE
|
// HACK Postgres doesn't refresh TSearch indexes when the schema changes after CREATE TABLE
|
||||||
// MySQL will need a different table type
|
// MySQL will need a different table type
|
||||||
static::kill_temp_db();
|
static::$tempDB->kill();
|
||||||
Config::modify();
|
Config::modify();
|
||||||
FulltextSearchable::enable();
|
FulltextSearchable::enable();
|
||||||
static::create_temp_db();
|
static::$tempDB->build();
|
||||||
static::resetDBSchema(true);
|
static::resetDBSchema(true);
|
||||||
parent::setUpBeforeClass();
|
parent::setUpBeforeClass();
|
||||||
}
|
}
|
||||||
@ -116,9 +116,11 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
$request = new HTTPRequest('GET', 'search', ['Search'=>'publicPublishedPage']);
|
$request = new HTTPRequest('GET', 'search', ['Search'=>'publicPublishedPage']);
|
||||||
|
$request->setSession($this->session());
|
||||||
$this->mockController->setRequest($request);
|
$this->mockController->setRequest($request);
|
||||||
$sf = new SearchForm($this->mockController);
|
$sf = new SearchForm($this->mockController);
|
||||||
|
|
||||||
|
/** @var SiteTree $publishedPage */
|
||||||
$publishedPage = $this->objFromFixture(SiteTree::class, 'publicPublishedPage');
|
$publishedPage = $this->objFromFixture(SiteTree::class, 'publicPublishedPage');
|
||||||
$publishedPage->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
$publishedPage->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
||||||
|
|
||||||
@ -142,9 +144,11 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
$request = new HTTPRequest('GET', 'search', ['Search'=>'"finding butterflies"']);
|
$request = new HTTPRequest('GET', 'search', ['Search'=>'"finding butterflies"']);
|
||||||
|
$request->setSession($this->session());
|
||||||
$this->mockController->setRequest($request);
|
$this->mockController->setRequest($request);
|
||||||
$sf = new SearchForm($this->mockController);
|
$sf = new SearchForm($this->mockController);
|
||||||
|
|
||||||
|
/** @var SiteTree $publishedPage */
|
||||||
$publishedPage = $this->objFromFixture(SiteTree::class, 'publicPublishedPage');
|
$publishedPage = $this->objFromFixture(SiteTree::class, 'publicPublishedPage');
|
||||||
$publishedPage->Title = "finding butterflies";
|
$publishedPage->Title = "finding butterflies";
|
||||||
$publishedPage->write();
|
$publishedPage->write();
|
||||||
@ -169,6 +173,7 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
$request = new HTTPRequest('GET', 'search', ['Search'=>'publicUnpublishedPage']);
|
$request = new HTTPRequest('GET', 'search', ['Search'=>'publicUnpublishedPage']);
|
||||||
|
$request->setSession($this->session());
|
||||||
$this->mockController->setRequest($request);
|
$this->mockController->setRequest($request);
|
||||||
$sf = new SearchForm($this->mockController);
|
$sf = new SearchForm($this->mockController);
|
||||||
|
|
||||||
@ -188,9 +193,11 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
$request = new HTTPRequest('GET', 'search', ['Search'=>'restrictedViewLoggedInUsers']);
|
$request = new HTTPRequest('GET', 'search', ['Search'=>'restrictedViewLoggedInUsers']);
|
||||||
|
$request->setSession($this->session());
|
||||||
$this->mockController->setRequest($request);
|
$this->mockController->setRequest($request);
|
||||||
$sf = new SearchForm($this->mockController);
|
$sf = new SearchForm($this->mockController);
|
||||||
|
|
||||||
|
/** @var SiteTree $page */
|
||||||
$page = $this->objFromFixture(SiteTree::class, 'restrictedViewLoggedInUsers');
|
$page = $this->objFromFixture(SiteTree::class, 'restrictedViewLoggedInUsers');
|
||||||
$page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
$page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
||||||
$results = $sf->getResults();
|
$results = $sf->getResults();
|
||||||
@ -218,9 +225,11 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
$request = new HTTPRequest('GET', 'search', ['Search'=>'restrictedViewOnlyWebsiteUsers']);
|
$request = new HTTPRequest('GET', 'search', ['Search'=>'restrictedViewOnlyWebsiteUsers']);
|
||||||
|
$request->setSession($this->session());
|
||||||
$this->mockController->setRequest($request);
|
$this->mockController->setRequest($request);
|
||||||
$sf = new SearchForm($this->mockController);
|
$sf = new SearchForm($this->mockController);
|
||||||
|
|
||||||
|
/** @var SiteTree $page */
|
||||||
$page = $this->objFromFixture(SiteTree::class, 'restrictedViewOnlyWebsiteUsers');
|
$page = $this->objFromFixture(SiteTree::class, 'restrictedViewOnlyWebsiteUsers');
|
||||||
$page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
$page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
||||||
$results = $sf->getResults();
|
$results = $sf->getResults();
|
||||||
@ -251,15 +260,21 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
Security::setCurrentUser(null);
|
Security::setCurrentUser(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
public function testInheritedRestrictedPagesNotIncluded()
|
public function testInheritedRestrictedPagesNotIncluded()
|
||||||
{
|
{
|
||||||
$request = new HTTPRequest('GET', 'search', ['Search'=>'inheritRestrictedView']);
|
$request = new HTTPRequest('GET', 'search', ['Search'=>'inheritRestrictedView']);
|
||||||
|
$request->setSession($this->session());
|
||||||
$this->mockController->setRequest($request);
|
$this->mockController->setRequest($request);
|
||||||
$sf = new SearchForm($this->mockController);
|
$sf = new SearchForm($this->mockController);
|
||||||
|
|
||||||
|
/** @var SiteTree $parent */
|
||||||
$parent = $this->objFromFixture(SiteTree::class, 'restrictedViewLoggedInUsers');
|
$parent = $this->objFromFixture(SiteTree::class, 'restrictedViewLoggedInUsers');
|
||||||
$parent->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
$parent->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
||||||
|
|
||||||
|
/** @var SiteTree $page */
|
||||||
$page = $this->objFromFixture(SiteTree::class, 'inheritRestrictedView');
|
$page = $this->objFromFixture(SiteTree::class, 'inheritRestrictedView');
|
||||||
$page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
$page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
||||||
$results = $sf->getResults();
|
$results = $sf->getResults();
|
||||||
@ -287,6 +302,7 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
$request = new HTTPRequest('GET', 'search', ['Search'=>'dontShowInSearchPage']);
|
$request = new HTTPRequest('GET', 'search', ['Search'=>'dontShowInSearchPage']);
|
||||||
|
$request->setSession($this->session());
|
||||||
$this->mockController->setRequest($request);
|
$this->mockController->setRequest($request);
|
||||||
$sf = new SearchForm($this->mockController);
|
$sf = new SearchForm($this->mockController);
|
||||||
|
|
||||||
@ -306,11 +322,14 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
$request = new HTTPRequest('GET', 'search', ['Search'=>'dontShowInSearchFile']);
|
$request = new HTTPRequest('GET', 'search', ['Search'=>'dontShowInSearchFile']);
|
||||||
|
$request->setSession($this->session());
|
||||||
$this->mockController->setRequest($request);
|
$this->mockController->setRequest($request);
|
||||||
$sf = new SearchForm($this->mockController);
|
$sf = new SearchForm($this->mockController);
|
||||||
|
|
||||||
|
/** @var File $dontShowInSearchFile */
|
||||||
$dontShowInSearchFile = $this->objFromFixture(File::class, 'dontShowInSearchFile');
|
$dontShowInSearchFile = $this->objFromFixture(File::class, 'dontShowInSearchFile');
|
||||||
$dontShowInSearchFile->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
$dontShowInSearchFile->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
||||||
|
/** @var File $showInSearchFile */
|
||||||
$showInSearchFile = $this->objFromFixture(File::class, 'showInSearchFile');
|
$showInSearchFile = $this->objFromFixture(File::class, 'showInSearchFile');
|
||||||
$showInSearchFile->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
$showInSearchFile->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
||||||
|
|
||||||
@ -323,6 +342,7 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
|
|
||||||
// Check ShowInSearch=1 can be found
|
// Check ShowInSearch=1 can be found
|
||||||
$request = new HTTPRequest('GET', 'search', ['Search'=>'showInSearchFile']);
|
$request = new HTTPRequest('GET', 'search', ['Search'=>'showInSearchFile']);
|
||||||
|
$request->setSession($this->session());
|
||||||
$this->mockController->setRequest($request);
|
$this->mockController->setRequest($request);
|
||||||
$sf = new SearchForm($this->mockController);
|
$sf = new SearchForm($this->mockController);
|
||||||
$results = $sf->getResults();
|
$results = $sf->getResults();
|
||||||
@ -344,9 +364,11 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
$request = new HTTPRequest('GET', 'search', ['Search'=>'Brötchen']);
|
$request = new HTTPRequest('GET', 'search', ['Search'=>'Brötchen']);
|
||||||
|
$request->setSession($this->session());
|
||||||
$this->mockController->setRequest($request);
|
$this->mockController->setRequest($request);
|
||||||
$sf = new SearchForm($this->mockController);
|
$sf = new SearchForm($this->mockController);
|
||||||
|
|
||||||
|
/** @var SiteTree $pageWithSpecialChars */
|
||||||
$pageWithSpecialChars = $this->objFromFixture(SiteTree::class, 'pageWithSpecialChars');
|
$pageWithSpecialChars = $this->objFromFixture(SiteTree::class, 'pageWithSpecialChars');
|
||||||
$pageWithSpecialChars->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
$pageWithSpecialChars->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
|
||||||
|
|
||||||
@ -359,6 +381,7 @@ class ZZZSearchFormTest extends FunctionalTest
|
|||||||
|
|
||||||
// Check another word
|
// Check another word
|
||||||
$request = new HTTPRequest('GET', 'search', ['Search'=>'Bäcker']);
|
$request = new HTTPRequest('GET', 'search', ['Search'=>'Bäcker']);
|
||||||
|
$request->setSession($this->session());
|
||||||
$this->mockController->setRequest($request);
|
$this->mockController->setRequest($request);
|
||||||
$sf = new SearchForm($this->mockController);
|
$sf = new SearchForm($this->mockController);
|
||||||
$results = $sf->getResults();
|
$results = $sf->getResults();
|
||||||
|
Loading…
Reference in New Issue
Block a user