-
Notifications
You must be signed in to change notification settings - Fork 243
Expand file tree
/
Copy pathUserTest.php
More file actions
116 lines (89 loc) · 3.99 KB
/
UserTest.php
File metadata and controls
116 lines (89 loc) · 3.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
namespace Tests\Model;
use Illuminate\Support\Facades\Hash;
use ProcessMaker\Models\Group;
use ProcessMaker\Models\GroupMember;
use ProcessMaker\Models\Permission;
use ProcessMaker\Models\PermissionAssignment;
use ProcessMaker\Models\User;
use ProcessMaker\Providers\AuthServiceProvider;
use Tests\TestCase;
class UserTest extends TestCase
{
public function testPermissions()
{
$president_user = User::factory()->create(['password' => Hash::make('password')]);
$technician_user = User::factory()->create(['password' => Hash::make('password')]);
$mom_user = User::factory()->create(['password' => Hash::make('password')]);
$ln_permission = Permission::factory()->create([
'name' => 'launch.nukes',
]);
$dn_permission = Permission::factory()->create([
'name' => 'disarm.nukes',
]);
$nl_group = Group::factory()->create(['name' => 'Nuke Launchers']);
$p_group = Group::factory()->create(['name' => 'Presidents']);
GroupMember::factory()->create([
'group_id' => $nl_group->id,
'member_type' => User::class,
'member_id' => $technician_user,
]);
GroupMember::factory()->create([
'group_id' => $p_group->id,
'member_type' => User::class,
'member_id' => $president_user->id,
]);
$p_group->permissions()->attach($ln_permission);
$nl_group->permissions()->attach($dn_permission);
$mom_user->permissions()->attach($dn_permission);
$this->assertTrue($president_user->hasPermission('launch.nukes'));
// TODO: Groups belong to groups
// $this->assertTrue($president_user->hasPermission('disarm.nukes'));
$this->assertFalse($technician_user->hasPermission('launch.nukes'));
$this->assertTrue($technician_user->hasPermission('disarm.nukes'));
$this->assertTrue($mom_user->hasPermission('disarm.nukes'));
$this->assertFalse($mom_user->hasPermission('launch.nukes'));
}
public function testCanAnyFirst()
{
$user = User::factory()->create();
$p1 = Permission::factory()->create(['name' => 'foo']);
$p2 = Permission::factory()->create(['name' => 'bar']);
$p3 = Permission::factory()->create(['name' => 'baz']);
(new AuthServiceProvider(app()))->boot();
$this->assertFalse($user->can('bar'));
$this->assertFalse($user->canAnyFirst('foo|bar'));
$user->permissions()->attach($p2);
$user->permissions()->attach($p3);
$user->refresh();
$this->assertTrue($user->can('bar'));
$this->assertEquals('bar', $user->canAnyFirst('foo|bar'));
$this->assertEquals('baz', $user->canAnyFirst('foo|baz'));
}
public function testAddCategoryViewPermissions()
{
$testFor = [
'processes' => 'view-process-categories',
'scripts' => 'view-script-categories',
'screens' => 'view-screen-categories',
];
$testFor = function ($singular, $plural) {
$viewCatPerm = Permission::factory()->create(['name' => 'view-' . $singular . '-categories']);
$editCatePerm = Permission::factory()->create(['name' => 'edit-' . $singular . '-categories']);
foreach (['create', 'edit'] as $method) {
$user = User::factory()->create();
$perm = Permission::factory()->create(['name' => "{$method}-{$plural}"]);
(new AuthServiceProvider(app()))->boot();
$this->assertFalse($user->can($perm->name));
$this->assertFalse($user->can($viewCatPerm->name));
$user->permissions()->attach($perm);
$user->refresh();
$this->assertTrue($user->can($viewCatPerm->name));
$this->assertFalse($user->can($editCatePerm->name));
}
};
$testFor('process', 'processes');
$testFor('screen', 'screens');
$testFor('script', 'scripts');
}
}