AssignmentTest::createRole()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 10

Duplication

Lines 10
Ratio 100 %

Importance

Changes 0
Metric Value
dl 10
loc 10
c 0
b 0
f 0
rs 9.9332
cc 2
nc 2
nop 0
1
<?php
2
3
namespace yii2mod\rbac\tests\models;
4
5
use Yii;
6
use yii\base\Exception;
7
use yii\rbac\Item;
8
use yii2mod\rbac\models\AssignmentModel;
9
use yii2mod\rbac\models\AuthItemModel;
10
use yii2mod\rbac\tests\data\User;
11
use yii2mod\rbac\tests\TestCase;
12
13
/**
14
 * Class AssignmentTest
15
 *
16
 * @package yii2mod\rbac\tests\models
17
 */
18
class AssignmentTest extends TestCase
19
{
20
    /**
21
     * @var string
22
     */
23
    private $_roleName = 'admin';
24
25
    /**
26
     * @var string
27
     */
28
    private $_permissionName = 'viewArticles';
29
30
    // Tests :
31
32 View Code Duplication
    public function testAssignRole()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
33
    {
34
        $this->createRole();
35
36
        $user = User::find()->one();
37
        $model = new AssignmentModel($user);
0 ignored issues
show
Documentation introduced by
$user is of type object<yii\db\ActiveRecord>|array|null, but the function expects a object<yii\web\IdentityInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
38
39
        $this->assertTrue($model->assign([$this->_roleName]));
40
        $this->assertArrayHasKey($this->_roleName, Yii::$app->authManager->getAssignments($user->id));
41
42
        return $model;
43
    }
44
45 View Code Duplication
    public function testAssignPermission()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
46
    {
47
        $this->createPermission();
48
49
        $user = User::find()->one();
50
        $model = new AssignmentModel($user);
0 ignored issues
show
Documentation introduced by
$user is of type object<yii\db\ActiveRecord>|array|null, but the function expects a object<yii\web\IdentityInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
51
52
        $this->assertTrue($model->assign([$this->_permissionName]));
53
        $this->assertArrayHasKey($this->_permissionName, Yii::$app->authManager->getAssignments($user->id));
54
55
        return $model;
56
    }
57
58
    /**
59
     * @depends testAssignRole
60
     * @depends testAssignPermission
61
     *
62
     * @param AssignmentModel $role
63
     * @param AssignmentModel $permission
64
     */
65
    public function testGetItems(AssignmentModel $role, AssignmentModel $permission)
66
    {
67
        $this->assertArrayHasKey($this->_roleName, $role->getItems()['assigned']);
68
        $this->assertArrayHasKey($this->_permissionName, $permission->getItems()['assigned']);
69
    }
70
71
    /**
72
     * @depends testAssignRole
73
     *
74
     * @param AssignmentModel $model
75
     */
76
    public function testRevokeRole(AssignmentModel $model)
77
    {
78
        $this->assertTrue($model->revoke([$this->_roleName]));
79
    }
80
81
    /**
82
     * @depends testAssignPermission
83
     *
84
     * @param AssignmentModel $model
85
     */
86
    public function testRevokePermission(AssignmentModel $model)
87
    {
88
        $this->assertTrue($model->revoke([$this->_permissionName]));
89
    }
90
91
    /**
92
     * Create role for testing purposes
93
     *
94
     * @throws Exception
95
     */
96 View Code Duplication
    private function createRole()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
97
    {
98
        $model = new AuthItemModel();
99
        $model->type = Item::TYPE_ROLE;
100
        $model->name = $this->_roleName;
101
102
        if (!$model->save()) {
103
            throw new Exception("A Role '{$this->_roleName}' has not been created.");
104
        }
105
    }
106
107
    /**
108
     * Create permission for testing purposes
109
     *
110
     * @throws Exception
111
     */
112 View Code Duplication
    private function createPermission()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
113
    {
114
        $model = new AuthItemModel();
115
        $model->type = Item::TYPE_ROLE;
116
        $model->name = $this->_permissionName;
117
118
        if (!$model->save()) {
119
            throw new Exception("A Permission '{$this->_permissionName}' has not been created.");
120
        }
121
    }
122
}
123