objFromFixture(Member::class, 'subsite1member'); $cmsmain = singleton(CMSMain::class); $subsites = $cmsmain->sectionSites(true, 'Main site', $member); $this->assertDOSEquals([ ['Title' => 'Subsite1 Template'] ], $subsites, 'Lists member-accessible sites for the accessible controller.'); $assetadmin = singleton(AssetAdmin::class); $subsites = $assetadmin->sectionSites(true, 'Main site', $member); $this->assertDOSEquals([], $subsites, 'Does not list any sites for forbidden controller.'); $member = $this->objFromFixture(Member::class, 'editor'); $cmsmain = singleton(CMSMain::class); $subsites = $cmsmain->sectionSites(true, 'Main site', $member); $this->assertDOSContains([ ['Title' => 'Main site'] ], $subsites, 'Includes the main site for members who can access all sites.'); } public function testAccessChecksDontChangeCurrentSubsite() { $this->logInAs('admin'); $ids = []; $subsite1 = $this->objFromFixture(Subsite::class, 'domaintest1'); $subsite2 = $this->objFromFixture(Subsite::class, 'domaintest2'); $subsite3 = $this->objFromFixture(Subsite::class, 'domaintest3'); $ids[] = $subsite1->ID; $ids[] = $subsite2->ID; $ids[] = $subsite3->ID; $ids[] = 0; // Enable session-based subsite tracking. Subsite::$use_session_subsiteid = true; foreach ($ids as $id) { Subsite::changeSubsite($id); $this->assertEquals($id, SubsiteState::singleton()->getSubsiteId()); $left = new LeftAndMain(); $this->assertTrue($left->canView(), "Admin user can view subsites LeftAndMain with id = '$id'"); $this->assertEquals( $id, SubsiteState::singleton()->getSubsiteId(), 'The current subsite has not been changed in the process of checking permissions for admin user.' ); } } public function testShouldChangeSubsite() { $l = new LeftAndMain(); Config::modify()->set(CMSPageEditController::class, 'treats_subsite_0_as_global', false); $this->assertTrue($l->shouldChangeSubsite(CMSPageEditController::class, 0, 5)); $this->assertFalse($l->shouldChangeSubsite(CMSPageEditController::class, 0, 0)); $this->assertTrue($l->shouldChangeSubsite(CMSPageEditController::class, 1, 5)); $this->assertFalse($l->shouldChangeSubsite(CMSPageEditController::class, 1, 1)); Config::modify()->set(CMSPageEditController::class, 'treats_subsite_0_as_global', true); $this->assertFalse($l->shouldChangeSubsite(CMSPageEditController::class, 0, 5)); $this->assertFalse($l->shouldChangeSubsite(CMSPageEditController::class, 0, 0)); $this->assertTrue($l->shouldChangeSubsite(CMSPageEditController::class, 1, 5)); $this->assertFalse($l->shouldChangeSubsite(CMSPageEditController::class, 1, 1)); } }