Completed
Pull Request — master (#4037)
by Muhlis
02:38
created

PermissionsTest::testPermissionThroughRole()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 56

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 56
rs 8.9599
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
use Encore\Admin\Auth\Database\Administrator;
4
use Encore\Admin\Auth\Database\Permission;
5
use Encore\Admin\Auth\Database\Role;
6
7
class PermissionsTest extends TestCase
8
{
9
    public function setUp()
10
    {
11
        parent::setUp();
12
13
        $this->be(Administrator::first(), 'admin');
14
    }
15
16
    public function testPermissionsIndex()
17
    {
18
        $this->assertTrue(Administrator::first()->isAdministrator());
19
20
        $this->visit('admin/auth/permissions')
21
            ->see('Permissions');
22
    }
23
24
    public function testAddAndDeletePermissions()
25
    {
26
        $this->visit('admin/auth/permissions/create')
27
            ->see('Permissions')
28
            ->submitForm('Submit', ['slug' => 'can-edit', 'name' => 'Can edit', 'http_path' => 'users/1/edit', 'http_method' => ['GET']])
29
            ->seePageIs('admin/auth/permissions')
30
            ->visit('admin/auth/permissions/create')
31
            ->see('Permissions')
32
            ->submitForm('Submit', ['slug' => 'can-delete', 'name' => 'Can delete', 'http_path' => 'users/1', 'http_method' => ['DELETE']])
33
            ->seePageIs('admin/auth/permissions')
34
            ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-edit', 'name' => 'Can edit', 'http_path' => 'users/1/edit', 'http_method' => 'GET'])
35
            ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-delete', 'name' => 'Can delete', 'http_path' => 'users/1', 'http_method' => 'DELETE'])
36
            ->assertEquals(7, Permission::count());
37
38
        $this->assertTrue(Administrator::first()->can('can-edit'));
39
        $this->assertTrue(Administrator::first()->can('can-delete'));
40
41
        $this->delete('admin/auth/permissions/6')
42
            ->assertEquals(6, Permission::count());
43
44
        $this->delete('admin/auth/permissions/7')
45
            ->assertEquals(5, Permission::count());
46
    }
47
48
    public function testAddPermissionToRole()
49
    {
50
        $this->visit('admin/auth/permissions/create')
51
            ->see('Permissions')
52
            ->submitForm('Submit', ['slug' => 'can-create', 'name' => 'Can Create', 'http_path' => 'users/create', 'http_method' => ['GET']])
53
            ->seePageIs('admin/auth/permissions');
54
55
        $this->assertEquals(6, Permission::count());
56
57
        $this->visit('admin/auth/roles/1/edit')
58
            ->see('Edit')
59
            ->submitForm('Submit', ['permissions' => [1]])
60
            ->seePageIs('admin/auth/roles')
61
            ->seeInDatabase(config('admin.database.role_permissions_table'), ['role_id' => 1, 'permission_id' => 1]);
62
    }
63
64
    public function testAddPermissionToUser()
65
    {
66
        $this->visit('admin/auth/permissions/create')
67
            ->see('Permissions')
68
            ->submitForm('Submit', ['slug' => 'can-create', 'name' => 'Can Create', 'http_path' => 'users/create', 'http_method' => ['GET']])
69
            ->seePageIs('admin/auth/permissions');
70
71
        $this->assertEquals(6, Permission::count());
72
73
        $this->visit('admin/auth/users/1/edit')
74
            ->see('Edit')
75
            ->submitForm('Submit', ['permissions' => [1], 'roles' => [1]])
76
            ->seePageIs('admin/auth/users')
77
            ->seeInDatabase(config('admin.database.user_permissions_table'), ['user_id' => 1, 'permission_id' => 1])
78
            ->seeInDatabase(config('admin.database.role_users_table'), ['user_id' => 1, 'role_id' => 1]);
79
    }
80
81
    public function testAddUserAndAssignPermission()
82
    {
83
        $user = [
84
            'username'              => 'Test',
85
            'name'                  => 'Name',
86
            'password'              => '123456',
87
            'password_confirmation' => '123456',
88
        ];
89
90
        $this->visit('admin/auth/users/create')
91
            ->see('Create')
92
            ->submitForm('Submit', $user)
93
            ->seePageIs('admin/auth/users')
94
            ->seeInDatabase(config('admin.database.users_table'), ['username' => 'Test']);
95
96
        $this->assertFalse(Administrator::find(2)->isAdministrator());
97
98
        $this->visit('admin/auth/permissions/create')
99
            ->see('Permissions')
100
            ->submitForm('Submit', ['slug' => 'can-update', 'name' => 'Can Update', 'http_path' => 'users/*/edit', 'http_method' => ['GET']])
101
            ->seePageIs('admin/auth/permissions');
102
103
        $this->assertEquals(6, Permission::count());
104
105
        $this->visit('admin/auth/permissions/create')
106
            ->see('Permissions')
107
            ->submitForm('Submit', ['slug' => 'can-remove', 'name' => 'Can Remove', 'http_path' => 'users/*', 'http_method' => ['DELETE']])
108
            ->seePageIs('admin/auth/permissions');
109
110
        $this->assertEquals(7, Permission::count());
111
112
        $this->visit('admin/auth/users/2/edit')
113
            ->see('Edit')
114
            ->submitForm('Submit', ['permissions' => [6]])
115
            ->seePageIs('admin/auth/users')
116
            ->seeInDatabase(config('admin.database.user_permissions_table'), ['user_id' => 2, 'permission_id' => 6]);
117
118
        $this->assertTrue(Administrator::find(2)->can('can-update'));
119
        $this->assertTrue(Administrator::find(2)->cannot('can-remove'));
120
121
        $this->visit('admin/auth/users/2/edit')
122
            ->see('Edit')
123
            ->submitForm('Submit', ['permissions' => [7]])
124
            ->seePageIs('admin/auth/users')
125
            ->seeInDatabase(config('admin.database.user_permissions_table'), ['user_id' => 2, 'permission_id' => 7]);
126
127
        $this->assertTrue(Administrator::find(2)->can('can-remove'));
128
129
        $this->visit('admin/auth/users/2/edit')
130
            ->see('Edit')
131
            ->submitForm('Submit', ['permissions' => []])
132
            ->seePageIs('admin/auth/users')
133
            ->missingFromDatabase(config('admin.database.user_permissions_table'), ['user_id' => 2, 'permission_id' => 6])
134
            ->missingFromDatabase(config('admin.database.user_permissions_table'), ['user_id' => 2, 'permission_id' => 7]);
135
136
        $this->assertTrue(Administrator::find(2)->cannot('can-update'));
137
        $this->assertTrue(Administrator::find(2)->cannot('can-remove'));
138
    }
139
140
    public function testPermissionThroughRole()
141
    {
142
        $user = [
143
            'username'              => 'Test',
144
            'name'                  => 'Name',
145
            'password'              => '123456',
146
            'password_confirmation' => '123456',
147
        ];
148
149
        // 1.add a user
150
        $this->visit('admin/auth/users/create')
151
            ->see('Create')
152
            ->submitForm('Submit', $user)
153
            ->seePageIs('admin/auth/users')
154
            ->seeInDatabase(config('admin.database.users_table'), ['username' => 'Test']);
155
156
        $this->assertFalse(Administrator::find(2)->isAdministrator());
157
158
        // 2.add a role
159
        $this->visit('admin/auth/roles/create')
160
            ->see('Roles')
161
            ->submitForm('Submit', ['slug' => 'developer', 'name' => 'Developer...'])
162
            ->seePageIs('admin/auth/roles')
163
            ->seeInDatabase(config('admin.database.roles_table'), ['slug' => 'developer', 'name' => 'Developer...'])
164
            ->assertEquals(2, Role::count());
165
166
        $this->assertFalse(Administrator::find(2)->isRole('developer'));
167
168
        // 3.assign role to user
169
        $this->visit('admin/auth/users/2/edit')
170
            ->see('Edit')
171
            ->submitForm('Submit', ['roles' => [2]])
172
            ->seePageIs('admin/auth/users')
173
            ->seeInDatabase(config('admin.database.role_users_table'), ['user_id' => 2, 'role_id' => 2]);
174
175
        $this->assertTrue(Administrator::find(2)->isRole('developer'));
176
177
        //  4.add a permission
178
        $this->visit('admin/auth/permissions/create')
179
            ->see('Permissions')
180
            ->submitForm('Submit', ['slug' => 'can-remove', 'name' => 'Can Remove', 'http_path' => 'users/*', 'http_method' => ['DELETE']])
181
            ->seePageIs('admin/auth/permissions');
182
183
        $this->assertEquals(6, Permission::count());
184
185
        $this->assertTrue(Administrator::find(2)->cannot('can-remove'));
186
187
        // 5.assign permission to role
188
        $this->visit('admin/auth/roles/2/edit')
189
            ->see('Edit')
190
            ->submitForm('Submit', ['permissions' => [6]])
191
            ->seePageIs('admin/auth/roles')
192
            ->seeInDatabase(config('admin.database.role_permissions_table'), ['role_id' => 2, 'permission_id' => 6]);
193
194
        $this->assertTrue(Administrator::find(2)->can('can-remove'));
195
    }
196
197
    public function testEditPermission()
198
    {
199
        $this->visit('admin/auth/permissions/create')
200
            ->see('Permissions')
201
            ->submitForm('Submit', ['slug' => 'can-edit', 'name' => 'Can edit', 'http_path' => 'users/1/edit', 'http_method' => ['GET']])
202
            ->seePageIs('admin/auth/permissions')
203
            ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-edit'])
204
            ->seeInDatabase(config('admin.database.permissions_table'), ['name' => 'Can edit'])
205
            ->assertEquals(6, Permission::count());
206
207
        $this->visit('admin/auth/permissions/1/edit')
208
            ->see('Permissions')
209
            ->submitForm('Submit', ['slug' => 'can-delete'])
210
            ->seePageIs('admin/auth/permissions')
211
            ->seeInDatabase(config('admin.database.permissions_table'), ['slug' => 'can-delete'])
212
            ->assertEquals(6, Permission::count());
213
    }
214
}
215