From 8398a361cddcf749202be39fbf1305907805c7ef Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Thu, 15 Mar 2018 15:56:10 +1300 Subject: [PATCH 1/7] Use injected CMSMain to prevent unit test error missing dependencies --- tests/php/SiteTreeSubsitesTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/php/SiteTreeSubsitesTest.php b/tests/php/SiteTreeSubsitesTest.php index bd3dc7c..f4d6b57 100644 --- a/tests/php/SiteTreeSubsitesTest.php +++ b/tests/php/SiteTreeSubsitesTest.php @@ -252,7 +252,7 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest { $this->logInAs('editor'); - $cmsmain = new CMSMain(); + $cmsmain = CMSMain::create(); $s1 = $this->objFromFixture(Subsite::class, 'domaintest1'); $s2 = $this->objFromFixture(Subsite::class, 'domaintest2'); From afd23be64c734eb0988bb5631888b0fb280b2e56 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Thu, 15 Mar 2018 16:34:13 +1300 Subject: [PATCH 2/7] FIX Correctly decode page type blacklist from JSON --- src/Extensions/SiteTreeSubsites.php | 10 ++++------ tests/php/SiteTreeSubsitesTest.php | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Extensions/SiteTreeSubsites.php b/src/Extensions/SiteTreeSubsites.php index 4285a45..9dfd90f 100644 --- a/src/Extensions/SiteTreeSubsites.php +++ b/src/Extensions/SiteTreeSubsites.php @@ -19,6 +19,7 @@ use SilverStripe\ORM\DataExtension; use SilverStripe\ORM\DataObject; use SilverStripe\ORM\DataQuery; use SilverStripe\ORM\Queries\SQLSelect; +use SilverStripe\Security\Member; use SilverStripe\Security\Security; use SilverStripe\SiteConfig\SiteConfig; use SilverStripe\Subsites\Model\Subsite; @@ -478,20 +479,17 @@ class SiteTreeSubsites extends DataExtension } /** - * @param Member + * @param Member $member * @return boolean|null */ public function canCreate($member = null) { // Typically called on a singleton, so we're not using the Subsite() relation $subsite = Subsite::currentSubsite(); - if ($subsite && $subsite->exists() && $subsite->PageTypeBlacklist) { - $blacklist = str_replace(['[', '"', ']'], '', $subsite->PageTypeBlacklist); - $blacklist = str_replace(['\\\\'], '\\', $blacklist); - $blacklisted = explode(',', $blacklist); + $blacklist = Convert::json2array($subsite->PageTypeBlacklist) ?: []; - if (in_array(get_class($this->owner), $blacklisted)) { + if (in_array(get_class($this->owner), $blacklist)) { return false; } } diff --git a/tests/php/SiteTreeSubsitesTest.php b/tests/php/SiteTreeSubsitesTest.php index f4d6b57..e004d07 100644 --- a/tests/php/SiteTreeSubsitesTest.php +++ b/tests/php/SiteTreeSubsitesTest.php @@ -185,7 +185,7 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest $s2 = $this->objFromFixture(Subsite::class, 'domaintest2'); $page = singleton(SiteTree::class); - $s1->PageTypeBlacklist = implode(',', [TestClassA::class, ErrorPage::class]); + $s1->PageTypeBlacklist = json_encode([TestClassA::class, ErrorPage::class]); $s1->write(); Subsite::changeSubsite($s1); @@ -257,7 +257,7 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest $s1 = $this->objFromFixture(Subsite::class, 'domaintest1'); $s2 = $this->objFromFixture(Subsite::class, 'domaintest2'); - $s1->PageTypeBlacklist = implode(',', [TestClassA::class, ErrorPage::class]); + $s1->PageTypeBlacklist = json_encode([TestClassA::class, ErrorPage::class]); $s1->write(); Subsite::changeSubsite($s1); From 7f77bb0c17be33937fbd6b3f5d4fd6009e981102 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Thu, 15 Mar 2018 16:45:00 +1300 Subject: [PATCH 3/7] Add different installer versions to Travis build matrix --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3324659..b7eb351 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,23 +14,23 @@ env: matrix: include: - php: 5.6 - env: DB=MYSQL PHPCS_TEST=1 PHPUNIT_TEST=1 + env: DB=MYSQL INSTALLER_VERSION=4.0.x-dev PHPCS_TEST=1 PHPUNIT_TEST=1 - php: 7.1 - env: DB=PGSQL PHPUNIT_TEST=1 + env: DB=PGSQL INSTALLER_VERSION=4.1.x-dev PHPUNIT_TEST=1 - php: 7.2 - env: DB=MYSQL PHPUNIT_COVERAGE_TEST=1 + env: DB=MYSQL INSTALLER_VERSION=4.2.x-dev PHPUNIT_COVERAGE_TEST=1 - php: 7.0 - env: DB=MYSQL BEHAT_TEST=1 + env: DB=MYSQL INSTALLER_VERSION=4.x-dev BEHAT_TEST=1 allow_failures: - php: 7.0 - env: DB=MYSQL BEHAT_TEST=1 + env: DB=MYSQL INSTALLER_VERSION=4.x-dev BEHAT_TEST=1 before_script: - phpenv rehash - phpenv config-rm xdebug.ini - echo 'memory_limit = 2G' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini - composer validate - - composer require silverstripe/installer 4.0.x-dev --no-update + - composer require silverstripe/installer $INSTALLER_VERSION --no-update - if [[ $DB == PGSQL ]]; then composer require --no-update silverstripe/postgresql:2.0.x-dev; fi - composer install --prefer-dist --no-interaction --no-progress --no-suggest --optimize-autoloader --verbose --profile - echo "SS_BASE_URL=http://localhost:8080/" >> .env From 856496e09d648aaf127b679b3b05126309cd9cc2 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Thu, 15 Mar 2018 17:03:41 +1300 Subject: [PATCH 4/7] Ensure SiteTree class name hints cache gets cleared between tests --- tests/php/SiteTreeSubsitesTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/php/SiteTreeSubsitesTest.php b/tests/php/SiteTreeSubsitesTest.php index e004d07..61521a5 100644 --- a/tests/php/SiteTreeSubsitesTest.php +++ b/tests/php/SiteTreeSubsitesTest.php @@ -252,8 +252,6 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest { $this->logInAs('editor'); - $cmsmain = CMSMain::create(); - $s1 = $this->objFromFixture(Subsite::class, 'domaintest1'); $s2 = $this->objFromFixture(Subsite::class, 'domaintest2'); @@ -261,6 +259,7 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest $s1->write(); Subsite::changeSubsite($s1); + $cmsmain = CMSMain::create(); $hints = Convert::json2array($cmsmain->SiteTreeHints()); $classes = $hints['Root']['disallowedChildren']; $this->assertContains(ErrorPage::class, $classes); @@ -268,6 +267,7 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest $this->assertNotContains(TestClassB::class, $classes); Subsite::changeSubsite($s2); + $cmsmain->getHintsCache()->clear(); $hints = Convert::json2array($cmsmain->SiteTreeHints()); $classes = $hints['Root']['disallowedChildren']; $this->assertNotContains(ErrorPage::class, $classes); From 6feec1de34c82b06349c3a6cdc50e89fcd27273e Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Thu, 15 Mar 2018 17:05:12 +1300 Subject: [PATCH 5/7] Prefer source to ensure that TestAssetStore is installed --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b7eb351..a1270c5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,7 +32,7 @@ before_script: - composer validate - composer require silverstripe/installer $INSTALLER_VERSION --no-update - if [[ $DB == PGSQL ]]; then composer require --no-update silverstripe/postgresql:2.0.x-dev; fi - - composer install --prefer-dist --no-interaction --no-progress --no-suggest --optimize-autoloader --verbose --profile + - composer install --prefer-source --no-interaction --no-progress --no-suggest --optimize-autoloader --verbose --profile - echo "SS_BASE_URL=http://localhost:8080/" >> .env # Behat bootstrapping From 30454dc04fcc1a1ee75c71f685c66e202b44b267 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Thu, 15 Mar 2018 17:15:19 +1300 Subject: [PATCH 6/7] FIX Support blacklist for SS 4.0 and 4.1, remove old Translatable reference in test class --- src/Extensions/SiteTreeSubsites.php | 8 ++++++-- tests/php/SubsitesVirtualPageTest.php | 4 ---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Extensions/SiteTreeSubsites.php b/src/Extensions/SiteTreeSubsites.php index 9dfd90f..1a2533e 100644 --- a/src/Extensions/SiteTreeSubsites.php +++ b/src/Extensions/SiteTreeSubsites.php @@ -487,9 +487,13 @@ class SiteTreeSubsites extends DataExtension // Typically called on a singleton, so we're not using the Subsite() relation $subsite = Subsite::currentSubsite(); if ($subsite && $subsite->exists() && $subsite->PageTypeBlacklist) { - $blacklist = Convert::json2array($subsite->PageTypeBlacklist) ?: []; + // SS 4.1: JSON encoded. SS 4.0, comma delimited + $blacklist = Convert::json2array($subsite->PageTypeBlacklist); + if ($blacklist === false) { + $blacklist = explode(',', $subsite->PageTypeBlacklist); + } - if (in_array(get_class($this->owner), $blacklist)) { + if (in_array(get_class($this->owner), (array) $blacklist)) { return false; } } diff --git a/tests/php/SubsitesVirtualPageTest.php b/tests/php/SubsitesVirtualPageTest.php index d00b193..99e9646 100644 --- a/tests/php/SubsitesVirtualPageTest.php +++ b/tests/php/SubsitesVirtualPageTest.php @@ -21,10 +21,6 @@ class SubsitesVirtualPageTest extends BaseSubsiteTest 'SubsitesVirtualPageTest.yml', ]; - protected static $illegal_extensions = [ - SiteTree::class => ['Translatable'] // @todo implement Translatable namespace - ]; - protected function setUp() { parent::setUp(); From 2f7dc7a7a8c79333171c20b132a6632007fda99e Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Mon, 19 Mar 2018 10:03:32 +1300 Subject: [PATCH 7/7] Clear hints cache for SS 4.1 only if method exists (SS 4.0 support) --- tests/php/SiteTreeSubsitesTest.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/php/SiteTreeSubsitesTest.php b/tests/php/SiteTreeSubsitesTest.php index 61521a5..f14e778 100644 --- a/tests/php/SiteTreeSubsitesTest.php +++ b/tests/php/SiteTreeSubsitesTest.php @@ -267,8 +267,12 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest $this->assertNotContains(TestClassB::class, $classes); Subsite::changeSubsite($s2); - $cmsmain->getHintsCache()->clear(); + // SS 4.1 and above + if ($cmsmain->hasMethod('getHintsCache')) { + $cmsmain->getHintsCache()->clear(); + } $hints = Convert::json2array($cmsmain->SiteTreeHints()); + $classes = $hints['Root']['disallowedChildren']; $this->assertNotContains(ErrorPage::class, $classes); $this->assertNotContains(TestClassA::class, $classes);