mirror of
https://github.com/silverstripe/silverstripe-subsites
synced 2024-10-22 09:05:55 +00:00
Merge pull request #291 from creative-commoners/pulls/2.0/update-travis-config
Update Travis configuration for PHP 5.6-7.1, add composer dependencies and codecov.io config
This commit is contained in:
commit
5cf2d87e59
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -4,3 +4,4 @@
|
|||||||
/.gitignore export-ignore
|
/.gitignore export-ignore
|
||||||
/.travis.yml export-ignore
|
/.travis.yml export-ignore
|
||||||
/.scrutinizer.yml export-ignore
|
/.scrutinizer.yml export-ignore
|
||||||
|
/codecov.yml export-ignore
|
||||||
|
65
.travis.yml
65
.travis.yml
@ -1,36 +1,55 @@
|
|||||||
# See https://github.com/silverstripe/silverstripe-travis-support for setup details
|
|
||||||
|
|
||||||
language: php
|
language: php
|
||||||
|
|
||||||
sudo: false
|
addons:
|
||||||
|
firefox: "31.0"
|
||||||
sudo: false
|
|
||||||
|
|
||||||
php:
|
|
||||||
- 5.5
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- CORE_RELEASE=4
|
- COMPOSER_ROOT_VERSION="4.0.x-dev"
|
||||||
matrix:
|
- DISPLAY=":99"
|
||||||
- DB=MYSQL
|
- XVFBARGS=":99 -ac -screen 0 1024x768x16"
|
||||||
- DB=PGSQL
|
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- php: 5.5
|
- php: 5.6
|
||||||
env: DB=MYSQL BEHAT_TEST=1
|
env: DB=MYSQL PHPCS_TEST=1 PHPUNIT_TEST=1
|
||||||
|
- php: 7.0
|
||||||
|
env: DB=PGSQL PHPUNIT_TEST=1
|
||||||
|
- php: 7.1
|
||||||
|
env: DB=MYSQL PHPUNIT_COVERAGE_TEST=1
|
||||||
|
# @todo Fix behat
|
||||||
|
# - php: 7.0
|
||||||
|
# env: DB=MYSQL BEHAT_TEST=1
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- composer self-update || true
|
|
||||||
- phpenv rehash
|
- phpenv rehash
|
||||||
- git clone git://github.com/silverstripe/silverstripe-travis-support.git ~/travis-support
|
- phpenv config-rm xdebug.ini
|
||||||
- "if [ \"$BEHAT_TEST\" = \"\" ]; then php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss; fi"
|
- echo 'memory_limit = 2G' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
|
||||||
- "if [ \"$BEHAT_TEST\" = \"1\" ]; then php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss --require silverstripe/behat-extension; fi"
|
|
||||||
- cd ~/builds/ss
|
- composer install --prefer-dist
|
||||||
- php ~/travis-support/travis_setup_selenium.php --if-env BEHAT_TEST
|
- composer require silverstripe/recipe-cms 1.0.x-dev --no-update --prefer-dist
|
||||||
- php ~/travis-support/travis_setup_php54_webserver.php --if-env BEHAT_TEST
|
- if [[ $DB == PGSQL ]]; then composer require --prefer-dist --no-update silverstripe/postgresql:2.0.x-dev; fi
|
||||||
|
- composer update
|
||||||
|
|
||||||
|
# Bootstrap cms / mysite folder
|
||||||
|
- php ./cms/tests/bootstrap/mysite.php
|
||||||
|
|
||||||
|
# Behat bootstrapping
|
||||||
|
- if [[ $BEHAT_TEST ]]; then echo "" >> .env && echo "SS_BASE_URL=http://localhost:8080/" >> .env; fi
|
||||||
|
- if [[ $BEHAT_TEST ]]; then mkdir artifacts; fi
|
||||||
|
- if [[ $BEHAT_TEST ]]; then sh -e /etc/init.d/xvfb start; sleep 3; fi
|
||||||
|
- if [[ $BEHAT_TEST ]]; then (vendor/bin/selenium-server-standalone > artifacts/selenium.log 2>&1 &); fi
|
||||||
|
- if [[ $BEHAT_TEST ]]; then (vendor/bin/serve --bootstrap-file cms/tests/behat/serve-bootstrap.php &> artifacts/serve.log &); fi
|
||||||
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- "if [ \"$BEHAT_TEST\" = \"\" ]; then vendor/bin/phpunit subsites/tests; fi"
|
- if [[ $PHPUNIT_TEST ]]; then vendor/bin/phpunit tests/php/ flush=1; fi
|
||||||
- "if [ \"$BEHAT_TEST\" = \"1\" ]; then vendor/bin/behat @subsites; fi"
|
- if [[ $PHPUNIT_COVERAGE_TEST ]]; then phpdbg -qrr vendor/bin/phpunit --coverage-clover=coverage.xml; fi
|
||||||
|
- if [[ $PHPCS_TEST ]]; then vendor/bin/phpcs --standard=framework/phpcs.xml.dist code/ tests/ ; fi
|
||||||
|
- if [[ $BEHAT_TEST ]]; then vendor/bin/behat @subsites; fi
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
- if [[ $PHPUNIT_COVERAGE_TEST ]]; then bash <(curl -s https://codecov.io/bash) -f coverage.xml; fi
|
||||||
|
|
||||||
|
after_failure:
|
||||||
|
- if [[ $BEHAT_TEST ]]; then php ./framework/tests/behat/travis-upload-artifacts.php --if-env BEHAT_TEST,ARTIFACTS_BUCKET,ARTIFACTS_KEY,ARTIFACTS_SECRET --target-path $TRAVIS_REPO_SLUG/$TRAVIS_BUILD_ID/$TRAVIS_JOB_ID --artifacts-base-url https://s3.amazonaws.com/$ARTIFACTS_BUCKET/ --artifacts-path ./artifacts/; fi
|
||||||
|
@ -2,12 +2,10 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Subsites\Admin;
|
namespace SilverStripe\Subsites\Admin;
|
||||||
|
|
||||||
|
|
||||||
use SilverStripe\Admin\ModelAdmin;
|
use SilverStripe\Admin\ModelAdmin;
|
||||||
use SilverStripe\Subsites\Forms\GridFieldSubsiteDetailForm;
|
use SilverStripe\Subsites\Forms\GridFieldSubsiteDetailForm;
|
||||||
use SilverStripe\Subsites\Model\Subsite;
|
use SilverStripe\Subsites\Model\Subsite;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Admin interface to manage and create {@link Subsite} instances.
|
* Admin interface to manage and create {@link Subsite} instances.
|
||||||
*
|
*
|
||||||
|
@ -2,12 +2,10 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Subsites\Controller;
|
namespace SilverStripe\Subsites\Controller;
|
||||||
|
|
||||||
|
|
||||||
use SilverStripe\Admin\LeftAndMain;
|
use SilverStripe\Admin\LeftAndMain;
|
||||||
use SilverStripe\Security\Permission;
|
use SilverStripe\Security\Permission;
|
||||||
use SilverStripe\Subsites\Model\Subsite;
|
use SilverStripe\Subsites\Model\Subsite;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Section-agnostic PJAX controller.
|
* Section-agnostic PJAX controller.
|
||||||
*/
|
*/
|
||||||
@ -69,5 +67,4 @@ class SubsiteXHRController extends LeftAndMain
|
|||||||
{
|
{
|
||||||
return $this->renderWith('Includes/SubsiteList');
|
return $this->renderWith('Includes/SubsiteList');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ namespace SilverStripe\Subsites\Extensions;
|
|||||||
use SilverStripe\Core\Extension;
|
use SilverStripe\Core\Extension;
|
||||||
use SilverStripe\Subsites\Model\Subsite;
|
use SilverStripe\Subsites\Model\Subsite;
|
||||||
use SilverStripe\View\SSViewer;
|
use SilverStripe\View\SSViewer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package subsites
|
* @package subsites
|
||||||
*/
|
*/
|
||||||
|
@ -67,8 +67,10 @@ class FileSubsites extends DataExtension
|
|||||||
$fields->push(new LiteralField(
|
$fields->push(new LiteralField(
|
||||||
'Message',
|
'Message',
|
||||||
'<p class="message notice">' .
|
'<p class="message notice">' .
|
||||||
_t('ASSETADMIN.SUBSITENOTICE',
|
_t(
|
||||||
'Folders and files created in the main site are accessible by all subsites.')
|
'ASSETADMIN.SUBSITENOTICE',
|
||||||
|
'Folders and files created in the main site are accessible by all subsites.'
|
||||||
|
)
|
||||||
. '</p>'
|
. '</p>'
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,8 @@ class GroupSubsites extends DataExtension implements PermissionProvider
|
|||||||
// Interface is different if you have the rights to modify subsite group values on
|
// Interface is different if you have the rights to modify subsite group values on
|
||||||
// all subsites
|
// all subsites
|
||||||
if (isset($subsiteMap[0])) {
|
if (isset($subsiteMap[0])) {
|
||||||
$fields->addFieldToTab('Root.Subsites', new OptionsetField('AccessAllSubsites',
|
$fields->addFieldToTab('Root.Subsites', new OptionsetField(
|
||||||
|
'AccessAllSubsites',
|
||||||
_t('GroupSubsites.ACCESSRADIOTITLE', 'Give this group access to'),
|
_t('GroupSubsites.ACCESSRADIOTITLE', 'Give this group access to'),
|
||||||
[
|
[
|
||||||
1 => _t('GroupSubsites.ACCESSALL', 'All subsites'),
|
1 => _t('GroupSubsites.ACCESSALL', 'All subsites'),
|
||||||
@ -97,18 +98,24 @@ class GroupSubsites extends DataExtension implements PermissionProvider
|
|||||||
));
|
));
|
||||||
|
|
||||||
unset($subsiteMap[0]);
|
unset($subsiteMap[0]);
|
||||||
$fields->addFieldToTab('Root.Subsites', new CheckboxSetField('Subsites', '',
|
$fields->addFieldToTab('Root.Subsites', new CheckboxSetField(
|
||||||
$subsiteMap));
|
'Subsites',
|
||||||
|
'',
|
||||||
|
$subsiteMap
|
||||||
|
));
|
||||||
} else {
|
} else {
|
||||||
if (sizeof($subsiteMap) <= 1) {
|
if (sizeof($subsiteMap) <= 1) {
|
||||||
$fields->addFieldToTab('Root.Subsites', new ReadonlyField('SubsitesHuman',
|
$fields->addFieldToTab('Root.Subsites', new ReadonlyField(
|
||||||
|
'SubsitesHuman',
|
||||||
_t('GroupSubsites.ACCESSRADIOTITLE', 'Give this group access to'),
|
_t('GroupSubsites.ACCESSRADIOTITLE', 'Give this group access to'),
|
||||||
reset($subsiteMap)));
|
reset($subsiteMap)
|
||||||
|
));
|
||||||
} else {
|
} else {
|
||||||
$fields->addFieldToTab('Root.Subsites', new CheckboxSetField('Subsites',
|
$fields->addFieldToTab('Root.Subsites', new CheckboxSetField(
|
||||||
|
'Subsites',
|
||||||
_t('GroupSubsites.ACCESSRADIOTITLE', 'Give this group access to'),
|
_t('GroupSubsites.ACCESSRADIOTITLE', 'Give this group access to'),
|
||||||
$subsiteMap));
|
$subsiteMap
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -147,7 +154,6 @@ class GroupSubsites extends DataExtension implements PermissionProvider
|
|||||||
|
|
||||||
// If you're querying by ID, ignore the sub-site - this is a bit ugly...
|
// If you're querying by ID, ignore the sub-site - this is a bit ugly...
|
||||||
if (!$query->filtersOnID()) {
|
if (!$query->filtersOnID()) {
|
||||||
|
|
||||||
/*if($context = DataObject::context_obj()) $subsiteID = (int)$context->SubsiteID;
|
/*if($context = DataObject::context_obj()) $subsiteID = (int)$context->SubsiteID;
|
||||||
|
|
||||||
else */
|
else */
|
||||||
@ -156,9 +162,13 @@ class GroupSubsites extends DataExtension implements PermissionProvider
|
|||||||
// Don't filter by Group_Subsites if we've already done that
|
// Don't filter by Group_Subsites if we've already done that
|
||||||
$hasGroupSubsites = false;
|
$hasGroupSubsites = false;
|
||||||
foreach ($query->getFrom() as $item) {
|
foreach ($query->getFrom() as $item) {
|
||||||
if ((is_array($item) && strpos($item['table'],
|
if ((is_array($item) && strpos(
|
||||||
'Group_Subsites') !== false) || (!is_array($item) && strpos($item,
|
$item['table'],
|
||||||
'Group_Subsites') !== false)
|
'Group_Subsites'
|
||||||
|
) !== false) || (!is_array($item) && strpos(
|
||||||
|
$item,
|
||||||
|
'Group_Subsites'
|
||||||
|
) !== false)
|
||||||
) {
|
) {
|
||||||
$hasGroupSubsites = true;
|
$hasGroupSubsites = true;
|
||||||
break;
|
break;
|
||||||
@ -220,8 +230,10 @@ class GroupSubsites extends DataExtension implements PermissionProvider
|
|||||||
'SECURITY_SUBSITE_GROUP' => [
|
'SECURITY_SUBSITE_GROUP' => [
|
||||||
'name' => _t('GroupSubsites.MANAGE_SUBSITES', 'Manage subsites for groups'),
|
'name' => _t('GroupSubsites.MANAGE_SUBSITES', 'Manage subsites for groups'),
|
||||||
'category' => _t('Permissions.PERMISSIONS_CATEGORY', 'Roles and access permissions'),
|
'category' => _t('Permissions.PERMISSIONS_CATEGORY', 'Roles and access permissions'),
|
||||||
'help' => _t('GroupSubsites.MANAGE_SUBSITES_HELP',
|
'help' => _t(
|
||||||
'Ability to limit the permissions for a group to one or more subsites.'),
|
'GroupSubsites.MANAGE_SUBSITES_HELP',
|
||||||
|
'Ability to limit the permissions for a group to one or more subsites.'
|
||||||
|
),
|
||||||
'sort' => 200
|
'sort' => 200
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
@ -340,8 +340,10 @@ class LeftAndMainSubsites extends Extension
|
|||||||
public function onAfterSave($record)
|
public function onAfterSave($record)
|
||||||
{
|
{
|
||||||
if ($record->hasMethod('NormalRelated') && ($record->NormalRelated() || $record->ReverseRelated())) {
|
if ($record->hasMethod('NormalRelated') && ($record->NormalRelated() || $record->ReverseRelated())) {
|
||||||
$this->owner->response->addHeader('X-Status',
|
$this->owner->response->addHeader(
|
||||||
rawurlencode(_t('LeftAndMainSubsites.Saved', 'Saved, please update related pages.')));
|
'X-Status',
|
||||||
|
rawurlencode(_t('LeftAndMainSubsites.Saved', 'Saved, please update related pages.'))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,13 +108,18 @@ class SiteTreeSubsites extends DataExtension
|
|||||||
if ($isDefaultSubsite && $subsitesMap) {
|
if ($isDefaultSubsite && $subsitesMap) {
|
||||||
$fields->addFieldToTab(
|
$fields->addFieldToTab(
|
||||||
'Root.Main',
|
'Root.Main',
|
||||||
ToggleCompositeField::create('SubsiteOperations',
|
ToggleCompositeField::create(
|
||||||
|
'SubsiteOperations',
|
||||||
_t('SiteTreeSubsites.SubsiteOperations', 'Subsite Operations'),
|
_t('SiteTreeSubsites.SubsiteOperations', 'Subsite Operations'),
|
||||||
[
|
[
|
||||||
new DropdownField('CopyToSubsiteID', _t('SiteTreeSubsites.CopyToSubsite',
|
new DropdownField('CopyToSubsiteID', _t(
|
||||||
'Copy page to subsite'), $subsitesMap),
|
'SiteTreeSubsites.CopyToSubsite',
|
||||||
new CheckboxField('CopyToSubsiteWithChildren',
|
'Copy page to subsite'
|
||||||
_t('SiteTreeSubsites.CopyToSubsiteWithChildren', 'Include children pages?')),
|
), $subsitesMap),
|
||||||
|
new CheckboxField(
|
||||||
|
'CopyToSubsiteWithChildren',
|
||||||
|
_t('SiteTreeSubsites.CopyToSubsiteWithChildren', 'Include children pages?')
|
||||||
|
),
|
||||||
$copyAction = new FormAction(
|
$copyAction = new FormAction(
|
||||||
'copytosubsite',
|
'copytosubsite',
|
||||||
_t('SiteTreeSubsites.CopyAction', 'Copy')
|
_t('SiteTreeSubsites.CopyAction', 'Copy')
|
||||||
@ -393,9 +398,11 @@ class SiteTreeSubsites extends DataExtension
|
|||||||
|
|
||||||
$origDisableSubsiteFilter = Subsite::$disable_subsite_filter;
|
$origDisableSubsiteFilter = Subsite::$disable_subsite_filter;
|
||||||
Subsite::disable_subsite_filter(true);
|
Subsite::disable_subsite_filter(true);
|
||||||
$candidatePage = DataObject::get_one(SiteTree::class,
|
$candidatePage = DataObject::get_one(
|
||||||
|
SiteTree::class,
|
||||||
"\"URLSegment\" = '" . Convert::raw2sql(urldecode($rest)) . "' AND \"SubsiteID\" = " . $subsiteID,
|
"\"URLSegment\" = '" . Convert::raw2sql(urldecode($rest)) . "' AND \"SubsiteID\" = " . $subsiteID,
|
||||||
false);
|
false
|
||||||
|
);
|
||||||
Subsite::disable_subsite_filter($origDisableSubsiteFilter);
|
Subsite::disable_subsite_filter($origDisableSubsiteFilter);
|
||||||
|
|
||||||
if ($candidatePage) {
|
if ($candidatePage) {
|
||||||
|
@ -2,10 +2,8 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Subsites\Extensions;
|
namespace SilverStripe\Subsites\Extensions;
|
||||||
|
|
||||||
|
|
||||||
use SilverStripe\Core\Extension;
|
use SilverStripe\Core\Extension;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Simple extension to show admins in the menu of subsites.
|
* Simple extension to show admins in the menu of subsites.
|
||||||
* If an admin area should be available to a subsite, you can attach
|
* If an admin area should be available to a subsite, you can attach
|
||||||
|
@ -36,8 +36,11 @@ class GridFieldSubsiteDetailForm_ItemRequest extends GridFieldDetailForm_ItemReq
|
|||||||
$templateArray = $templates->map('ID', 'Title');
|
$templateArray = $templates->map('ID', 'Title');
|
||||||
}
|
}
|
||||||
|
|
||||||
$templateDropdown = new DropdownField('TemplateID', _t('Subsite.COPYSTRUCTURE', 'Copy structure from:'),
|
$templateDropdown = new DropdownField(
|
||||||
$templateArray);
|
'TemplateID',
|
||||||
|
_t('Subsite.COPYSTRUCTURE', 'Copy structure from:'),
|
||||||
|
$templateArray
|
||||||
|
);
|
||||||
$templateDropdown->setEmptyString('(' . _t('Subsite.NOTEMPLATE', 'No template') . ')');
|
$templateDropdown->setEmptyString('(' . _t('Subsite.NOTEMPLATE', 'No template') . ')');
|
||||||
$form->Fields()->addFieldToTab('Root.Configuration', $templateDropdown);
|
$form->Fields()->addFieldToTab('Root.Configuration', $templateDropdown);
|
||||||
}
|
}
|
||||||
@ -57,5 +60,4 @@ class GridFieldSubsiteDetailForm_ItemRequest extends GridFieldDetailForm_ItemReq
|
|||||||
|
|
||||||
return parent::doSave($data, $form);
|
return parent::doSave($data, $form);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,12 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Subsites\Forms;
|
namespace SilverStripe\Subsites\Forms;
|
||||||
|
|
||||||
|
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Control\HTTPRequest;
|
use SilverStripe\Control\HTTPRequest;
|
||||||
use SilverStripe\Control\Session;
|
use SilverStripe\Control\Session;
|
||||||
use SilverStripe\Forms\TreeDropdownField;
|
use SilverStripe\Forms\TreeDropdownField;
|
||||||
use SilverStripe\View\Requirements;
|
use SilverStripe\View\Requirements;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wraps around a TreedropdownField to add ability for temporary
|
* Wraps around a TreedropdownField to add ability for temporary
|
||||||
* switching of subsite sessions.
|
* switching of subsite sessions.
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
namespace SilverStripe\Subsites\Forms;
|
namespace SilverStripe\Subsites\Forms;
|
||||||
|
|
||||||
use SilverStripe\Forms\TextField;
|
use SilverStripe\Forms\TextField;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A text field that accepts only valid domain names, but allows the wildcard (*) character
|
* A text field that accepts only valid domain names, but allows the wildcard (*) character
|
||||||
*/
|
*/
|
||||||
|
@ -35,7 +35,6 @@ use SilverStripe\Security\Permission;
|
|||||||
use SilverStripe\Versioned\Versioned;
|
use SilverStripe\Versioned\Versioned;
|
||||||
use UnexpectedValueException;
|
use UnexpectedValueException;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A dynamically created subsite. SiteTree objects can now belong to a subsite.
|
* A dynamically created subsite. SiteTree objects can now belong to a subsite.
|
||||||
* You can simulate subsite access without setting up virtual hosts by appending ?SubsiteID=<ID> to the request.
|
* You can simulate subsite access without setting up virtual hosts by appending ?SubsiteID=<ID> to the request.
|
||||||
@ -231,8 +230,10 @@ class Subsite extends DataObject
|
|||||||
SubsiteDomain::class,
|
SubsiteDomain::class,
|
||||||
"'$SQL_host' LIKE replace(\"SubsiteDomain\".\"Domain\",'*','%')",
|
"'$SQL_host' LIKE replace(\"SubsiteDomain\".\"Domain\",'*','%')",
|
||||||
'"IsPrimary" DESC'
|
'"IsPrimary" DESC'
|
||||||
)->innerJoin('Subsite',
|
)->innerJoin(
|
||||||
'"Subsite"."ID" = "SubsiteDomain"."SubsiteID" AND "Subsite"."IsPublic"=1');
|
'Subsite',
|
||||||
|
'"Subsite"."ID" = "SubsiteDomain"."SubsiteID" AND "Subsite"."IsPublic"=1'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($matchingDomains && $matchingDomains->count()) {
|
if ($matchingDomains && $matchingDomains->count()) {
|
||||||
@ -379,8 +380,8 @@ class Subsite extends DataObject
|
|||||||
$includeMainSite = true,
|
$includeMainSite = true,
|
||||||
$mainSiteTitle = 'Main site',
|
$mainSiteTitle = 'Main site',
|
||||||
$member = null
|
$member = null
|
||||||
)
|
) {
|
||||||
{
|
|
||||||
// Rationalise member arguments
|
// Rationalise member arguments
|
||||||
if (!$member) {
|
if (!$member) {
|
||||||
$member = Member::currentUser();
|
$member = Member::currentUser();
|
||||||
@ -408,12 +409,18 @@ class Subsite extends DataObject
|
|||||||
$subsites = DataList::create(Subsite::class)
|
$subsites = DataList::create(Subsite::class)
|
||||||
->where("\"Subsite\".\"Title\" != ''")
|
->where("\"Subsite\".\"Title\" != ''")
|
||||||
->leftJoin('Group_Subsites', '"Group_Subsites"."SubsiteID" = "Subsite"."ID"')
|
->leftJoin('Group_Subsites', '"Group_Subsites"."SubsiteID" = "Subsite"."ID"')
|
||||||
->innerJoin('Group',
|
->innerJoin(
|
||||||
'"Group"."ID" = "Group_Subsites"."GroupID" OR "Group"."AccessAllSubsites" = 1')
|
'Group',
|
||||||
->innerJoin('Group_Members',
|
'"Group"."ID" = "Group_Subsites"."GroupID" OR "Group"."AccessAllSubsites" = 1'
|
||||||
"\"Group_Members\".\"GroupID\"=\"Group\".\"ID\" AND \"Group_Members\".\"MemberID\" = $member->ID")
|
)
|
||||||
->innerJoin('Permission',
|
->innerJoin(
|
||||||
"\"Group\".\"ID\"=\"Permission\".\"GroupID\" AND \"Permission\".\"Code\" IN ($SQL_codes, 'CMS_ACCESS_LeftAndMain', 'ADMIN')");
|
'Group_Members',
|
||||||
|
"\"Group_Members\".\"GroupID\"=\"Group\".\"ID\" AND \"Group_Members\".\"MemberID\" = $member->ID"
|
||||||
|
)
|
||||||
|
->innerJoin(
|
||||||
|
'Permission',
|
||||||
|
"\"Group\".\"ID\"=\"Permission\".\"GroupID\" AND \"Permission\".\"Code\" IN ($SQL_codes, 'CMS_ACCESS_LeftAndMain', 'ADMIN')"
|
||||||
|
);
|
||||||
|
|
||||||
if (!$subsites) {
|
if (!$subsites) {
|
||||||
$subsites = new ArrayList();
|
$subsites = new ArrayList();
|
||||||
@ -423,14 +430,20 @@ class Subsite extends DataObject
|
|||||||
$rolesSubsites = DataList::create(Subsite::class)
|
$rolesSubsites = DataList::create(Subsite::class)
|
||||||
->where("\"Subsite\".\"Title\" != ''")
|
->where("\"Subsite\".\"Title\" != ''")
|
||||||
->leftJoin('Group_Subsites', '"Group_Subsites"."SubsiteID" = "Subsite"."ID"')
|
->leftJoin('Group_Subsites', '"Group_Subsites"."SubsiteID" = "Subsite"."ID"')
|
||||||
->innerJoin('Group',
|
->innerJoin(
|
||||||
'"Group"."ID" = "Group_Subsites"."GroupID" OR "Group"."AccessAllSubsites" = 1')
|
'Group',
|
||||||
->innerJoin('Group_Members',
|
'"Group"."ID" = "Group_Subsites"."GroupID" OR "Group"."AccessAllSubsites" = 1'
|
||||||
"\"Group_Members\".\"GroupID\"=\"Group\".\"ID\" AND \"Group_Members\".\"MemberID\" = $member->ID")
|
)
|
||||||
|
->innerJoin(
|
||||||
|
'Group_Members',
|
||||||
|
"\"Group_Members\".\"GroupID\"=\"Group\".\"ID\" AND \"Group_Members\".\"MemberID\" = $member->ID"
|
||||||
|
)
|
||||||
->innerJoin('Group_Roles', '"Group_Roles"."GroupID"="Group"."ID"')
|
->innerJoin('Group_Roles', '"Group_Roles"."GroupID"="Group"."ID"')
|
||||||
->innerJoin('PermissionRole', '"Group_Roles"."PermissionRoleID"="PermissionRole"."ID"')
|
->innerJoin('PermissionRole', '"Group_Roles"."PermissionRoleID"="PermissionRole"."ID"')
|
||||||
->innerJoin('PermissionRoleCode',
|
->innerJoin(
|
||||||
"\"PermissionRole\".\"ID\"=\"PermissionRoleCode\".\"RoleID\" AND \"PermissionRoleCode\".\"Code\" IN ($SQL_codes, 'CMS_ACCESS_LeftAndMain', 'ADMIN')");
|
'PermissionRoleCode',
|
||||||
|
"\"PermissionRole\".\"ID\"=\"PermissionRoleCode\".\"RoleID\" AND \"PermissionRoleCode\".\"Code\" IN ($SQL_codes, 'CMS_ACCESS_LeftAndMain', 'ADMIN')"
|
||||||
|
);
|
||||||
|
|
||||||
if (!$subsites && $rolesSubsites) {
|
if (!$subsites && $rolesSubsites) {
|
||||||
return $rolesSubsites;
|
return $rolesSubsites;
|
||||||
@ -655,8 +668,10 @@ class Subsite extends DataObject
|
|||||||
} else {
|
} else {
|
||||||
$domainTable = new LiteralField(
|
$domainTable = new LiteralField(
|
||||||
'Domains',
|
'Domains',
|
||||||
'<p>' . _t('Subsite.DOMAINSAVEFIRST',
|
'<p>' . _t(
|
||||||
'You can only add domains after saving for the first time') . '</p>'
|
'Subsite.DOMAINSAVEFIRST',
|
||||||
|
'You can only add domains after saving for the first time'
|
||||||
|
) . '</p>'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -674,13 +689,13 @@ class Subsite extends DataObject
|
|||||||
asort($pageTypeMap);
|
asort($pageTypeMap);
|
||||||
|
|
||||||
$fields = new FieldList(
|
$fields = new FieldList(
|
||||||
$subsiteTabs = new TabSet('Root',
|
$subsiteTabs = new TabSet(
|
||||||
|
'Root',
|
||||||
new Tab(
|
new Tab(
|
||||||
'Configuration',
|
'Configuration',
|
||||||
_t('Subsite.TabTitleConfig', 'Configuration'),
|
_t('Subsite.TabTitleConfig', 'Configuration'),
|
||||||
HeaderField::create('ConfigForSubsiteHeaderField', 'Subsite Configuration'),
|
HeaderField::create('ConfigForSubsiteHeaderField', 'Subsite Configuration'),
|
||||||
TextField::create('Title', $this->fieldLabel('Title'), $this->Title),
|
TextField::create('Title', $this->fieldLabel('Title'), $this->Title),
|
||||||
|
|
||||||
HeaderField::create(
|
HeaderField::create(
|
||||||
'DomainsForSubsiteHeaderField',
|
'DomainsForSubsiteHeaderField',
|
||||||
_t('Subsite.DomainsHeadline', 'Domains for this subsite')
|
_t('Subsite.DomainsHeadline', 'Domains for this subsite')
|
||||||
@ -690,7 +705,6 @@ class Subsite extends DataObject
|
|||||||
// new TextField('RedirectURL', 'Redirect to URL', $this->RedirectURL),
|
// new TextField('RedirectURL', 'Redirect to URL', $this->RedirectURL),
|
||||||
CheckboxField::create('DefaultSite', $this->fieldLabel('DefaultSite'), $this->DefaultSite),
|
CheckboxField::create('DefaultSite', $this->fieldLabel('DefaultSite'), $this->DefaultSite),
|
||||||
CheckboxField::create('IsPublic', $this->fieldLabel('IsPublic'), $this->IsPublic),
|
CheckboxField::create('IsPublic', $this->fieldLabel('IsPublic'), $this->IsPublic),
|
||||||
|
|
||||||
LiteralField::create(
|
LiteralField::create(
|
||||||
'PageTypeBlacklistToggle',
|
'PageTypeBlacklistToggle',
|
||||||
sprintf(
|
sprintf(
|
||||||
@ -712,9 +726,12 @@ class Subsite extends DataObject
|
|||||||
// If there are any themes available, add the dropdown
|
// If there are any themes available, add the dropdown
|
||||||
$themes = $this->allowedThemes();
|
$themes = $this->allowedThemes();
|
||||||
if (!empty($themes)) {
|
if (!empty($themes)) {
|
||||||
$fields->addFieldToTab('Root.Configuration',
|
$fields->addFieldToTab(
|
||||||
|
'Root.Configuration',
|
||||||
DropdownField::create('Theme', $this->fieldLabel('Theme'), $this->allowedThemes(), $this->Theme)
|
DropdownField::create('Theme', $this->fieldLabel('Theme'), $this->allowedThemes(), $this->Theme)
|
||||||
->setEmptyString(_t('Subsite.ThemeFieldEmptyString', '-')), 'PageTypeBlacklistToggle');
|
->setEmptyString(_t('Subsite.ThemeFieldEmptyString', '-')),
|
||||||
|
'PageTypeBlacklistToggle'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$subsiteTabs->addExtraClass('subsite-model');
|
$subsiteTabs->addExtraClass('subsite-model');
|
||||||
|
@ -10,7 +10,6 @@ use SilverStripe\Forms\OptionsetField;
|
|||||||
use SilverStripe\ORM\DataObject;
|
use SilverStripe\ORM\DataObject;
|
||||||
use SilverStripe\Subsites\Forms\WildcardDomainField;
|
use SilverStripe\Subsites\Forms\WildcardDomainField;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @property string $Domain domain name of this subsite. Can include wildcards. Do not include the URL scheme here
|
* @property string $Domain domain name of this subsite. Can include wildcards. Do not include the URL scheme here
|
||||||
* @property string $Protocol Required protocol (http or https) if only one is supported. 'automatic' implies
|
* @property string $Protocol Required protocol (http or https) if only one is supported. 'automatic' implies
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Subsites\Pages;
|
namespace SilverStripe\Subsites\Pages;
|
||||||
|
|
||||||
|
|
||||||
use SilverStripe\CMS\Model\SiteTree;
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
use SilverStripe\CMS\Model\VirtualPage;
|
use SilverStripe\CMS\Model\VirtualPage;
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
|
@ -2,13 +2,11 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Subsites\Reports;
|
namespace SilverStripe\Subsites\Reports;
|
||||||
|
|
||||||
|
|
||||||
use SilverStripe\Forms\FieldList;
|
use SilverStripe\Forms\FieldList;
|
||||||
use SilverStripe\Forms\TreeMultiselectField;
|
use SilverStripe\Forms\TreeMultiselectField;
|
||||||
use SilverStripe\Reports\ReportWrapper;
|
use SilverStripe\Reports\ReportWrapper;
|
||||||
use SilverStripe\Subsites\Model\Subsite;
|
use SilverStripe\Subsites\Model\Subsite;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a subsite-aware version of another report.
|
* Creates a subsite-aware version of another report.
|
||||||
* Pass another report (or its classname) into the constructor.
|
* Pass another report (or its classname) into the constructor.
|
||||||
@ -84,5 +82,4 @@ class SubsiteReportWrapper extends ReportWrapper
|
|||||||
// Manually manage the subsite filtering
|
// Manually manage the subsite filtering
|
||||||
Subsite::$force_subsite = null;
|
Subsite::$force_subsite = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Subsites\Tasks;
|
namespace SilverStripe\Subsites\Tasks;
|
||||||
|
|
||||||
|
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
use SilverStripe\CMS\Model\SiteTree;
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
use SilverStripe\Dev\BuildTask;
|
use SilverStripe\Dev\BuildTask;
|
||||||
@ -11,7 +10,6 @@ use SilverStripe\Subsites\Model\Subsite;
|
|||||||
use SilverStripe\Subsites\Pages\SubsitesVirtualPage;
|
use SilverStripe\Subsites\Pages\SubsitesVirtualPage;
|
||||||
use SilverStripe\Versioned\Versioned;
|
use SilverStripe\Versioned\Versioned;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handy alternative to copying pages when creating a subsite through the UI.
|
* Handy alternative to copying pages when creating a subsite through the UI.
|
||||||
*
|
*
|
||||||
|
1
codecov.yml
Normal file
1
codecov.yml
Normal file
@ -0,0 +1 @@
|
|||||||
|
comment: false
|
@ -11,12 +11,19 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"silverstripe/framework": "~4.0",
|
"silverstripe/framework": "^4",
|
||||||
"silverstripe/cms": "~4.0",
|
"silverstripe/cms": "^4",
|
||||||
"silverstripe/asset-admin": "~1.0.0"
|
"silverstripe/admin": "^1",
|
||||||
|
"silverstripe/asset-admin": "^1",
|
||||||
|
"silverstripe/errorpage": "^1",
|
||||||
|
"silverstripe/versioned": "^1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/PHPUnit": "~4.8@stable"
|
"phpunit/phpunit": "^5.7",
|
||||||
|
"squizlabs/php_codesniffer": "^3.0",
|
||||||
|
"silverstripe/behat-extension": "^3",
|
||||||
|
"silverstripe/serve": "dev-master",
|
||||||
|
"se/selenium-server-standalone": "2.41.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@ -28,5 +35,7 @@
|
|||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "2.0.x-dev"
|
"dev-master": "2.0.x-dev"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"minimum-stability": "dev",
|
||||||
|
"prefer-stable": true
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,14 @@
|
|||||||
<phpunit bootstrap="framework/tests/bootstrap.php" colors="true">
|
<phpunit bootstrap="framework/tests/bootstrap.php" colors="true">
|
||||||
|
|
||||||
<testsuite name="Default">
|
<testsuite name="Default">
|
||||||
<directory>tests/php</directory>
|
<directory>tests/php</directory>
|
||||||
</testsuite>
|
</testsuite>
|
||||||
|
|
||||||
|
<filter>
|
||||||
|
<whitelist addUncoveredFilesFromWhitelist="true">
|
||||||
|
<directory suffix=".php">code/</directory>
|
||||||
|
<exclude>
|
||||||
|
<directory suffix=".php">tests/</directory>
|
||||||
|
</exclude>
|
||||||
|
</whitelist>
|
||||||
|
</filter>
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by PhpStorm.
|
|
||||||
* User: dmooyman
|
|
||||||
* Date: 27/05/16
|
|
||||||
* Time: 3:10 PM
|
|
||||||
*/
|
|
||||||
class SubsiteXHRControllerTest extends FunctionalTest
|
|
||||||
{
|
|
||||||
protected static $fixture_file = 'SubsiteTest.yml';
|
|
||||||
|
|
||||||
public function testCanView() {
|
|
||||||
// Test unauthenticated access
|
|
||||||
Session::clear('MemberID');
|
|
||||||
$result = $this->get('SubsiteXHRController', null, array(
|
|
||||||
'X-Pjax' => 'SubsiteList',
|
|
||||||
'X-Requested-With' => 'XMLHttpRequest'
|
|
||||||
));
|
|
||||||
$this->assertEquals(403, $result->getStatusCode());
|
|
||||||
|
|
||||||
// Login with NO permissions
|
|
||||||
$this->logInWithPermission('NOT_CMS_PERMISSION');
|
|
||||||
$result = $this->get('SubsiteXHRController', null, array(
|
|
||||||
'X-Pjax' => 'SubsiteList',
|
|
||||||
'X-Requested-With' => 'XMLHttpRequest'
|
|
||||||
));
|
|
||||||
$this->assertEquals(403, $result->getStatusCode());
|
|
||||||
|
|
||||||
// Test cms user
|
|
||||||
$this->logInWithPermission('CMS_ACCESS_CMSMain');
|
|
||||||
$result = $this->get('SubsiteXHRController', null, array(
|
|
||||||
'X-Pjax' => 'SubsiteList',
|
|
||||||
'X-Requested-With' => 'XMLHttpRequest'
|
|
||||||
));
|
|
||||||
$this->assertEquals(200, $result->getStatusCode());
|
|
||||||
$this->assertEquals('text/json', $result->getHeader('Content-Type'));
|
|
||||||
$body = $result->getBody();
|
|
||||||
$this->assertContains('Main site', $body);
|
|
||||||
$this->assertContains('Test 1', $body);
|
|
||||||
$this->assertContains('Test 2', $body);
|
|
||||||
$this->assertContains('Test 3', $body);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,72 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@see WildcardDomainField}
|
|
||||||
*/
|
|
||||||
class WildcardDomainFieldTest extends SapphireTest {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check that valid domains are accepted
|
|
||||||
*
|
|
||||||
* @dataProvider validDomains
|
|
||||||
*/
|
|
||||||
public function testValidDomains($domain) {
|
|
||||||
$field = new WildcardDomainField('DomainField');
|
|
||||||
$this->assertTrue($field->checkHostname($domain), "Validate that {$domain} is a valid domain name");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check that valid domains are accepted
|
|
||||||
*
|
|
||||||
* @dataProvider invalidDomains
|
|
||||||
*/
|
|
||||||
public function testInvalidDomains($domain) {
|
|
||||||
$field = new WildcardDomainField('DomainField');
|
|
||||||
$this->assertFalse($field->checkHostname($domain), "Validate that {$domain} is an invalid domain name");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check that valid domains are accepted
|
|
||||||
*
|
|
||||||
* @dataProvider validWildcards
|
|
||||||
*/
|
|
||||||
public function testValidWildcards($domain) {
|
|
||||||
$field = new WildcardDomainField('DomainField');
|
|
||||||
$this->assertTrue($field->checkHostname($domain), "Validate that {$domain} is a valid domain wildcard");
|
|
||||||
}
|
|
||||||
|
|
||||||
public function validDomains() {
|
|
||||||
return array(
|
|
||||||
array('www.mysite.com'),
|
|
||||||
array('domain7'),
|
|
||||||
array('mysite.co.n-z'),
|
|
||||||
array('subdomain.my-site.com'),
|
|
||||||
array('subdomain.mysite')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function invalidDomains() {
|
|
||||||
return array(
|
|
||||||
array('-mysite'),
|
|
||||||
array('.mysite'),
|
|
||||||
array('mys..ite'),
|
|
||||||
array('mysite-'),
|
|
||||||
array('mysite.'),
|
|
||||||
array('-mysite.*'),
|
|
||||||
array('.mysite.*'),
|
|
||||||
array('mys..ite.*'),
|
|
||||||
array('*.mysite-'),
|
|
||||||
array('*.mysite.')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function validWildcards() {
|
|
||||||
return array(
|
|
||||||
array('*.mysite.com'),
|
|
||||||
array('mys*ite.com'),
|
|
||||||
array('*.my-site.*'),
|
|
||||||
array('*')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
0
tests/behat/_manifest_exclude
Normal file
0
tests/behat/_manifest_exclude
Normal file
@ -7,8 +7,7 @@ use SilverStripe\Subsites\Model\Subsite;
|
|||||||
|
|
||||||
class BaseSubsiteTest extends SapphireTest
|
class BaseSubsiteTest extends SapphireTest
|
||||||
{
|
{
|
||||||
|
protected function setUp()
|
||||||
public function setUp()
|
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
@ -18,14 +17,14 @@ class BaseSubsiteTest extends SapphireTest
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Avoid subsites filtering on fixture fetching.
|
* Avoid subsites filtering on fixture fetching.
|
||||||
* @param string $class
|
* @param string $className
|
||||||
* @param string $id
|
* @param string $identifier
|
||||||
* @return \SilverStripe\ORM\DataObject
|
* @return \SilverStripe\ORM\DataObject
|
||||||
*/
|
*/
|
||||||
public function objFromFixture($class, $id)
|
protected function objFromFixture($className, $identifier)
|
||||||
{
|
{
|
||||||
Subsite::disable_subsite_filter(true);
|
Subsite::disable_subsite_filter(true);
|
||||||
$obj = parent::objFromFixture($class, $id);
|
$obj = parent::objFromFixture($className, $identifier);
|
||||||
Subsite::disable_subsite_filter(false);
|
Subsite::disable_subsite_filter(false);
|
||||||
|
|
||||||
return $obj;
|
return $obj;
|
||||||
|
@ -11,22 +11,15 @@ use SilverStripe\Subsites\Model\Subsite;
|
|||||||
|
|
||||||
class FileSubsitesTest extends BaseSubsiteTest
|
class FileSubsitesTest extends BaseSubsiteTest
|
||||||
{
|
{
|
||||||
|
protected static $fixture_file = 'SubsiteTest.yml';
|
||||||
public static $fixture_file = 'subsites/tests/php/SubsiteTest.yml';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disable other file extensions
|
* Disable other file extensions
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $illegalExtensions = [
|
protected static $illegal_extensions = [
|
||||||
'File' => [
|
SiteTree::class => ['Translatable'], // @todo implement namespace for Translatable
|
||||||
'SecureFileExtension',
|
|
||||||
'VersionedFileExtension'
|
|
||||||
],
|
|
||||||
'SiteTree' => [
|
|
||||||
'Translatable',
|
|
||||||
]
|
|
||||||
];
|
];
|
||||||
|
|
||||||
public function testTrivialFeatures()
|
public function testTrivialFeatures()
|
||||||
@ -45,7 +38,7 @@ class FileSubsitesTest extends BaseSubsiteTest
|
|||||||
|
|
||||||
public function testWritingSubsiteID()
|
public function testWritingSubsiteID()
|
||||||
{
|
{
|
||||||
$this->objFromFixture(Member::class, 'admin')->logIn();
|
$this->logInAs('admin');
|
||||||
|
|
||||||
$subsite = $this->objFromFixture(Subsite::class, 'domaintest1');
|
$subsite = $this->objFromFixture(Subsite::class, 'domaintest1');
|
||||||
FileSubsites::$default_root_folders_global = true;
|
FileSubsites::$default_root_folders_global = true;
|
||||||
@ -84,7 +77,7 @@ class FileSubsitesTest extends BaseSubsiteTest
|
|||||||
|
|
||||||
public function testSubsitesFolderDropdown()
|
public function testSubsitesFolderDropdown()
|
||||||
{
|
{
|
||||||
$this->objFromFixture(Member::class, 'admin')->logIn();
|
$this->logInAs('admin');
|
||||||
|
|
||||||
$file = new Folder();
|
$file = new Folder();
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ use SilverStripe\Subsites\Model\Subsite;
|
|||||||
|
|
||||||
class GroupSubsitesTest extends BaseSubsiteTest
|
class GroupSubsitesTest extends BaseSubsiteTest
|
||||||
{
|
{
|
||||||
public static $fixture_file = 'subsites/tests/php/SubsiteTest.yml';
|
protected static $fixture_file = 'SubsiteTest.yml';
|
||||||
|
|
||||||
protected $requireDefaultRecordsFrom = [GroupSubsites::class];
|
protected $requireDefaultRecordsFrom = [GroupSubsites::class];
|
||||||
|
|
||||||
|
@ -13,18 +13,18 @@ use SilverStripe\Subsites\Model\Subsite;
|
|||||||
|
|
||||||
class LeftAndMainSubsitesTest extends FunctionalTest
|
class LeftAndMainSubsitesTest extends FunctionalTest
|
||||||
{
|
{
|
||||||
public static $fixture_file = 'subsites/tests/php/SubsiteTest.yml';
|
protected static $fixture_file = 'SubsiteTest.yml';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Avoid subsites filtering on fixture fetching.
|
* Avoid subsites filtering on fixture fetching.
|
||||||
* @param string $class
|
* @param string $className
|
||||||
* @param string $id
|
* @param string $identifier
|
||||||
* @return \SilverStripe\ORM\DataObject
|
* @return \SilverStripe\ORM\DataObject
|
||||||
*/
|
*/
|
||||||
public function objFromFixture($class, $id)
|
protected function objFromFixture($className, $identifier)
|
||||||
{
|
{
|
||||||
Subsite::disable_subsite_filter(true);
|
Subsite::disable_subsite_filter(true);
|
||||||
$obj = parent::objFromFixture($class, $id);
|
$obj = parent::objFromFixture($classname, $identifier);
|
||||||
Subsite::disable_subsite_filter(false);
|
Subsite::disable_subsite_filter(false);
|
||||||
|
|
||||||
return $obj;
|
return $obj;
|
||||||
@ -55,8 +55,7 @@ class LeftAndMainSubsitesTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testAccessChecksDontChangeCurrentSubsite()
|
public function testAccessChecksDontChangeCurrentSubsite()
|
||||||
{
|
{
|
||||||
$admin = $this->objFromFixture(Member::class, 'admin');
|
$this->logInAs('admin');
|
||||||
$this->logInAs($admin);
|
|
||||||
$ids = [];
|
$ids = [];
|
||||||
|
|
||||||
$subsite1 = $this->objFromFixture(Subsite::class, 'domaintest1');
|
$subsite1 = $this->objFromFixture(Subsite::class, 'domaintest1');
|
||||||
@ -76,10 +75,12 @@ class LeftAndMainSubsitesTest extends FunctionalTest
|
|||||||
|
|
||||||
$left = new LeftAndMain();
|
$left = new LeftAndMain();
|
||||||
$this->assertTrue($left->canView(), "Admin user can view subsites LeftAndMain with id = '$id'");
|
$this->assertTrue($left->canView(), "Admin user can view subsites LeftAndMain with id = '$id'");
|
||||||
$this->assertEquals($id, Subsite::currentSubsiteID(),
|
$this->assertEquals(
|
||||||
'The current subsite has not been changed in the process of checking permissions for admin user.');
|
$id,
|
||||||
|
Subsite::currentSubsiteID(),
|
||||||
|
'The current subsite has not been changed in the process of checking permissions for admin user.'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testShouldChangeSubsite()
|
public function testShouldChangeSubsite()
|
||||||
|
@ -8,7 +8,7 @@ use SilverStripe\Subsites\Model\Subsite;
|
|||||||
|
|
||||||
class SiteConfigSubsitesTest extends BaseSubsiteTest
|
class SiteConfigSubsitesTest extends BaseSubsiteTest
|
||||||
{
|
{
|
||||||
public static $fixture_file = 'subsites/tests/php/SubsiteTest.yml';
|
protected static $fixture_file = 'SubsiteTest.yml';
|
||||||
|
|
||||||
public function testEachSubsiteHasAUniqueSiteConfig()
|
public function testEachSubsiteHasAUniqueSiteConfig()
|
||||||
{
|
{
|
||||||
@ -40,6 +40,6 @@ class SiteConfigSubsitesTest extends BaseSubsiteTest
|
|||||||
$this->assertEquals('Subsite2', SiteConfig::current_site_config()->Title);
|
$this->assertEquals('Subsite2', SiteConfig::current_site_config()->Title);
|
||||||
|
|
||||||
$keys = SiteConfig::current_site_config()->extend('cacheKeyComponent');
|
$keys = SiteConfig::current_site_config()->extend('cacheKeyComponent');
|
||||||
static::assertContains('subsite-' . $subsite2->ID, $keys);
|
$this->assertContains('subsite-' . $subsite2->ID, $keys);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,35 +5,36 @@ namespace SilverStripe\Subsites\Tests;
|
|||||||
use Page;
|
use Page;
|
||||||
use SilverStripe\CMS\Controllers\CMSMain;
|
use SilverStripe\CMS\Controllers\CMSMain;
|
||||||
use SilverStripe\CMS\Controllers\ModelAsController;
|
use SilverStripe\CMS\Controllers\ModelAsController;
|
||||||
use SilverStripe\CMS\Model\ErrorPage;
|
use SilverStripe\ErrorPage\ErrorPage;
|
||||||
use SilverStripe\CMS\Model\SiteTree;
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
use SilverStripe\Control\Director;
|
use SilverStripe\Control\Director;
|
||||||
use SilverStripe\Control\Session;
|
use SilverStripe\Control\Session;
|
||||||
use SilverStripe\Core\Config\Config;
|
use SilverStripe\Core\Config\Config;
|
||||||
use SilverStripe\Core\Convert;
|
use SilverStripe\Core\Convert;
|
||||||
use SilverStripe\Dev\TestOnly;
|
|
||||||
use SilverStripe\Forms\FieldList;
|
use SilverStripe\Forms\FieldList;
|
||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
use SilverStripe\SiteConfig\SiteConfig;
|
use SilverStripe\SiteConfig\SiteConfig;
|
||||||
use SilverStripe\Subsites\Extensions\SiteTreeSubsites;
|
use SilverStripe\Subsites\Extensions\SiteTreeSubsites;
|
||||||
use SilverStripe\Subsites\Model\Subsite;
|
use SilverStripe\Subsites\Model\Subsite;
|
||||||
use SilverStripe\Subsites\Pages\SubsitesVirtualPage;
|
use SilverStripe\Subsites\Pages\SubsitesVirtualPage;
|
||||||
|
use SilverStripe\Subsites\Tests\SiteTreeSubsitesTest\TestClassA;
|
||||||
|
use SilverStripe\Subsites\Tests\SiteTreeSubsitesTest\TestClassB;
|
||||||
|
use SilverStripe\Subsites\Tests\SiteTreeSubsitesTest\TestErrorPage;
|
||||||
use SilverStripe\Versioned\Versioned;
|
use SilverStripe\Versioned\Versioned;
|
||||||
use SilverStripe\View\SSViewer;
|
use SilverStripe\View\SSViewer;
|
||||||
|
|
||||||
class SiteTreeSubsitesTest extends BaseSubsiteTest
|
class SiteTreeSubsitesTest extends BaseSubsiteTest
|
||||||
{
|
{
|
||||||
|
protected static $fixture_file = 'SubsiteTest.yml';
|
||||||
|
|
||||||
public static $fixture_file = 'subsites/tests/php/SubsiteTest.yml';
|
protected static $extra_dataobjects = [
|
||||||
|
TestClassA::class,
|
||||||
protected $extraDataObjects = [
|
TestClassB::class,
|
||||||
'SiteTreeSubsitesTest_ClassA',
|
TestErrorPage::class
|
||||||
'SiteTreeSubsitesTest_ClassB',
|
|
||||||
'SiteTreeSubsitesTest_ErrorPage'
|
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $illegalExtensions = [
|
protected static $illegal_extensions = [
|
||||||
SiteTree::class => ['Translatable']
|
SiteTree::class => ['Translatable'] // @todo implement Translatable namespace
|
||||||
];
|
];
|
||||||
|
|
||||||
public function testPagesInDifferentSubsitesCanShareURLSegment()
|
public function testPagesInDifferentSubsitesCanShareURLSegment()
|
||||||
@ -51,7 +52,9 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest
|
|||||||
$pageMainOther->write();
|
$pageMainOther->write();
|
||||||
$pageMainOther->copyVersionToStage('Stage', 'Live');
|
$pageMainOther->copyVersionToStage('Stage', 'Live');
|
||||||
|
|
||||||
$this->assertNotEquals($pageMain->URLSegment, $pageMainOther->URLSegment,
|
$this->assertNotEquals(
|
||||||
|
$pageMain->URLSegment,
|
||||||
|
$pageMainOther->URLSegment,
|
||||||
'Pages in same subsite cant share the same URL'
|
'Pages in same subsite cant share the same URL'
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -62,7 +65,9 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest
|
|||||||
$pageSubsite1->write();
|
$pageSubsite1->write();
|
||||||
$pageSubsite1->copyVersionToStage('Stage', 'Live');
|
$pageSubsite1->copyVersionToStage('Stage', 'Live');
|
||||||
|
|
||||||
$this->assertEquals($pageMain->URLSegment, $pageSubsite1->URLSegment,
|
$this->assertEquals(
|
||||||
|
$pageMain->URLSegment,
|
||||||
|
$pageSubsite1->URLSegment,
|
||||||
'Pages in different subsites can share the same URL'
|
'Pages in different subsites can share the same URL'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -171,31 +176,37 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest
|
|||||||
$s2 = $this->objFromFixture(Subsite::class, 'domaintest2');
|
$s2 = $this->objFromFixture(Subsite::class, 'domaintest2');
|
||||||
$page = singleton(SiteTree::class);
|
$page = singleton(SiteTree::class);
|
||||||
|
|
||||||
$s1->PageTypeBlacklist = implode(',', [SiteTreeSubsitesTest_ClassA::class, ErrorPage::class]);
|
$s1->PageTypeBlacklist = implode(',', [TestClassA::class, ErrorPage::class]);
|
||||||
$s1->write();
|
$s1->write();
|
||||||
|
|
||||||
Subsite::changeSubsite($s1);
|
Subsite::changeSubsite($s1);
|
||||||
$settingsFields = $page->getSettingsFields()->dataFieldByName('ClassName')->getSource();
|
$settingsFields = $page->getSettingsFields()->dataFieldByName('ClassName')->getSource();
|
||||||
|
|
||||||
$this->assertArrayNotHasKey(ErrorPage::class,
|
$this->assertArrayNotHasKey(
|
||||||
|
ErrorPage::class,
|
||||||
$settingsFields
|
$settingsFields
|
||||||
);
|
);
|
||||||
$this->assertArrayNotHasKey(SiteTreeSubsitesTest_ClassA::class,
|
$this->assertArrayNotHasKey(
|
||||||
|
TestClassA::class,
|
||||||
$settingsFields
|
$settingsFields
|
||||||
);
|
);
|
||||||
$this->assertArrayHasKey(SiteTreeSubsitesTest_ClassB::class,
|
$this->assertArrayHasKey(
|
||||||
|
TestClassB::class,
|
||||||
$settingsFields
|
$settingsFields
|
||||||
);
|
);
|
||||||
|
|
||||||
Subsite::changeSubsite($s2);
|
Subsite::changeSubsite($s2);
|
||||||
$settingsFields = $page->getSettingsFields()->dataFieldByName('ClassName')->getSource();
|
$settingsFields = $page->getSettingsFields()->dataFieldByName('ClassName')->getSource();
|
||||||
$this->assertArrayHasKey(ErrorPage::class,
|
$this->assertArrayHasKey(
|
||||||
|
ErrorPage::class,
|
||||||
$settingsFields
|
$settingsFields
|
||||||
);
|
);
|
||||||
$this->assertArrayHasKey(SiteTreeSubsitesTest_ClassA::class,
|
$this->assertArrayHasKey(
|
||||||
|
TestClassA::class,
|
||||||
$settingsFields
|
$settingsFields
|
||||||
);
|
);
|
||||||
$this->assertArrayHasKey(SiteTreeSubsitesTest_ClassB::class,
|
$this->assertArrayHasKey(
|
||||||
|
TestClassB::class,
|
||||||
$settingsFields
|
$settingsFields
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -238,22 +249,22 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest
|
|||||||
$s1 = $this->objFromFixture(Subsite::class, 'domaintest1');
|
$s1 = $this->objFromFixture(Subsite::class, 'domaintest1');
|
||||||
$s2 = $this->objFromFixture(Subsite::class, 'domaintest2');
|
$s2 = $this->objFromFixture(Subsite::class, 'domaintest2');
|
||||||
|
|
||||||
$s1->PageTypeBlacklist = implode(',', [SiteTreeSubsitesTest_ClassA::class, ErrorPage::class]);
|
$s1->PageTypeBlacklist = implode(',', [TestClassA::class, ErrorPage::class]);
|
||||||
$s1->write();
|
$s1->write();
|
||||||
|
|
||||||
Subsite::changeSubsite($s1);
|
Subsite::changeSubsite($s1);
|
||||||
$hints = Convert::json2array($cmsmain->SiteTreeHints());
|
$hints = Convert::json2array($cmsmain->SiteTreeHints());
|
||||||
$classes = $hints['Root']['disallowedChildren'];
|
$classes = $hints['Root']['disallowedChildren'];
|
||||||
static::assertContains(ErrorPage::class, $classes);
|
$this->assertContains(ErrorPage::class, $classes);
|
||||||
static::assertContains(SiteTreeSubsitesTest_ClassA::class, $classes);
|
$this->assertContains(TestClassA::class, $classes);
|
||||||
static::assertNotContains(SiteTreeSubsitesTest_ClassB::class, $classes);
|
$this->assertNotContains(TestClassB::class, $classes);
|
||||||
|
|
||||||
Subsite::changeSubsite($s2);
|
Subsite::changeSubsite($s2);
|
||||||
$hints = Convert::json2array($cmsmain->SiteTreeHints());
|
$hints = Convert::json2array($cmsmain->SiteTreeHints());
|
||||||
$classes = $hints['Root']['disallowedChildren'];
|
$classes = $hints['Root']['disallowedChildren'];
|
||||||
static::assertNotContains(ErrorPage::class, $classes);
|
$this->assertNotContains(ErrorPage::class, $classes);
|
||||||
static::assertNotContains(SiteTreeSubsitesTest_ClassA::class, $classes);
|
$this->assertNotContains(TestClassA::class, $classes);
|
||||||
static::assertNotContains(SiteTreeSubsitesTest_ClassB::class, $classes);
|
$this->assertNotContains(TestClassB::class, $classes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -280,8 +291,11 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest
|
|||||||
$subsite1Home->write();
|
$subsite1Home->write();
|
||||||
$this->assertEquals('home', $subsite1Home->URLSegment);
|
$this->assertEquals('home', $subsite1Home->URLSegment);
|
||||||
$subsite1Home->doPublish();
|
$subsite1Home->doPublish();
|
||||||
$subsite1HomeLive = Versioned::get_one_by_stage('Page', 'Live',
|
$subsite1HomeLive = Versioned::get_one_by_stage(
|
||||||
sprintf('"SiteTree"."ID" = \'%d\'', $subsite1Home->ID));
|
'Page',
|
||||||
|
'Live',
|
||||||
|
sprintf('"SiteTree"."ID" = \'%d\'', $subsite1Home->ID)
|
||||||
|
);
|
||||||
$this->assertEquals('home', $subsite1HomeLive->URLSegment);
|
$this->assertEquals('home', $subsite1HomeLive->URLSegment);
|
||||||
|
|
||||||
// Creating a new page in a subsite doesn't conflict with urls in other subsites
|
// Creating a new page in a subsite doesn't conflict with urls in other subsites
|
||||||
@ -294,8 +308,11 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest
|
|||||||
$subsite1NewPage->write();
|
$subsite1NewPage->write();
|
||||||
$this->assertEquals('important-page', $subsite1NewPage->URLSegment);
|
$this->assertEquals('important-page', $subsite1NewPage->URLSegment);
|
||||||
$subsite1NewPage->doPublish();
|
$subsite1NewPage->doPublish();
|
||||||
$subsite1NewPageLive = Versioned::get_one_by_stage('Page', 'Live',
|
$subsite1NewPageLive = Versioned::get_one_by_stage(
|
||||||
sprintf('"SiteTree"."ID" = \'%d\'', $subsite1NewPage->ID));
|
'Page',
|
||||||
|
'Live',
|
||||||
|
sprintf('"SiteTree"."ID" = \'%d\'', $subsite1NewPage->ID)
|
||||||
|
);
|
||||||
$this->assertEquals('important-page', $subsite1NewPageLive->URLSegment);
|
$this->assertEquals('important-page', $subsite1NewPageLive->URLSegment);
|
||||||
|
|
||||||
// Creating a new page in a subsite DOES conflict with urls in the same subsite
|
// Creating a new page in a subsite DOES conflict with urls in the same subsite
|
||||||
@ -306,8 +323,11 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest
|
|||||||
$subsite1NewPage2->write();
|
$subsite1NewPage2->write();
|
||||||
$this->assertEquals('important-page-2', $subsite1NewPage2->URLSegment);
|
$this->assertEquals('important-page-2', $subsite1NewPage2->URLSegment);
|
||||||
$subsite1NewPage2->doPublish();
|
$subsite1NewPage2->doPublish();
|
||||||
$subsite1NewPage2Live = Versioned::get_one_by_stage('Page', 'Live',
|
$subsite1NewPage2Live = Versioned::get_one_by_stage(
|
||||||
sprintf('"SiteTree"."ID" = \'%d\'', $subsite1NewPage2->ID));
|
'Page',
|
||||||
|
'Live',
|
||||||
|
sprintf('"SiteTree"."ID" = \'%d\'', $subsite1NewPage2->ID)
|
||||||
|
);
|
||||||
$this->assertEquals('important-page-2', $subsite1NewPage2Live->URLSegment);
|
$this->assertEquals('important-page-2', $subsite1NewPage2Live->URLSegment);
|
||||||
|
|
||||||
// Original page is left un-modified
|
// Original page is left un-modified
|
||||||
@ -326,8 +346,11 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest
|
|||||||
|
|
||||||
$moved = $page->duplicateToSubsite($newSubsite->ID, true);
|
$moved = $page->duplicateToSubsite($newSubsite->ID, true);
|
||||||
$this->assertEquals($moved->SubsiteID, $newSubsite->ID, 'Ensure returned records are on new subsite');
|
$this->assertEquals($moved->SubsiteID, $newSubsite->ID, 'Ensure returned records are on new subsite');
|
||||||
$this->assertEquals($moved->AllChildren()->count(), $page->AllChildren()->count(),
|
$this->assertEquals(
|
||||||
'All pages are copied across');
|
$moved->AllChildren()->count(),
|
||||||
|
$page->AllChildren()->count(),
|
||||||
|
'All pages are copied across'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCopySubsiteWithoutChildren()
|
public function testCopySubsiteWithoutChildren()
|
||||||
@ -353,39 +376,21 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest
|
|||||||
$controller = ModelAsController::controller_for($subsitePage);
|
$controller = ModelAsController::controller_for($subsitePage);
|
||||||
SiteTree::singleton()->extend('contentcontrollerInit', $controller);
|
SiteTree::singleton()->extend('contentcontrollerInit', $controller);
|
||||||
|
|
||||||
$this->assertEquals(SSViewer::get_themes(), $defaultThemes,
|
$this->assertEquals(
|
||||||
'Themes should not be modified when Subsite has no theme defined');
|
SSViewer::get_themes(),
|
||||||
|
$defaultThemes,
|
||||||
|
'Themes should not be modified when Subsite has no theme defined'
|
||||||
|
);
|
||||||
|
|
||||||
$pageWithTheme = $this->objFromFixture(Page::class, 'subsite1_home');
|
$pageWithTheme = $this->objFromFixture(Page::class, 'subsite1_home');
|
||||||
Subsite::changeSubsite($pageWithTheme->SubsiteID);
|
Subsite::changeSubsite($pageWithTheme->SubsiteID);
|
||||||
$controller = ModelAsController::controller_for($pageWithTheme);
|
$controller = ModelAsController::controller_for($pageWithTheme);
|
||||||
SiteTree::singleton()->extend('contentcontrollerInit', $controller);
|
SiteTree::singleton()->extend('contentcontrollerInit', $controller);
|
||||||
$subsiteTheme = $pageWithTheme->Subsite()->Theme;
|
$subsiteTheme = $pageWithTheme->Subsite()->Theme;
|
||||||
$this->assertEquals(SSViewer::get_themes(), array_merge([$subsiteTheme], $defaultThemes),
|
$this->assertEquals(
|
||||||
'Themes should be modified when Subsite has theme defined');
|
SSViewer::get_themes(),
|
||||||
|
array_merge([$subsiteTheme], $defaultThemes),
|
||||||
}
|
'Themes should be modified when Subsite has theme defined'
|
||||||
}
|
);
|
||||||
|
|
||||||
|
|
||||||
class SiteTreeSubsitesTest_ClassA extends SiteTree implements TestOnly
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
class SiteTreeSubsitesTest_ClassB extends SiteTree implements TestOnly
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
class SiteTreeSubsitesTest_ErrorPage extends ErrorPage implements TestOnly
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Helper method to call protected members
|
|
||||||
*
|
|
||||||
* @param int $statusCode
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function get_error_filename_spy($statusCode)
|
|
||||||
{
|
|
||||||
return self::get_error_filename($statusCode);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
10
tests/php/SiteTreeSubsitesTest/TestClassA.php
Normal file
10
tests/php/SiteTreeSubsitesTest/TestClassA.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Subsites\Tests\SiteTreeSubsitesTest;
|
||||||
|
|
||||||
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class TestClassA extends SiteTree implements TestOnly
|
||||||
|
{
|
||||||
|
}
|
10
tests/php/SiteTreeSubsitesTest/TestClassB.php
Normal file
10
tests/php/SiteTreeSubsitesTest/TestClassB.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Subsites\Tests\SiteTreeSubsitesTest;
|
||||||
|
|
||||||
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
|
||||||
|
class TestClassB extends SiteTree implements TestOnly
|
||||||
|
{
|
||||||
|
}
|
20
tests/php/SiteTreeSubsitesTest/TestErrorPage.php
Normal file
20
tests/php/SiteTreeSubsitesTest/TestErrorPage.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Subsites\Tests\SiteTreeSubsitesTest;
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ErrorPage\ErrorPage;
|
||||||
|
|
||||||
|
class TestErrorPage extends ErrorPage implements TestOnly
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Helper method to call protected members
|
||||||
|
*
|
||||||
|
* @param int $statusCode
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function get_error_filename_spy($statusCode)
|
||||||
|
{
|
||||||
|
return self::get_error_filename($statusCode);
|
||||||
|
}
|
||||||
|
}
|
@ -12,14 +12,14 @@ use SilverStripe\Subsites\Model\Subsite;
|
|||||||
|
|
||||||
class SubsiteAdminFunctionalTest extends FunctionalTest
|
class SubsiteAdminFunctionalTest extends FunctionalTest
|
||||||
{
|
{
|
||||||
public static $fixture_file = 'subsites/tests/php/SubsiteTest.yml';
|
protected static $fixture_file = 'SubsiteTest.yml';
|
||||||
public static $use_draft_site = true;
|
protected static $use_draft_site = true;
|
||||||
|
|
||||||
protected $autoFollowRedirection = false;
|
protected $autoFollowRedirection = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper: FunctionalTest is only able to follow redirection once, we want to go all the way.
|
* Helper: FunctionalTest is only able to follow redirection once, we want to go all the way.
|
||||||
* @param $url
|
* @param string $url
|
||||||
* @return \SilverStripe\Control\HTTPResponse
|
* @return \SilverStripe\Control\HTTPResponse
|
||||||
*/
|
*/
|
||||||
public function getAndFollowAll($url)
|
public function getAndFollowAll($url)
|
||||||
@ -46,8 +46,11 @@ class SubsiteAdminFunctionalTest extends FunctionalTest
|
|||||||
$this->assertRegExp('#^Security/login.*#', $this->mainSession->lastUrl(), 'Admin is disallowed');
|
$this->assertRegExp('#^Security/login.*#', $this->mainSession->lastUrl(), 'Admin is disallowed');
|
||||||
|
|
||||||
$response = $this->getAndFollowAll('SubsiteXHRController');
|
$response = $this->getAndFollowAll('SubsiteXHRController');
|
||||||
$this->assertRegExp('#^Security/login.*#', $this->mainSession->lastUrl(),
|
$this->assertRegExp(
|
||||||
'SubsiteXHRController is disallowed');
|
'#^Security/login.*#',
|
||||||
|
$this->mainSession->lastUrl(),
|
||||||
|
'SubsiteXHRController is disallowed'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -55,8 +58,7 @@ class SubsiteAdminFunctionalTest extends FunctionalTest
|
|||||||
*/
|
*/
|
||||||
public function testAdminCanAccessAllSubsites()
|
public function testAdminCanAccessAllSubsites()
|
||||||
{
|
{
|
||||||
$member = $this->objFromFixture(Member::class, 'admin');
|
$this->logInAs('admin');
|
||||||
Session::set('loggedInAs', $member->ID);
|
|
||||||
|
|
||||||
$this->getAndFollowAll('admin/pages/?SubsiteID=0');
|
$this->getAndFollowAll('admin/pages/?SubsiteID=0');
|
||||||
$this->assertEquals(Subsite::currentSubsiteID(), '0', 'Can access main site.');
|
$this->assertEquals(Subsite::currentSubsiteID(), '0', 'Can access main site.');
|
||||||
@ -68,14 +70,16 @@ class SubsiteAdminFunctionalTest extends FunctionalTest
|
|||||||
$this->assertRegExp('#^admin/pages.*#', $this->mainSession->lastUrl(), 'Lands on the correct section');
|
$this->assertRegExp('#^admin/pages.*#', $this->mainSession->lastUrl(), 'Lands on the correct section');
|
||||||
|
|
||||||
$response = $this->getAndFollowAll(SubsiteXHRController::class);
|
$response = $this->getAndFollowAll(SubsiteXHRController::class);
|
||||||
$this->assertNotRegExp('#^Security/login.*#', $this->mainSession->lastUrl(),
|
$this->assertNotRegExp(
|
||||||
'SubsiteXHRController is reachable');
|
'#^Security/login.*#',
|
||||||
|
$this->mainSession->lastUrl(),
|
||||||
|
'SubsiteXHRController is reachable'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testAdminIsRedirectedToObjectsSubsite()
|
public function testAdminIsRedirectedToObjectsSubsite()
|
||||||
{
|
{
|
||||||
$member = $this->objFromFixture(Member::class, 'admin');
|
$this->logInAs('admin');
|
||||||
Session::set('loggedInAs', $member->ID);
|
|
||||||
|
|
||||||
$mainSubsitePage = $this->objFromFixture('Page', 'mainSubsitePage');
|
$mainSubsitePage = $this->objFromFixture('Page', 'mainSubsitePage');
|
||||||
$subsite1Home = $this->objFromFixture('Page', 'subsite1_home');
|
$subsite1Home = $this->objFromFixture('Page', 'subsite1_home');
|
||||||
@ -85,20 +89,29 @@ class SubsiteAdminFunctionalTest extends FunctionalTest
|
|||||||
Config::modify()->set(CMSPageEditController::class, 'treats_subsite_0_as_global', false);
|
Config::modify()->set(CMSPageEditController::class, 'treats_subsite_0_as_global', false);
|
||||||
Subsite::changeSubsite(0);
|
Subsite::changeSubsite(0);
|
||||||
$this->getAndFollowAll("admin/pages/edit/show/$subsite1Home->ID");
|
$this->getAndFollowAll("admin/pages/edit/show/$subsite1Home->ID");
|
||||||
$this->assertEquals(Subsite::currentSubsiteID(), $subsite1Home->SubsiteID,
|
$this->assertEquals(
|
||||||
'Loading an object switches the subsite');
|
Subsite::currentSubsiteID(),
|
||||||
|
$subsite1Home->SubsiteID,
|
||||||
|
'Loading an object switches the subsite'
|
||||||
|
);
|
||||||
$this->assertRegExp('#^admin/pages.*#', $this->mainSession->lastUrl(), 'Lands on the correct section');
|
$this->assertRegExp('#^admin/pages.*#', $this->mainSession->lastUrl(), 'Lands on the correct section');
|
||||||
|
|
||||||
Config::modify()->set(CMSPageEditController::class, 'treats_subsite_0_as_global', true);
|
Config::modify()->set(CMSPageEditController::class, 'treats_subsite_0_as_global', true);
|
||||||
Subsite::changeSubsite(0);
|
Subsite::changeSubsite(0);
|
||||||
$this->getAndFollowAll("admin/pages/edit/show/$subsite1Home->ID");
|
$this->getAndFollowAll("admin/pages/edit/show/$subsite1Home->ID");
|
||||||
$this->assertEquals(Subsite::currentSubsiteID(), $subsite1Home->SubsiteID,
|
$this->assertEquals(
|
||||||
'Loading a non-main-site object still switches the subsite if configured with treats_subsite_0_as_global');
|
Subsite::currentSubsiteID(),
|
||||||
|
$subsite1Home->SubsiteID,
|
||||||
|
'Loading a non-main-site object still switches the subsite if configured with treats_subsite_0_as_global'
|
||||||
|
);
|
||||||
$this->assertRegExp('#^admin/pages.*#', $this->mainSession->lastUrl(), 'Lands on the correct section');
|
$this->assertRegExp('#^admin/pages.*#', $this->mainSession->lastUrl(), 'Lands on the correct section');
|
||||||
|
|
||||||
$this->getAndFollowAll("admin/pages/edit/show/$mainSubsitePage->ID");
|
$this->getAndFollowAll("admin/pages/edit/show/$mainSubsitePage->ID");
|
||||||
$this->assertNotEquals(Subsite::currentSubsiteID(), $mainSubsitePage->SubsiteID,
|
$this->assertNotEquals(
|
||||||
'Loading a main-site object does not change the subsite if configured with treats_subsite_0_as_global');
|
Subsite::currentSubsiteID(),
|
||||||
|
$mainSubsitePage->SubsiteID,
|
||||||
|
'Loading a main-site object does not change the subsite if configured with treats_subsite_0_as_global'
|
||||||
|
);
|
||||||
$this->assertRegExp('#^admin/pages.*#', $this->mainSession->lastUrl(), 'Lands on the correct section');
|
$this->assertRegExp('#^admin/pages.*#', $this->mainSession->lastUrl(), 'Lands on the correct section');
|
||||||
|
|
||||||
Config::unnest();
|
Config::unnest();
|
||||||
@ -110,8 +123,7 @@ class SubsiteAdminFunctionalTest extends FunctionalTest
|
|||||||
*/
|
*/
|
||||||
public function testEditorCanAccessAllSubsites()
|
public function testEditorCanAccessAllSubsites()
|
||||||
{
|
{
|
||||||
$member = $this->objFromFixture(Member::class, 'editor');
|
$this->logInAs('editor');
|
||||||
Session::set('loggedInAs', $member->ID);
|
|
||||||
|
|
||||||
$this->getAndFollowAll('admin/pages/?SubsiteID=0');
|
$this->getAndFollowAll('admin/pages/?SubsiteID=0');
|
||||||
$this->assertEquals(Subsite::currentSubsiteID(), '0', 'Can access main site.');
|
$this->assertEquals(Subsite::currentSubsiteID(), '0', 'Can access main site.');
|
||||||
@ -123,8 +135,11 @@ class SubsiteAdminFunctionalTest extends FunctionalTest
|
|||||||
$this->assertRegExp('#^admin/pages.*#', $this->mainSession->lastUrl(), 'Lands on the correct section');
|
$this->assertRegExp('#^admin/pages.*#', $this->mainSession->lastUrl(), 'Lands on the correct section');
|
||||||
|
|
||||||
$response = $this->getAndFollowAll('SubsiteXHRController');
|
$response = $this->getAndFollowAll('SubsiteXHRController');
|
||||||
$this->assertNotRegExp('#^Security/login.*#', $this->mainSession->lastUrl(),
|
$this->assertNotRegExp(
|
||||||
'SubsiteXHRController is reachable');
|
'#^Security/login.*#',
|
||||||
|
$this->mainSession->lastUrl(),
|
||||||
|
'SubsiteXHRController is reachable'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -145,8 +160,11 @@ class SubsiteAdminFunctionalTest extends FunctionalTest
|
|||||||
// Check forbidden section in allowed subsite.
|
// Check forbidden section in allowed subsite.
|
||||||
$this->getAndFollowAll("admin/assets/?SubsiteID={$subsite1->ID}");
|
$this->getAndFollowAll("admin/assets/?SubsiteID={$subsite1->ID}");
|
||||||
$this->assertEquals(Subsite::currentSubsiteID(), $subsite1->ID, 'Is redirected within subsite.');
|
$this->assertEquals(Subsite::currentSubsiteID(), $subsite1->ID, 'Is redirected within subsite.');
|
||||||
$this->assertNotRegExp('#^admin/assets/.*#', $this->mainSession->lastUrl(),
|
$this->assertNotRegExp(
|
||||||
'Is redirected away from forbidden section');
|
'#^admin/assets/.*#',
|
||||||
|
$this->mainSession->lastUrl(),
|
||||||
|
'Is redirected away from forbidden section'
|
||||||
|
);
|
||||||
|
|
||||||
// Check forbidden site, on a section that's allowed on another subsite
|
// Check forbidden site, on a section that's allowed on another subsite
|
||||||
$this->getAndFollowAll('admin/pages/?SubsiteID=0');
|
$this->getAndFollowAll('admin/pages/?SubsiteID=0');
|
||||||
@ -159,7 +177,10 @@ class SubsiteAdminFunctionalTest extends FunctionalTest
|
|||||||
|
|
||||||
// Check the standalone XHR controller.
|
// Check the standalone XHR controller.
|
||||||
$response = $this->getAndFollowAll(SubsiteXHRController::class);
|
$response = $this->getAndFollowAll(SubsiteXHRController::class);
|
||||||
$this->assertNotRegExp('#^Security/login.*#', $this->mainSession->lastUrl(),
|
$this->assertNotRegExp(
|
||||||
'SubsiteXHRController is reachable');
|
'#^Security/login.*#',
|
||||||
|
$this->mainSession->lastUrl(),
|
||||||
|
'SubsiteXHRController is reachable'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,9 +10,9 @@ use SilverStripe\Subsites\Model\Subsite;
|
|||||||
|
|
||||||
class SubsiteAdminTest extends BaseSubsiteTest
|
class SubsiteAdminTest extends BaseSubsiteTest
|
||||||
{
|
{
|
||||||
public static $fixture_file = 'subsites/tests/php/SubsiteTest.yml';
|
protected static $fixture_file = 'SubsiteTest.yml';
|
||||||
|
|
||||||
public function adminLoggedInSession()
|
protected function adminLoggedInSession()
|
||||||
{
|
{
|
||||||
return new Session([
|
return new Session([
|
||||||
'loggedInAs' => $this->idFromFixture(Member::class, 'admin')
|
'loggedInAs' => $this->idFromFixture(Member::class, 'admin')
|
||||||
@ -31,11 +31,15 @@ class SubsiteAdminTest extends BaseSubsiteTest
|
|||||||
$response1 = Director::test('admin/subsites/', null, $this->adminLoggedInSession());
|
$response1 = Director::test('admin/subsites/', null, $this->adminLoggedInSession());
|
||||||
|
|
||||||
// Confirm that this URL gets you the entire page, with the edit form loaded
|
// Confirm that this URL gets you the entire page, with the edit form loaded
|
||||||
$response2 = Director::test("admin/subsites/SilverStripe-Subsites-Model-Subsite/EditForm/field/SilverStripe-Subsites-Model-Subsite/item/$subsite1ID/edit",
|
$response2 = Director::test(
|
||||||
|
"admin/subsites/SilverStripe-Subsites-Model-Subsite/EditForm/field/SilverStripe-Subsites-Model-Subsite/item/$subsite1ID/edit",
|
||||||
null,
|
null,
|
||||||
$this->adminLoggedInSession());
|
$this->adminLoggedInSession()
|
||||||
$this->assertTrue(strpos($response2->getBody(), 'id="Form_ItemEditForm_ID"') !== false,
|
);
|
||||||
'Testing Form_ItemEditForm_ID exists');
|
$this->assertTrue(
|
||||||
|
strpos($response2->getBody(), 'id="Form_ItemEditForm_ID"') !== false,
|
||||||
|
'Testing Form_ItemEditForm_ID exists'
|
||||||
|
);
|
||||||
$this->assertTrue(strpos($response2->getBody(), '<head') !== false, 'Testing <head> exists');
|
$this->assertTrue(strpos($response2->getBody(), '<head') !== false, 'Testing <head> exists');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,8 +50,7 @@ class SubsiteAdminTest extends BaseSubsiteTest
|
|||||||
*/
|
*/
|
||||||
public function testMainsiteAdminCanAccessAllSubsites()
|
public function testMainsiteAdminCanAccessAllSubsites()
|
||||||
{
|
{
|
||||||
$member = $this->objFromFixture(Member::class, 'admin');
|
$this->logInAs('admin');
|
||||||
Session::set('loggedInAs', $member->ID);
|
|
||||||
|
|
||||||
$cmsMain = new CMSMain();
|
$cmsMain = new CMSMain();
|
||||||
foreach ($cmsMain->Subsites() as $subsite) {
|
foreach ($cmsMain->Subsites() as $subsite) {
|
||||||
@ -56,12 +59,15 @@ class SubsiteAdminTest extends BaseSubsiteTest
|
|||||||
|
|
||||||
$this->assertArrayHasKey(0, $ids, 'Main site accessible');
|
$this->assertArrayHasKey(0, $ids, 'Main site accessible');
|
||||||
$this->assertArrayHasKey($this->idFromFixture(Subsite::class, 'main'), $ids, 'Site with no groups inaccesible');
|
$this->assertArrayHasKey($this->idFromFixture(Subsite::class, 'main'), $ids, 'Site with no groups inaccesible');
|
||||||
$this->assertArrayHasKey($this->idFromFixture(Subsite::class, 'subsite1'), $ids,
|
$this->assertArrayHasKey(
|
||||||
'Subsite1 Template inaccessible');
|
$this->idFromFixture(Subsite::class, 'subsite1'),
|
||||||
$this->assertArrayHasKey($this->idFromFixture(Subsite::class, 'subsite2'), $ids,
|
$ids,
|
||||||
'Subsite2 Template inaccessible');
|
'Subsite1 Template inaccessible'
|
||||||
|
);
|
||||||
|
$this->assertArrayHasKey(
|
||||||
|
$this->idFromFixture(Subsite::class, 'subsite2'),
|
||||||
|
$ids,
|
||||||
|
'Subsite2 Template inaccessible'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace subsites\tests\php;
|
namespace subsites\tests\php;
|
||||||
|
|
||||||
|
|
||||||
use Page;
|
use Page;
|
||||||
use SilverStripe\Dev\FunctionalTest;
|
use SilverStripe\Dev\FunctionalTest;
|
||||||
use SilverStripe\Subsites\Model\Subsite;
|
use SilverStripe\Subsites\Model\Subsite;
|
||||||
@ -10,7 +9,7 @@ use SilverStripe\View\SSViewer;
|
|||||||
|
|
||||||
class SubsiteFunctionalTest extends FunctionalTest
|
class SubsiteFunctionalTest extends FunctionalTest
|
||||||
{
|
{
|
||||||
public static $fixture_file = 'subsites/tests/php/SubsiteTest.yml';
|
protected static $fixture_file = 'SubsiteTest.yml';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo: remove test from SiteTreeSubsitesTest when this one works. Seems domain lookup is broken atm
|
* @todo: remove test from SiteTreeSubsitesTest when this one works. Seems domain lookup is broken atm
|
||||||
@ -24,15 +23,20 @@ class SubsiteFunctionalTest extends FunctionalTest
|
|||||||
$subsitePage = $this->objFromFixture(Page::class, 'contact');
|
$subsitePage = $this->objFromFixture(Page::class, 'contact');
|
||||||
$this->get($subsitePage->AbsoluteLink());
|
$this->get($subsitePage->AbsoluteLink());
|
||||||
$this->assertEquals($subsitePage->SubsiteID, Subsite::currentSubsiteID(), 'Subsite should be changed');
|
$this->assertEquals($subsitePage->SubsiteID, Subsite::currentSubsiteID(), 'Subsite should be changed');
|
||||||
$this->assertEquals(SSViewer::get_themes(), $defaultThemes,
|
$this->assertEquals(
|
||||||
'Themes should not be modified when Subsite has no theme defined');
|
SSViewer::get_themes(),
|
||||||
|
$defaultThemes,
|
||||||
|
'Themes should not be modified when Subsite has no theme defined'
|
||||||
|
);
|
||||||
|
|
||||||
$pageWithTheme = $this->objFromFixture(Page::class, 'subsite1_contactus');
|
$pageWithTheme = $this->objFromFixture(Page::class, 'subsite1_contactus');
|
||||||
$this->get($pageWithTheme->AbsoluteLink());
|
$this->get($pageWithTheme->AbsoluteLink());
|
||||||
$subsiteTheme = $pageWithTheme->Subsite()->Theme;
|
$subsiteTheme = $pageWithTheme->Subsite()->Theme;
|
||||||
$this->assertEquals($pageWithTheme->SubsiteID, Subsite::currentSubsiteID(), 'Subsite should be changed');
|
$this->assertEquals($pageWithTheme->SubsiteID, Subsite::currentSubsiteID(), 'Subsite should be changed');
|
||||||
$this->assertEquals(SSViewer::get_themes(), array_merge([$subsiteTheme], $defaultThemes),
|
$this->assertEquals(
|
||||||
'Themes should be modified when Subsite has theme defined');
|
SSViewer::get_themes(),
|
||||||
|
array_merge([$subsiteTheme], $defaultThemes),
|
||||||
|
'Themes should be modified when Subsite has theme defined'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ use SilverStripe\Subsites\Model\SubsiteDomain;
|
|||||||
|
|
||||||
class SubsiteTest extends BaseSubsiteTest
|
class SubsiteTest extends BaseSubsiteTest
|
||||||
{
|
{
|
||||||
public static $fixture_file = 'subsites/tests/php/SubsiteTest.yml';
|
protected static $fixture_file = 'SubsiteTest.yml';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Original value of {@see SubSite::$strict_subdomain_matching}
|
* Original value of {@see SubSite::$strict_subdomain_matching}
|
||||||
@ -29,7 +29,7 @@ class SubsiteTest extends BaseSubsiteTest
|
|||||||
*/
|
*/
|
||||||
protected $origServer = [];
|
protected $origServer = [];
|
||||||
|
|
||||||
public function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ class SubsiteTest extends BaseSubsiteTest
|
|||||||
Subsite::$strict_subdomain_matching = false;
|
Subsite::$strict_subdomain_matching = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown()
|
protected function tearDown()
|
||||||
{
|
{
|
||||||
$_SERVER = $this->origServer;
|
$_SERVER = $this->origServer;
|
||||||
Subsite::$strict_subdomain_matching = $this->origStrictSubdomainMatching;
|
Subsite::$strict_subdomain_matching = $this->origStrictSubdomainMatching;
|
||||||
@ -82,7 +82,9 @@ class SubsiteTest extends BaseSubsiteTest
|
|||||||
|
|
||||||
$siteHome = DataObject::get_one('Page', "\"URLSegment\" = 'home'");
|
$siteHome = DataObject::get_one('Page', "\"URLSegment\" = 'home'");
|
||||||
$this->assertNotEquals($siteHome, false, 'Home Page for subsite not found');
|
$this->assertNotEquals($siteHome, false, 'Home Page for subsite not found');
|
||||||
$this->assertEquals($subsite->ID, $siteHome->SubsiteID,
|
$this->assertEquals(
|
||||||
|
$subsite->ID,
|
||||||
|
$siteHome->SubsiteID,
|
||||||
'createInstance() copies existing pages retaining the same URLSegment'
|
'createInstance() copies existing pages retaining the same URLSegment'
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -262,23 +264,33 @@ class SubsiteTest extends BaseSubsiteTest
|
|||||||
*/
|
*/
|
||||||
public function testDefaultDomain()
|
public function testDefaultDomain()
|
||||||
{
|
{
|
||||||
$this->assertEquals('one.example.org',
|
$this->assertEquals(
|
||||||
$this->objFromFixture(Subsite::class, 'domaintest1')->domain());
|
'one.example.org',
|
||||||
|
$this->objFromFixture(Subsite::class, 'domaintest1')->domain()
|
||||||
|
);
|
||||||
|
|
||||||
$this->assertEquals('two.mysite.com',
|
$this->assertEquals(
|
||||||
$this->objFromFixture(Subsite::class, 'domaintest2')->domain());
|
'two.mysite.com',
|
||||||
|
$this->objFromFixture(Subsite::class, 'domaintest2')->domain()
|
||||||
|
);
|
||||||
|
|
||||||
$_SERVER['HTTP_HOST'] = 'www.example.org';
|
$_SERVER['HTTP_HOST'] = 'www.example.org';
|
||||||
$this->assertEquals('three.example.org',
|
$this->assertEquals(
|
||||||
$this->objFromFixture(Subsite::class, 'domaintest3')->domain());
|
'three.example.org',
|
||||||
|
$this->objFromFixture(Subsite::class, 'domaintest3')->domain()
|
||||||
|
);
|
||||||
|
|
||||||
$_SERVER['HTTP_HOST'] = 'mysite.example.org';
|
$_SERVER['HTTP_HOST'] = 'mysite.example.org';
|
||||||
$this->assertEquals('three.mysite.example.org',
|
$this->assertEquals(
|
||||||
$this->objFromFixture(Subsite::class, 'domaintest3')->domain());
|
'three.mysite.example.org',
|
||||||
|
$this->objFromFixture(Subsite::class, 'domaintest3')->domain()
|
||||||
|
);
|
||||||
|
|
||||||
$this->assertEquals($_SERVER['HTTP_HOST'], singleton(Subsite::class)->PrimaryDomain);
|
$this->assertEquals($_SERVER['HTTP_HOST'], singleton(Subsite::class)->PrimaryDomain);
|
||||||
$this->assertEquals('http://' . $_SERVER['HTTP_HOST'] . Director::baseURL(),
|
$this->assertEquals(
|
||||||
singleton(Subsite::class)->absoluteBaseURL());
|
'http://' . $_SERVER['HTTP_HOST'] . Director::baseURL(),
|
||||||
|
singleton(Subsite::class)->absoluteBaseURL()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -358,14 +370,22 @@ class SubsiteTest extends BaseSubsiteTest
|
|||||||
*/
|
*/
|
||||||
public function testAccessibleSites()
|
public function testAccessibleSites()
|
||||||
{
|
{
|
||||||
$member1Sites = Subsite::accessible_sites('CMS_ACCESS_CMSMain', false, null,
|
$member1Sites = Subsite::accessible_sites(
|
||||||
$this->objFromFixture(Member::class, 'subsite1member'));
|
'CMS_ACCESS_CMSMain',
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
$this->objFromFixture(Member::class, 'subsite1member')
|
||||||
|
);
|
||||||
$member1SiteTitles = $member1Sites->column('Title');
|
$member1SiteTitles = $member1Sites->column('Title');
|
||||||
sort($member1SiteTitles);
|
sort($member1SiteTitles);
|
||||||
$this->assertEquals('Subsite1 Template', $member1SiteTitles[0], 'Member can get to a subsite via a group');
|
$this->assertEquals('Subsite1 Template', $member1SiteTitles[0], 'Member can get to a subsite via a group');
|
||||||
|
|
||||||
$adminSites = Subsite::accessible_sites('CMS_ACCESS_CMSMain', false, null,
|
$adminSites = Subsite::accessible_sites(
|
||||||
$this->objFromFixture(Member::class, 'admin'));
|
'CMS_ACCESS_CMSMain',
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
$this->objFromFixture(Member::class, 'admin')
|
||||||
|
);
|
||||||
$adminSiteTitles = $adminSites->column('Title');
|
$adminSiteTitles = $adminSites->column('Title');
|
||||||
sort($adminSiteTitles);
|
sort($adminSiteTitles);
|
||||||
$this->assertEquals([
|
$this->assertEquals([
|
||||||
@ -380,7 +400,9 @@ class SubsiteTest extends BaseSubsiteTest
|
|||||||
], array_values($adminSiteTitles));
|
], array_values($adminSiteTitles));
|
||||||
|
|
||||||
$member2Sites = Subsite::accessible_sites(
|
$member2Sites = Subsite::accessible_sites(
|
||||||
'CMS_ACCESS_CMSMain', false, null,
|
'CMS_ACCESS_CMSMain',
|
||||||
|
false,
|
||||||
|
null,
|
||||||
$this->objFromFixture(Member::class, 'subsite1member2')
|
$this->objFromFixture(Member::class, 'subsite1member2')
|
||||||
);
|
);
|
||||||
$member2SiteTitles = $member2Sites->column('Title');
|
$member2SiteTitles = $member2Sites->column('Title');
|
||||||
|
@ -112,14 +112,14 @@ Page:
|
|||||||
SubsiteID: =>SilverStripe\Subsites\Model\Subsite.subsite2
|
SubsiteID: =>SilverStripe\Subsites\Model\Subsite.subsite2
|
||||||
URLSegment: contact-us
|
URLSegment: contact-us
|
||||||
|
|
||||||
PermissionRoleCode:
|
SilverStripe\Security\PermissionRoleCode:
|
||||||
roleCode1:
|
roleCode1:
|
||||||
Code: CMS_ACCESS_CMSMain
|
Code: CMS_ACCESS_CMSMain
|
||||||
PermissionRole:
|
SilverStripe\Security\PermissionRole:
|
||||||
role1:
|
role1:
|
||||||
Title: role1
|
Title: role1
|
||||||
Codes: =>PermissionRoleCode.roleCode1
|
Codes: =>SilverStripe\Security\PermissionRoleCode.roleCode1
|
||||||
Group:
|
SilverStripe\Security\Group:
|
||||||
admin:
|
admin:
|
||||||
Title: Admin
|
Title: Admin
|
||||||
Code: admin
|
Code: admin
|
||||||
@ -151,71 +151,71 @@ Group:
|
|||||||
Title: subsite1_group_via_role
|
Title: subsite1_group_via_role
|
||||||
Code: subsite1_group_via_role
|
Code: subsite1_group_via_role
|
||||||
AccessAllSubsites: 1
|
AccessAllSubsites: 1
|
||||||
Roles: =>PermissionRole.role1
|
Roles: =>SilverStripe\Security\PermissionRole.role1
|
||||||
Permission:
|
SilverStripe\Security\Permission:
|
||||||
admin:
|
admin:
|
||||||
Code: ADMIN
|
Code: ADMIN
|
||||||
GroupID: =>Group.admin
|
GroupID: =>SilverStripe\Security\Group.admin
|
||||||
editor1:
|
editor1:
|
||||||
Code: CMS_ACCESS_CMSMain
|
Code: CMS_ACCESS_CMSMain
|
||||||
GroupID: =>Group.editor
|
GroupID: =>SilverStripe\Security\Group.editor
|
||||||
editor2:
|
editor2:
|
||||||
Code: SITETREE_VIEW_ALL
|
Code: SITETREE_VIEW_ALL
|
||||||
GroupID: =>Group.editor
|
GroupID: =>SilverStripe\Security\Group.editor
|
||||||
editor3:
|
editor3:
|
||||||
Code: VIEW_DRAFT_CONTENT
|
Code: VIEW_DRAFT_CONTENT
|
||||||
GroupID: =>Group.editor
|
GroupID: =>SilverStripe\Security\Group.editor
|
||||||
accesscmsmain1:
|
accesscmsmain1:
|
||||||
Code: CMS_ACCESS_CMSMain
|
Code: CMS_ACCESS_CMSMain
|
||||||
GroupID: =>Group.subsite1_group
|
GroupID: =>SilverStripe\Security\Group.subsite1_group
|
||||||
accesscmsmain2:
|
accesscmsmain2:
|
||||||
Code: CMS_ACCESS_CMSMain
|
Code: CMS_ACCESS_CMSMain
|
||||||
GroupID: =>Group.subsite2_group
|
GroupID: =>SilverStripe\Security\Group.subsite2_group
|
||||||
accesscmsmain3:
|
accesscmsmain3:
|
||||||
Code: CMS_ACCESS_CMSMain
|
Code: CMS_ACCESS_CMSMain
|
||||||
GroupID: =>Group.subsite1admins
|
GroupID: =>SilverStripe\Security\Group.subsite1admins
|
||||||
accesscmsmain4:
|
accesscmsmain4:
|
||||||
Code: CMS_ACCESS_CMSMain
|
Code: CMS_ACCESS_CMSMain
|
||||||
GroupID: =>Group.allsubsitesauthors
|
GroupID: =>SilverStripe\Security\Group.allsubsitesauthors
|
||||||
securityaccess1:
|
securityaccess1:
|
||||||
Code: CMS_ACCESS_SecurityAdmin
|
Code: CMS_ACCESS_SecurityAdmin
|
||||||
GroupID: =>Group.subsite1_group
|
GroupID: =>SilverStripe\Security\Group.subsite1_group
|
||||||
securityaccess2:
|
securityaccess2:
|
||||||
Code: CMS_ACCESS_SecurityAdmin
|
Code: CMS_ACCESS_SecurityAdmin
|
||||||
GroupID: =>Group.subsite2_group
|
GroupID: =>SilverStripe\Security\Group.subsite2_group
|
||||||
adminsubsite1:
|
adminsubsite1:
|
||||||
Code: ADMIN
|
Code: ADMIN
|
||||||
GroupID: =>Group.subsite1admins
|
GroupID: =>SilverStripe\Security\Group.subsite1admins
|
||||||
|
|
||||||
Member:
|
SilverStripe\Security\Member:
|
||||||
admin:
|
admin:
|
||||||
FirstName: Admin
|
FirstName: Admin
|
||||||
Surname: User
|
Surname: User
|
||||||
Email: admin@test.com
|
Email: admin@test.com
|
||||||
Password: rangi
|
Password: rangi
|
||||||
Groups: =>Group.admin
|
Groups: =>SilverStripe\Security\Group.admin
|
||||||
editor:
|
editor:
|
||||||
FirstName: Editor
|
FirstName: Editor
|
||||||
Surname: User
|
Surname: User
|
||||||
Email: editor@test.com
|
Email: editor@test.com
|
||||||
Password: rangi
|
Password: rangi
|
||||||
Groups: =>Group.editor
|
Groups: =>SilverStripe\Security\Group.editor
|
||||||
subsite1member:
|
subsite1member:
|
||||||
Email: subsite1member@test.com
|
Email: subsite1member@test.com
|
||||||
Groups: =>Group.subsite1_group
|
Groups: =>SilverStripe\Security\Group.subsite1_group
|
||||||
subsite2member:
|
subsite2member:
|
||||||
Email: subsite2member@test.com
|
Email: subsite2member@test.com
|
||||||
Groups: =>Group.subsite2_group
|
Groups: =>SilverStripe\Security\Group.subsite2_group
|
||||||
subsite1admin:
|
subsite1admin:
|
||||||
Email: subsite1admin@test.com
|
Email: subsite1admin@test.com
|
||||||
Groups: =>Group.subsite1admins
|
Groups: =>SilverStripe\Security\Group.subsite1admins
|
||||||
allsubsitesauthor:
|
allsubsitesauthor:
|
||||||
Email: allsubsitesauthor@test.com
|
Email: allsubsitesauthor@test.com
|
||||||
Groups: =>Group.allsubsitesauthors
|
Groups: =>SilverStripe\Security\Group.allsubsitesauthors
|
||||||
subsite1member2:
|
subsite1member2:
|
||||||
Email: subsite1member2@test.com
|
Email: subsite1member2@test.com
|
||||||
Groups: =>Group.subsite1_group_via_role
|
Groups: =>SilverStripe\Security\Group.subsite1_group_via_role
|
||||||
|
|
||||||
SiteConfig:
|
SilverStripe\SiteConfig\SiteConfig:
|
||||||
config:
|
config:
|
||||||
CanCreateTopLevelType: LoggedInUsers
|
CanCreateTopLevelType: LoggedInUsers
|
||||||
|
@ -5,12 +5,6 @@ namespace SilverStripe\Subsites\Tests;
|
|||||||
use SilverStripe\Control\Session;
|
use SilverStripe\Control\Session;
|
||||||
use SilverStripe\Dev\FunctionalTest;
|
use SilverStripe\Dev\FunctionalTest;
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by PhpStorm.
|
|
||||||
* User: dmooyman
|
|
||||||
* Date: 27/05/16
|
|
||||||
* Time: 3:10 PM
|
|
||||||
*/
|
|
||||||
class SubsiteXHRControllerTest extends FunctionalTest
|
class SubsiteXHRControllerTest extends FunctionalTest
|
||||||
{
|
{
|
||||||
protected static $fixture_file = 'SubsiteTest.yml';
|
protected static $fixture_file = 'SubsiteTest.yml';
|
||||||
@ -18,7 +12,8 @@ class SubsiteXHRControllerTest extends FunctionalTest
|
|||||||
public function testCanView()
|
public function testCanView()
|
||||||
{
|
{
|
||||||
// Test unauthenticated access
|
// Test unauthenticated access
|
||||||
Session::clear('MemberID');
|
$this->logOut();
|
||||||
|
|
||||||
$result = $this->get('SubsiteXHRController', null, [
|
$result = $this->get('SubsiteXHRController', null, [
|
||||||
'X-Pjax' => 'SubsiteList',
|
'X-Pjax' => 'SubsiteList',
|
||||||
'X-Requested-With' => 'XMLHttpRequest'
|
'X-Requested-With' => 'XMLHttpRequest'
|
||||||
@ -42,9 +37,9 @@ class SubsiteXHRControllerTest extends FunctionalTest
|
|||||||
$this->assertEquals(200, $result->getStatusCode());
|
$this->assertEquals(200, $result->getStatusCode());
|
||||||
$this->assertEquals('text/json', $result->getHeader('Content-Type'));
|
$this->assertEquals('text/json', $result->getHeader('Content-Type'));
|
||||||
$body = $result->getBody();
|
$body = $result->getBody();
|
||||||
static::assertContains('Main site', $body);
|
$this->assertContains('Main site', $body);
|
||||||
static::assertContains('Test 1', $body);
|
$this->assertContains('Test 1', $body);
|
||||||
static::assertContains('Test 2', $body);
|
$this->assertContains('Test 2', $body);
|
||||||
static::assertContains('Test 3', $body);
|
$this->assertContains('Test 3', $body);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,16 +16,16 @@ use SilverStripe\Versioned\Versioned;
|
|||||||
|
|
||||||
class SubsitesVirtualPageTest extends BaseSubsiteTest
|
class SubsitesVirtualPageTest extends BaseSubsiteTest
|
||||||
{
|
{
|
||||||
public static $fixture_file = [
|
protected static $fixture_file = [
|
||||||
'subsites/tests/php/SubsiteTest.yml',
|
'SubsiteTest.yml',
|
||||||
'subsites/tests/php/SubsitesVirtualPageTest.yml',
|
'SubsitesVirtualPageTest.yml',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $illegalExtensions = [
|
protected static $illegal_extensions = [
|
||||||
'SiteTree' => ['Translatable']
|
SiteTree::class => ['Translatable'] // @todo implement Translatable namespace
|
||||||
];
|
];
|
||||||
|
|
||||||
public function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ class SubsitesVirtualPageTest extends BaseSubsiteTest
|
|||||||
Subsite::changeSubsite($subsite->ID);
|
Subsite::changeSubsite($subsite->ID);
|
||||||
Subsite::$disable_subsite_filter = false;
|
Subsite::$disable_subsite_filter = false;
|
||||||
|
|
||||||
$linky = $this->objFromFixture('Page', 'linky');
|
$linky = $this->objFromFixture(Page::class, 'linky');
|
||||||
|
|
||||||
$svp = new SubsitesVirtualPage();
|
$svp = new SubsitesVirtualPage();
|
||||||
$svp->CopyContentFromID = $linky->ID;
|
$svp->CopyContentFromID = $linky->ID;
|
||||||
@ -97,10 +97,14 @@ class SubsitesVirtualPageTest extends BaseSubsiteTest
|
|||||||
$file->write();
|
$file->write();
|
||||||
|
|
||||||
// Verify that the draft and publish virtual pages both have the corrected link
|
// Verify that the draft and publish virtual pages both have the corrected link
|
||||||
static::assertContains('<img src="/assets/SubsitesVirtualPageTest/464dedb70a/renamed-test-file.pdf"',
|
$this->assertContains(
|
||||||
DB::query("SELECT \"Content\" FROM \"SiteTree\" WHERE \"ID\" = $svp->ID")->value());
|
'<img src="/assets/SubsitesVirtualPageTest/464dedb70a/renamed-test-file.pdf"',
|
||||||
static::assertContains('<img src="/assets/SubsitesVirtualPageTest/464dedb70a/renamed-test-file.pdf"',
|
DB::query("SELECT \"Content\" FROM \"SiteTree\" WHERE \"ID\" = $svp->ID")->value()
|
||||||
DB::query("SELECT \"Content\" FROM \"SiteTree_Live\" WHERE \"ID\" = $svp->ID")->value());
|
);
|
||||||
|
$this->assertContains(
|
||||||
|
'<img src="/assets/SubsitesVirtualPageTest/464dedb70a/renamed-test-file.pdf"',
|
||||||
|
DB::query("SELECT \"Content\" FROM \"SiteTree_Live\" WHERE \"ID\" = $svp->ID")->value()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSubsiteVirtualPagesArentInappropriatelyPublished()
|
public function testSubsiteVirtualPagesArentInappropriatelyPublished()
|
||||||
@ -299,7 +303,7 @@ class SubsitesVirtualPageTest extends BaseSubsiteTest
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function fixVersionNumberCache($page)
|
protected function fixVersionNumberCache($page)
|
||||||
{
|
{
|
||||||
$pages = func_get_args();
|
$pages = func_get_args();
|
||||||
foreach ($pages as $p) {
|
foreach ($pages as $p) {
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# These need to come first so that SiteTree has the link meta-data written.
|
# These need to come first so that SiteTree has the link meta-data written.
|
||||||
File:
|
SilverStripe\Assets\File:
|
||||||
file1:
|
file1:
|
||||||
FileFilename: testscript-test-file.pdf
|
FileFilename: testscript-test-file.pdf
|
||||||
FileHash: 464dedb70af0dc7f8f3360e7f3ae43cbbf1cdf4e
|
FileHash: 464dedb70af0dc7f8f3360e7f3ae43cbbf1cdf4e
|
||||||
Name: testscript-test-file.pdf
|
Name: testscript-test-file.pdf
|
||||||
|
|
||||||
SiteTree:
|
SilverStripe\CMS\Model\SiteTree:
|
||||||
page1:
|
page1:
|
||||||
Title: page1
|
Title: page1
|
||||||
URLSegment: page1
|
URLSegment: page1
|
||||||
|
@ -83,5 +83,4 @@ class WildcardDomainFieldTest extends SapphireTest
|
|||||||
['*']
|
['*']
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user