Completed
Pull Request — master (#107)
by Simon
01:50
created

AnnotatePermissionCheckerTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 82
rs 10
c 0
b 0
f 0
wmc 6

6 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 11 1
A testModuleIsAllowed() 0 5 1
A testAnnotatePermissionChecker() 0 6 1
A tearDown() 0 3 1
A testIsEnabled() 0 8 1
A testDataObjectIsAllowed() 0 12 1
1
<?php
2
3
namespace SilverLeague\IDEAnnotator\Tests;
4
5
use SilverLeague\IDEAnnotator\AnnotatePermissionChecker;
6
use SilverLeague\IDEAnnotator\DataObjectAnnotator;
7
use SilverStripe\Assets\File;
8
use SilverStripe\Control\Director;
9
use SilverStripe\Core\Config\Config;
10
use SilverStripe\Core\Injector\Injector;
11
use SilverStripe\Dev\SapphireTest;
12
use SilverStripe\ORM\DataObject;
13
14
/**
15
 * Class DataObjectAnnotatorTest
16
 *
17
 * @mixin \PHPUnit_Framework_TestCase
18
 */
19
class AnnotatePermissionCheckerTest extends SapphireTest
20
{
21
22
    /**
23
     * @var AnnotatePermissionChecker $permissionChecker
24
     */
25
    private $permissionChecker = null;
26
27
    /**
28
     * @var MockDataObjectAnnotator
29
     */
30
    private $annotator;
31
32
    /**
33
     * Setup Defaults
34
     */
35
    protected function setUp()
36
    {
37
        parent::setUp();
38
        Config::modify()->set(Director::class, 'environment_type', 'dev');
39
        Config::modify()->set(DataObjectAnnotator::class, 'enabled', true);
40
        Config::modify()->set(DataObjectAnnotator::class, 'enabled_modules', ['silverleague/ideannotator', 'mysite']);
41
42
        Config::modify()->merge(Team::class, 'extensions', [Team_Extension::class]);
43
44
        $this->annotator = Injector::inst()->get(MockDataObjectAnnotator::class);
45
        $this->permissionChecker = Injector::inst()->get(AnnotatePermissionChecker::class);
46
    }
47
48
    /**
49
     * Check if we're enabled
50
     */
51
    public function testIsEnabled()
52
    {
53
        $this->assertTrue($this->permissionChecker->isEnabled());
54
55
        Config::modify()->set(DataObjectAnnotator::class, 'enabled', false);
56
        $this->assertFalse($this->permissionChecker->isEnabled());
57
        // Set everything back to normal
58
        Config::modify()->set(DataObjectAnnotator::class, 'enabled', true);
59
    }
60
61
    public function testAnnotatePermissionChecker()
62
    {
63
        Config::modify()->set(DataObjectAnnotator::class, 'enabled', false);
64
        $this->assertFalse($this->permissionChecker->environmentIsAllowed());
65
        Config::modify()->set(DataObjectAnnotator::class, 'enabled', true);
66
        $this->assertTrue($this->permissionChecker->environmentIsAllowed());
67
    }
68
69
    /**
70
     * Test is a module name is in the @Config enabled_modules
71
     * and will be seen as allowed or disallowed correctly
72
     */
73
    public function testModuleIsAllowed()
74
    {
75
        $this->assertFalse($this->permissionChecker->moduleIsAllowed('framework'));
76
        $this->assertTrue($this->permissionChecker->moduleIsAllowed('mysite'));
77
        $this->assertTrue($this->permissionChecker->moduleIsAllowed('silverleague/ideannotator'));
78
    }
79
80
    /**
81
     * Test if a DataObject is in an allowed module name
82
     * and will be seen as allowed or disallowed correctly
83
     */
84
    public function testDataObjectIsAllowed()
85
    {
86
        $this->assertTrue($this->permissionChecker->classNameIsAllowed(Team::class));
87
        $this->assertTrue($this->permissionChecker->classNameIsAllowed(Team_Extension::class));
88
89
        $this->assertFalse($this->permissionChecker->classNameIsAllowed(DataObject::class));
90
        $this->assertFalse($this->permissionChecker->classNameIsAllowed(File::class));
91
92
        Config::modify()->remove(DataObjectAnnotator::class, 'enabled_modules');
93
        Config::modify()->set(DataObjectAnnotator::class, 'enabled_modules', ['mysite']);
94
95
        $this->assertFalse($this->permissionChecker->classNameIsAllowed(Team::class));
96
    }
97
98
    public function tearDown()
99
    {
100
        parent::tearDown();
101
    }
102
}
103