objFromFixture('Page', 'page1'); $navigator = new SilverStripeNavigator($page); $items = $navigator->getItems(); $classes = array_map('get_class', $items->toArray()); $this->assertContains( SilverStripeNavigatorItem_StageLink::class, $classes, 'Adds default classes' ); $this->assertContains( 'SilverStripeNavigatorTest_TestItem', $classes, 'Autodiscovers new classes' ); } public function testCanView() { $page = $this->objFromFixture('Page', 'page1'); $admin = $this->objFromFixture(Member::class, 'admin'); $navigator = new SilverStripeNavigator($page); // TODO Shouldn't be necessary but SapphireTest logs in as ADMIN by default $this->logInWithPermission('CMS_ACCESS_CMSMain'); $items = $navigator->getItems(); $classes = array_map('get_class', $items->toArray()); $this->assertNotContains('SilverStripeNavigatorTest_ProtectedTestItem', $classes); $this->logInWithPermission('ADMIN'); $items = $navigator->getItems(); $classes = array_map('get_class', $items->toArray()); $this->assertContains('SilverStripeNavigatorTest_ProtectedTestItem', $classes); } } class SilverStripeNavigatorTest_TestItem extends SilverStripeNavigatorItem implements TestOnly { public function getTitle() { return self::class; } public function getHTML() { return null; } } class SilverStripeNavigatorTest_ProtectedTestItem extends SilverStripeNavigatorItem implements TestOnly { public function getTitle() { return self::class; } public function getHTML() { return null; } public function canView($member = null) { if (!$member) { $member = Security::getCurrentUser(); } return Permission::checkMember($member, 'ADMIN'); } }