Source of file SiteTreeSubsitesTest.php
Size: 10,228 Bytes - Last Modified: 2021-12-23T10:04:53+00:00
/var/www/docs.ssmods.com/process/src/tests/SiteTreeSubsitesTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 | <?php namespace AirNZ\SimpleSubsites\Tests; use SilverStripe\CMS\Model\SiteTree; use SilverStripe\SiteConfig\SiteConfig; use SilverStripe\Forms\FieldList; use SilverStripe\Control\Session; use SilverStripe\Dev\TestOnly; use AirNZ\SimpleSubsites\Extensions\SiteTreeExtension; use AirNZ\SimpleSubsites\Model\Subsite; use AirNZ\SimpleSubsites\Tests\SiteTreeSubsitesTest_ClassA; use AirNZ\SimpleSubsites\Tests\SiteTreeSubsitesTest_ClassB; use AirNZ\SimpleSubsites\Tests\SubsiteTest_Page; class SiteTreeSubsitesTest extends BaseSubsiteTest { public static $fixture_file = 'simplesubsites/tests/SubsiteTest.yml'; protected static $extra_dataobjects = [ SiteTreeSubsitesTest_ClassA::class, SiteTreeSubsitesTest_ClassB::class, ]; protected static $illegal_extensions = [ 'SilverStripe\\CMS\\Model\\SiteTree' => array('Translatable') ]; public function setUp() { parent::setUp(); // parent::setUp disables subsite filter by default to not impact other module's tests Subsite::disable_subsite_filter(false); } public function testPagesInDifferentSubsitesCanShareURLSegment() { $subsite1 = $this->objFromFixture(Subsite::class, 'subsite1'); $subsite2 = $this->objFromFixture(Subsite::class, 'subsite2'); Subsite::changeSubsite($subsite2->ID); $pageMain = new SiteTree(); $pageMain->URLSegment = 'testpage'; $pageMain->write(); $pageMain->publish('Stage', 'Live'); $pageMainOther = new SiteTree(); $pageMainOther->URLSegment = 'testpage'; $pageMainOther->write(); $pageMainOther->publish('Stage', 'Live'); $this->assertNotEquals( $pageMain->URLSegment, $pageMainOther->URLSegment, 'Pages in same subsite cant share the same URL' ); Subsite::changeSubsite($subsite1->ID); $pageSubsite1 = new SiteTree(); $pageSubsite1->URLSegment = 'testpage'; $pageSubsite1->write(); $pageSubsite1->publish('Stage', 'Live'); $this->assertEquals( $pageMain->URLSegment, $pageSubsite1->URLSegment, 'Pages in different subsites can share the same URL' ); } public function testBasicSanity() { $this->assertTrue(singleton('SilverStripe\\CMS\\Model\\SiteTree')->getSiteConfig() instanceof SiteConfig); // The following assert is breaking in Translatable. $this->assertTrue(singleton('SilverStripe\\CMS\\Model\\SiteTree')->getCMSFields() instanceof FieldList); $this->assertTrue(is_array(singleton(SiteTreeExtension::class)->extraStatics())); } public function testCanEditSiteTree() { $admin = $this->objFromFixture('SilverStripe\\Security\\Member', 'admin'); $subsite1member = $this->objFromFixture('SilverStripe\\Security\\Member', 'subsite1member'); $subsite2member = $this->objFromFixture('SilverStripe\\Security\\Member', 'subsite2member'); $mainpage = $this->objFromFixture(SubsiteTest_Page::class, 'home'); $subsite1page = $this->objFromFixture(SubsiteTest_Page::class, 'subsite1_home'); $subsite2page = $this->objFromFixture(SubsiteTest_Page::class, 'subsite2_home'); $subsite1 = $this->objFromFixture(Subsite::class, 'subsite1'); $subsite2 = $this->objFromFixture(Subsite::class, 'subsite2'); // Cant pass member as arguments to canEdit() because of GroupSubsites $this->logInAs($admin->ID); $this->assertTrue( (bool)$subsite1page->canEdit(), 'Administrators can edit all subsites' ); // @todo: Workaround because GroupSubsites->augmentSQL() is relying on session state Subsite::changeSubsite($subsite1); $this->logInAs($subsite1member->ID); $this->assertTrue( (bool)$subsite1page->canEdit(), 'Members can edit pages on a subsite if they are in a group belonging to this subsite' ); $this->logInAs($subsite2member->ID); $this->assertFalse( (bool)$subsite1page->canEdit(), 'Members cant edit pages on a subsite if they are not in a group belonging to this subsite' ); } public function testCanDeleteSiteTree() { $admin = $this->objFromFixture('SilverStripe\\Security\\Member', 'admin'); $subsite1member = $this->objFromFixture('SilverStripe\\Security\\Member', 'subsite1member'); $subsite2member = $this->objFromFixture('SilverStripe\\Security\\Member', 'subsite2member'); $mainpage = $this->objFromFixture(SubsiteTest_Page::class, 'home'); $subsite1page = $this->objFromFixture(SubsiteTest_Page::class, 'subsite1_home'); $subsite2page = $this->objFromFixture(SubsiteTest_Page::class, 'subsite2_home'); $subsite1 = $this->objFromFixture(Subsite::class, 'subsite1'); $subsite2 = $this->objFromFixture(Subsite::class, 'subsite2'); // Cant pass member as arguments to canEdit() because of GroupSubsites $this->logInAs($admin->ID); $this->assertTrue( (bool)$subsite1page->canDelete(), 'Administrators can delete on all subsites' ); // @todo: Workaround because GroupSubsites->augmentSQL() is relying on session state Subsite::changeSubsite($subsite1); $this->logInAs($subsite1member->ID); $this->assertTrue( (bool)$subsite1page->canDelete(), 'Members can delete pages on a subsite if they are in a group belonging to this subsite' ); $this->logInAs($subsite2member->ID); $this->assertFalse( (bool)$subsite1page->canDelete(), 'Members cant delete pages on a subsite if they are not in a group belonging to this subsite' ); } public function testcanAddChildren() { $admin = $this->objFromFixture('SilverStripe\\Security\\Member', 'admin'); $subsite1member = $this->objFromFixture('SilverStripe\\Security\\Member', 'subsite1member'); $subsite2member = $this->objFromFixture('SilverStripe\\Security\\Member', 'subsite2member'); $mainpage = $this->objFromFixture(SubsiteTest_Page::class, 'home'); $subsite1page = $this->objFromFixture(SubsiteTest_Page::class, 'subsite1_home'); $subsite2page = $this->objFromFixture(SubsiteTest_Page::class, 'subsite2_home'); $subsite1 = $this->objFromFixture(Subsite::class, 'subsite1'); $subsite2 = $this->objFromFixture(Subsite::class, 'subsite2'); // Cant pass member as arguments to canEdit() because of GroupSubsites $this->logInAs($admin->ID); $this->assertTrue( (bool)$subsite1page->canAddChildren(), 'Administrators can add children on all subsites' ); // @todo: Workaround because GroupSubsites->augmentSQL() is relying on session state Subsite::changeSubsite($subsite1); $this->logInAs($subsite1member->ID); $this->assertTrue( (bool)$subsite1page->canAddChildren(), 'Members can add children pages on a subsite if they are in a group belonging to this subsite' ); $this->logInAs($subsite2member->ID); $this->assertFalse( (bool)$subsite1page->canAddChildren(), 'Members cant add children pages on a subsite if they are not in a group belonging to this subsite' ); } public function testcanPublish() { $admin = $this->objFromFixture('SilverStripe\\Security\\Member', 'admin'); $subsite1member = $this->objFromFixture('SilverStripe\\Security\\Member', 'subsite1member'); $subsite2member = $this->objFromFixture('SilverStripe\\Security\\Member', 'subsite2member'); $mainpage = $this->objFromFixture(SubsiteTest_Page::class, 'home'); $subsite1page = $this->objFromFixture(SubsiteTest_Page::class, 'subsite1_home'); $subsite2page = $this->objFromFixture(SubsiteTest_Page::class, 'subsite2_home'); $subsite1 = $this->objFromFixture(Subsite::class, 'subsite1'); $subsite2 = $this->objFromFixture(Subsite::class, 'subsite2'); $this->logInAs($admin->ID); $this->assertTrue( (bool)$subsite1page->canPublish(), 'Administrators can publish on all subsites' ); // @todo: Workaround because GroupSubsites->augmentSQL() is relying on session state Subsite::changeSubsite($subsite1); $this->logInAs($subsite1member->ID); $this->assertTrue( (bool)$subsite1page->canPublish(), 'Members can publish pages on a subsite if they are in a group belonging to this subsite' ); $this->logInAs($subsite2member->ID); $this->assertFalse( (bool)$subsite1page->canPublish(), 'Members cant publish pages on a subsite if they are not in a group belonging to this subsite' ); } /** * Similar to {@link SubsitesVirtualPageTest->testSubsiteVirtualPageCanHaveSameUrlsegmentAsOtherSubsite()}. */ public function testTwoPagesWithSameURLOnDifferentSubsites() { // Set up a couple of pages with the same URL on different subsites $s1 = $this->objFromFixture(Subsite::class, 'domaintest1'); $s2 = $this->objFromFixture(Subsite::class, 'domaintest2'); $p1 = new SiteTree(); $p1->Title = $p1->URLSegment = "test-page"; $p1->SubsiteID = $s1->ID; $p1->write(); $p2 = new SiteTree(); $p2->Title = $p1->URLSegment = "test-page"; $p2->SubsiteID = $s2->ID; $p2->write(); // Check that the URLs weren't modified in our set-up $this->assertEquals($p1->URLSegment, 'test-page'); $this->assertEquals($p2->URLSegment, 'test-page'); // Check that if we switch between the different subsites, we receive the correct pages Subsite::changeSubsite($s1); $this->assertEquals($p1->ID, SiteTree::get_by_link('test-page')->ID); Subsite::changeSubsite($s2); $this->assertEquals($p2->ID, SiteTree::get_by_link('test-page')->ID); } } |