Source of file EnvBarExtensionTest.php
Size: 12,748 Bytes - Last Modified: 2021-12-23T10:20:33+00:00
/var/www/docs.ssmods.com/process/src/tests/EnvBarExtensionTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498 | <?php namespace Signify\EnvBar\Tests; use SilverStripe\Core\Injector\Injector; use SilverStripe\Core\Kernel; use SilverStripe\Dev\FunctionalTest; use SilverStripe\Versioned\Versioned; /** * Tests the display of the EnvBar according to the environment type, * page stage and the user's access */ class EnvBarExtensionTest extends FunctionalTest { protected static $fixture_file = 'EnvBarExtensionTest.yml'; /** * Test EnvBar when in the dev environment viewing a draft page */ public function testDevEnvironmentDraftStage() { $environment = 'dev'; $kernel = Injector::inst()->get(Kernel::class); $kernel->setEnvironment($environment); $stage = 'draft'; $url = $this->getStagePageURL($stage); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'admin' ), $stage, $environment ); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'editor' ), $stage, $environment ); $this->EnvBarVisible( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'reviewer' ), $stage, $environment ); $this->NotAuthorised( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'registereduser' ), $stage, $environment ); $this->RedirectToLogin( $url, null, $stage, $environment ); } /** * Test EnvBar when in the test environment viewing a draft page */ public function testTestEnvironmentDraftStage() { $environment = 'test'; $kernel = Injector::inst()->get(Kernel::class); $kernel->setEnvironment($environment); $stage = 'draft'; $url = $this->getStagePageURL($stage); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'admin' ), $stage, $environment ); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'editor' ), $stage, $environment ); $this->EnvBarVisible( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'reviewer' ), $stage, $environment ); $this->NotAuthorised( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'registereduser' ), $stage, $environment ); $this->RedirectToLogin( $url, null, $stage, $environment ); } /** * Test EnvBar when in the live environment viewing a draft page */ public function testLiveEnvironmentDraftStage() { $environment = 'live'; $kernel = Injector::inst()->get(Kernel::class); $kernel->setEnvironment($environment); $stage = 'draft'; $url = $this->getStagePageURL($stage); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'admin' ), $stage, $environment ); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'editor' ), $stage, $environment ); $this->EnvBarNotIncluded( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'reviewer' ), $stage, $environment ); $this->NotAuthorised( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'registereduser' ), $stage, $environment ); $this->RedirectToLogin( $url, null, $stage, $environment ); } /** * Test EnvBar when in the dev environment viewing a published page */ public function testDevEnvironmentPublishedStage() { $environment = 'dev'; $kernel = Injector::inst()->get(Kernel::class); $kernel->setEnvironment($environment); $stage = 'published'; $url = $this->getStagePageURL($stage); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'admin' ), $stage, $environment ); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'editor' ), $stage, $environment ); $this->EnvBarVisible( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'reviewer' ), $stage, $environment ); $this->EnvBarVisible( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'registereduser' ), $stage, $environment ); $this->EnvBarVisible( $url, null, $stage, $environment ); } /** * Test EnvBar when in the test environment viewing a published page */ public function testTestEnvironmentPublishedStage() { $environment = 'test'; $kernel = Injector::inst()->get(Kernel::class); $kernel->setEnvironment($environment); $stage = 'published'; $url = $this->getStagePageURL($stage); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'admin' ), $stage, $environment ); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'editor' ), $stage, $environment ); $this->EnvBarVisible( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'reviewer' ), $stage, $environment ); $this->EnvBarVisible( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'registereduser' ), $stage, $environment ); $this->EnvBarVisible( $url, null, $stage, $environment ); } /** * Test EnvBar when in the live environment viewing a published page */ public function testLiveEnvironmentPublishedStage() { $environment = 'live'; $kernel = Injector::inst()->get(Kernel::class); $kernel->setEnvironment($environment); $stage = 'published'; $url = $this->getStagePageURL($stage); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'admin' ), $stage, $environment ); $this->EnvBarAccessGranted( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'editor' ), $stage, $environment ); $this->EnvBarNotIncluded( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'reviewer' ), $stage, $environment ); $this->EnvBarNotIncluded( $url, $this->objFromFixture( 'SilverStripe\Security\Member', 'reviewer' ), $stage, $environment ); $this->EnvBarNotIncluded( $url, null, $stage, $environment ); } /** * Test the content of the EnvBar is correct for an authorised user */ public function EnvBarAccessGranted($url, $user, $stage, $environment) { $this->logInAs($user); $this->get($url); $this->assertExactHTMLMatchBySelector( '.page__envbar', [ '<a href="/admin/pages/edit/show/1" target="_blank" rel="noopener noreferrer" ' . 'class="page__envbar page__envbar--link page__envbar--' . strtolower($environment) . '">Logged in as <strong>' . strtoupper($user->FirstName) . '</strong> viewing the <strong>' . strtoupper($stage) . '</strong> version of this page in the <strong>' . strtoupper($environment) . '</strong> environment.<br/>' . ' This bar will not be visible to unauthorised users when live. ' . 'Click to <strong>EDIT</strong> in new tab.</a>' ] ); $this->logOut(); } /** * Test the content of the EnvBar is correct for an unauthorised user */ public function EnvBarVisible($url, $user, $stage, $environment) { if ($user) { $this->logInAs($user); } $this->get($url); $this->assertExactHTMLMatchBySelector( '.page__envbar', [ '<span class="page__envbar page__envbar--' . strtolower($environment) . '">You are viewing the <strong>' . strtoupper($stage) . '</strong> version of this page in the <strong>' . strtoupper($environment) . '</strong> environment.<br/>' . ' This bar will not be visible to unauthorised users when live.</span>' ] ); if ($user) { $this->logOut(); } } /** * Test EnvBar is not injected into the page */ public function EnvBarNotIncluded($url, $user, $stage, $environment) { if ($user) { $this->logInAs($user); } $testPage = $this->get($url); $this->assertNotContains( '.page__envbar', $testPage->getBody() ); if ($user) { $this->logOut(); } } /** * Test the unauthorised user is forbidden access */ public function NotAuthorised($url, $user, $stage, $environment) { if ($user) { $this->logInAs($user); } $testPage = $this->get($url); $this->assertEquals(403, $testPage->getStatusCode()); if ($user) { $this->logOut(); } } /** * Test the anonymous user is redirected to the login */ public function RedirectToLogin($url, $user, $stage, $environment) { if ($user) { $this->logInAs($user); } $this->get($url); $this->assertExactHTMLMatchBySelector( '#MemberLoginForm_LoginForm_BackURL', [ '<input type="hidden" name="BackURL" value="/test-page" class="hidden"' . ' id="MemberLoginForm_LoginForm_BackURL" />' ] ); if ($user) { $this->logOut(); } } /** * Get the correct url for the test */ public function getStagePageURL($stage) { $page = $this->objFromFixture('SilverStripe\CMS\Model\SiteTree', 'default'); if ($stage === 'draft') { $url = $page->URLSegment . '?stage=Stage'; } elseif ($stage === 'published') { $page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); $url = $page->URLSegment; } else { $url = null; } return $url; } } |