testLoadPolicyAddsLoadedDataToModel()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 18
c 1
b 1
f 0
dl 0
loc 25
rs 9.6666
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AbterPhp\Admin\Authorization;
6
7
use AbterPhp\Admin\Databases\Queries\AdminResourceAuthLoader;
8
use Casbin\Exceptions\CasbinException;
9
use Casbin\Model\Model;
10
use PHPUnit\Framework\MockObject\MockObject;
11
use PHPUnit\Framework\TestCase;
12
13
class AdminResourceProviderTest extends TestCase
14
{
15
    /** @var AdminResourceProvider - System Under Test */
16
    protected AdminResourceProvider $sut;
17
18
    /** @var MockObject|AdminResourceAuthLoader */
19
    protected $authLoaderMock;
20
21
    public function setUp(): void
22
    {
23
        $this->authLoaderMock = $this->createMock(AdminResourceAuthLoader::class);
24
25
        $this->sut = new AdminResourceProvider($this->authLoaderMock);
26
    }
27
28
    public function testLoadPolicyLoadsData()
29
    {
30
        $modelMock = $this->getMockBuilder(Model::class)
31
            ->disableOriginalConstructor()
32
            ->getMock();
33
34
        $this->authLoaderMock->expects($this->once())->method('loadAll')->willReturn([]);
35
36
        $this->sut->loadPolicy($modelMock);
37
    }
38
39
    public function testLoadPolicyAddsLoadedDataToModel()
40
    {
41
        $v00 = 'foo';
42
        $v01 = 'bar';
43
        $v10 = 'baz';
44
        $v11 = 'quix';
45
        $loadedData = [
46
            ['v0' => $v00, 'v1' => $v01],
47
            ['v0' => $v10, 'v1' => $v11],
48
        ];
49
50
        $policyContainer = new \stdClass();
51
        $policyContainer->policy = [];
52
53
        $modelMock = $this->getMockBuilder(Model::class)
54
            ->disableOriginalConstructor()
55
            ->getMock();
56
        $modelMock->expects($this->exactly(4))->method('addPolicy');
57
58
        $this->authLoaderMock
59
            ->expects($this->once())
60
            ->method('loadAll')
61
            ->willReturn($loadedData);
62
63
        $this->sut->loadPolicy($modelMock);
64
    }
65
66
    public function testSavePolicyReturnsTrue()
67
    {
68
        $this->expectException(CasbinException::class);
69
70
        $modelMock = $this->getMockBuilder(Model::class)
71
            ->disableOriginalConstructor()
72
            ->getMock();
73
74
        $this->sut->savePolicy($modelMock);
75
    }
76
77
    public function testAddPolicyDoesNotThrowException()
78
    {
79
        $this->expectException(CasbinException::class);
80
81
        $this->sut->addPolicy('foo', 'bar', []);
82
    }
83
84
    public function testRemovePolicyReturnZero()
85
    {
86
        $this->expectException(CasbinException::class);
87
88
        $this->sut->removePolicy('foo', 'bar', []);
89
    }
90
91
    public function testRemoveFilterPolicyThrowsCasbinException()
92
    {
93
        $this->expectException(CasbinException::class);
94
95
        $this->sut->removeFilteredPolicy('foo', 'bar', 0);
96
    }
97
}
98