SilverStripeNavigatorTest::testGetItems()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 12
nc 1
nop 0
dl 0
loc 17
rs 9.8666
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\CMS\Tests\Controllers;
4
5
use SilverStripe\CMS\Controllers\SilverStripeNavigator;
6
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem_ArchiveLink;
7
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem_LiveLink;
8
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem_StageLink;
9
use SilverStripe\CMS\Model\SiteTree;
10
use SilverStripe\Dev\SapphireTest;
11
use SilverStripe\Security\Member;
12
13
class SilverStripeNavigatorTest extends SapphireTest
14
{
15
    protected static $fixture_file = 'CMSMainTest.yml';
16
17
    protected static $extra_dataobjects = [
18
        SilverStripeNavigatorTest\UnstagedRecord::class,
19
    ];
20
21
    public function testGetItems()
22
    {
23
        $page = $this->objFromFixture(SiteTree::class, 'page1');
24
        $navigator = new SilverStripeNavigator($page);
0 ignored issues
show
Bug introduced by
$page of type SilverStripe\ORM\DataObject is incompatible with the type SilverStripe\ORM\CMSPreviewable expected by parameter $record of SilverStripe\CMS\Control...avigator::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

24
        $navigator = new SilverStripeNavigator(/** @scrutinizer ignore-type */ $page);
Loading history...
25
26
        $items = $navigator->getItems();
27
        $classes = array_map('get_class', $items->toArray());
28
        $this->assertContains(
29
            SilverStripeNavigatorItem_StageLink::class,
30
            $classes,
31
            'Adds default classes'
32
        );
33
34
        $this->assertContains(
35
            SilverStripeNavigatorTest_TestItem::class,
36
            $classes,
37
            'Autodiscovers new classes'
38
        );
39
40
        // Non-versioned items don't have stage / live
41
    }
42
43
    public function testCanView()
44
    {
45
        $page = $this->objFromFixture(SiteTree::class, 'page1');
46
        $admin = $this->objFromFixture(Member::class, 'admin');
0 ignored issues
show
Unused Code introduced by
The assignment to $admin is dead and can be removed.
Loading history...
47
        $navigator = new SilverStripeNavigator($page);
0 ignored issues
show
Bug introduced by
$page of type SilverStripe\ORM\DataObject is incompatible with the type SilverStripe\ORM\CMSPreviewable expected by parameter $record of SilverStripe\CMS\Control...avigator::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

47
        $navigator = new SilverStripeNavigator(/** @scrutinizer ignore-type */ $page);
Loading history...
48
49
        // TODO Shouldn't be necessary but SapphireTest logs in as ADMIN by default
50
        $this->logInWithPermission('CMS_ACCESS_CMSMain');
51
        $items = $navigator->getItems();
52
        $classes = array_map('get_class', $items->toArray());
53
        $this->assertNotContains(SilverStripeNavigatorTest_ProtectedTestItem::class, $classes);
54
55
        $this->logInWithPermission('ADMIN');
56
        $items = $navigator->getItems();
57
        $classes = array_map('get_class', $items->toArray());
58
        $this->assertContains(SilverStripeNavigatorTest_ProtectedTestItem::class, $classes);
59
60
        // Unversioned record shouldn't be viewable in stage / live specific views
61
        $unversioned = new SilverStripeNavigatorTest\UnstagedRecord();
62
        $navigator2 = new SilverStripeNavigator($unversioned);
63
        $classes = array_map('get_class', $navigator2->getItems()->toArray());
64
        $this->assertNotContains(SilverStripeNavigatorItem_LiveLink::class, $classes);
65
        $this->assertNotContains(SilverStripeNavigatorItem_StageLink::class, $classes);
66
        $this->assertNotContains(SilverStripeNavigatorItem_ArchiveLink::class, $classes);
67
    }
68
}
69