Skip to content

Commit 68d3ef3

Browse files
authored
Teams test fixes, global helper setPermissionsTeamId on tests (#1911)
Co-authored-by: Erik Niebla <ep_niebla@hotmail.com>
1 parent 0da24db commit 68d3ef3

9 files changed

+120
-70
lines changed

docs/basic-usage/teams-permissions.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ class TeamsPermission{
3434
public function handle($request, \Closure $next){
3535
if(!empty(auth()->user())){
3636
// session value set on login
37-
app(\Spatie\Permission\PermissionRegistrar::class)->setPermissionsTeamId(session('team_id'));
37+
setPermissionsTeamId(session('team_id'));
3838
}
3939
// other custom ways to get team_id
4040
/*if(!empty(auth('api')->user())){
4141
// `getTeamIdFromToken()` example of custom method for getting the set team_id
42-
app(\Spatie\Permission\PermissionRegistrar::class)->setPermissionsTeamId(auth('api')->user()->getTeamIdFromToken());
42+
setPermissionsTeamId(auth('api')->user()->getTeamIdFromToken());
4343
}*/
4444

4545
return $next($request);

src/PermissionRegistrar.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class PermissionRegistrar
4141
/** @var string */
4242
public static $teamsKey;
4343

44-
/** @var int */
44+
/** @var int|string */
4545
protected $teamId = null;
4646

4747
/** @var string */
@@ -163,7 +163,7 @@ public function clearClassPermissions()
163163
*/
164164
private function loadPermissions()
165165
{
166-
if ($this->permissions !== null) {
166+
if ($this->permissions) {
167167
return;
168168
}
169169

tests/HasPermissionsTest.php

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Spatie\Permission\Test;
44

5+
use DB;
56
use Spatie\Permission\Contracts\Permission;
67
use Spatie\Permission\Contracts\Role;
78
use Spatie\Permission\Exceptions\GuardDoesNotMatch;
@@ -381,7 +382,7 @@ public function it_can_list_all_the_permissions_via_roles_of_user()
381382

382383
$this->assertEquals(
383384
collect(['edit-articles', 'edit-news']),
384-
$this->testUser->getPermissionsViaRoles()->pluck('name')
385+
$this->testUser->getPermissionsViaRoles()->pluck('name')->sort()->values()
385386
);
386387
}
387388

@@ -491,17 +492,16 @@ public function calling_givePermissionTo_before_saving_object_doesnt_interfere_w
491492
$user2 = new User(['email' => 'test2@user.com']);
492493
$user2->givePermissionTo('edit-articles');
493494

494-
\DB::enableQueryLog();
495+
DB::enableQueryLog();
495496
$user2->save();
496-
$querys = \DB::getQueryLog();
497-
\DB::disableQueryLog();
497+
DB::disableQueryLog();
498498

499499
$this->assertTrue($user->fresh()->hasPermissionTo('edit-news'));
500500
$this->assertFalse($user->fresh()->hasPermissionTo('edit-articles'));
501501

502502
$this->assertTrue($user2->fresh()->hasPermissionTo('edit-articles'));
503503
$this->assertFalse($user2->fresh()->hasPermissionTo('edit-news'));
504-
$this->assertSame(4, count($querys)); //avoid unnecessary sync
504+
$this->assertSame(4, count(DB::getQueryLog())); //avoid unnecessary sync
505505
}
506506

507507
/** @test */
@@ -514,17 +514,16 @@ public function calling_syncPermissions_before_saving_object_doesnt_interfere_wi
514514
$user2 = new User(['email' => 'test2@user.com']);
515515
$user2->syncPermissions('edit-articles');
516516

517-
\DB::enableQueryLog();
517+
DB::enableQueryLog();
518518
$user2->save();
519-
$querys = \DB::getQueryLog();
520-
\DB::disableQueryLog();
519+
DB::disableQueryLog();
521520

522521
$this->assertTrue($user->fresh()->hasPermissionTo('edit-news'));
523522
$this->assertFalse($user->fresh()->hasPermissionTo('edit-articles'));
524523

525524
$this->assertTrue($user2->fresh()->hasPermissionTo('edit-articles'));
526525
$this->assertFalse($user2->fresh()->hasPermissionTo('edit-news'));
527-
$this->assertSame(4, count($querys)); //avoid unnecessary sync
526+
$this->assertSame(4, count(DB::getQueryLog())); //avoid unnecessary sync
528527
}
529528

530529
/** @test */

tests/HasPermissionsWithCustomModelsTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ class HasPermissionsWithCustomModelsTest extends HasPermissionsTest
88
protected $useCustomModels = true;
99

1010
/** @test */
11-
public function it_can_use_custom_models()
11+
public function it_can_use_custom_model_permission()
1212
{
13-
$this->assertSame(get_class($this->testUserPermission), \Spatie\Permission\Test\Permission::class);
14-
$this->assertSame(get_class($this->testUserRole), \Spatie\Permission\Test\Role::class);
13+
$this->assertSame(get_class($this->testUserPermission), Permission::class);
1514
}
1615
}

tests/HasRolesTest.php

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Spatie\Permission\Test;
44

5+
use DB;
56
use Spatie\Permission\Contracts\Role;
67
use Spatie\Permission\Exceptions\GuardDoesNotMatch;
78
use Spatie\Permission\Exceptions\RoleDoesNotExist;
@@ -246,17 +247,16 @@ public function calling_syncRoles_before_saving_object_doesnt_interfere_with_oth
246247
$user2 = new User(['email' => 'admin@user.com']);
247248
$user2->syncRoles('testRole2');
248249

249-
\DB::enableQueryLog();
250+
DB::enableQueryLog();
250251
$user2->save();
251-
$querys = \DB::getQueryLog();
252-
\DB::disableQueryLog();
252+
DB::disableQueryLog();
253253

254254
$this->assertTrue($user->fresh()->hasRole('testRole'));
255255
$this->assertFalse($user->fresh()->hasRole('testRole2'));
256256

257257
$this->assertTrue($user2->fresh()->hasRole('testRole2'));
258258
$this->assertFalse($user2->fresh()->hasRole('testRole'));
259-
$this->assertSame(4, count($querys)); //avoid unnecessary sync
259+
$this->assertSame(4, count(DB::getQueryLog())); //avoid unnecessary sync
260260
}
261261

262262
/** @test */
@@ -269,17 +269,16 @@ public function calling_assignRole_before_saving_object_doesnt_interfere_with_ot
269269
$admin_user = new User(['email' => 'admin@user.com']);
270270
$admin_user->assignRole('testRole2');
271271

272-
\DB::enableQueryLog();
272+
DB::enableQueryLog();
273273
$admin_user->save();
274-
$querys = \DB::getQueryLog();
275-
\DB::disableQueryLog();
274+
DB::disableQueryLog();
276275

277276
$this->assertTrue($user->fresh()->hasRole('testRole'));
278277
$this->assertFalse($user->fresh()->hasRole('testRole2'));
279278

280279
$this->assertTrue($admin_user->fresh()->hasRole('testRole2'));
281280
$this->assertFalse($admin_user->fresh()->hasRole('testRole'));
282-
$this->assertSame(4, count($querys)); //avoid unnecessary sync
281+
$this->assertSame(4, count(DB::getQueryLog())); //avoid unnecessary sync
283282
}
284283

285284
/** @test */
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace Spatie\Permission\Test;
4+
5+
class HasRolesWithCustomModelsTest extends HasRolesTest
6+
{
7+
/** @var bool */
8+
protected $useCustomModels = true;
9+
10+
/** @test */
11+
public function it_can_use_custom_model_role()
12+
{
13+
$this->assertSame(get_class($this->testUserRole), Role::class);
14+
}
15+
}

tests/TeamHasPermissionsTest.php

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ class TeamHasPermissionsTest extends HasPermissionsTest
1010
/** @test */
1111
public function it_can_assign_same_and_different_permission_on_same_user_on_different_teams()
1212
{
13-
$this->setPermissionsTeamId(1);
13+
setPermissionsTeamId(1);
1414
$this->testUser->load('permissions');
1515
$this->testUser->givePermissionTo('edit-articles', 'edit-news');
1616

17-
$this->setPermissionsTeamId(2);
17+
setPermissionsTeamId(2);
1818
$this->testUser->load('permissions');
1919
$this->testUser->givePermissionTo('edit-articles', 'edit-blog');
2020

21-
$this->setPermissionsTeamId(1);
21+
setPermissionsTeamId(1);
2222
$this->testUser->load('permissions');
2323
$this->assertEquals(
2424
collect(['edit-articles', 'edit-news']),
@@ -27,7 +27,7 @@ public function it_can_assign_same_and_different_permission_on_same_user_on_diff
2727
$this->assertTrue($this->testUser->hasAllDirectPermissions(['edit-articles', 'edit-news']));
2828
$this->assertFalse($this->testUser->hasAllDirectPermissions(['edit-articles', 'edit-blog']));
2929

30-
$this->setPermissionsTeamId(2);
30+
setPermissionsTeamId(2);
3131
$this->testUser->load('permissions');
3232
$this->assertEquals(
3333
collect(['edit-articles', 'edit-blog']),
@@ -42,17 +42,17 @@ public function it_can_list_all_the_coupled_permissions_both_directly_and_via_ro
4242
{
4343
$this->testUserRole->givePermissionTo('edit-articles');
4444

45-
$this->setPermissionsTeamId(1);
45+
setPermissionsTeamId(1);
4646
$this->testUser->load('permissions');
4747
$this->testUser->assignRole('testRole');
4848
$this->testUser->givePermissionTo('edit-news');
4949

50-
$this->setPermissionsTeamId(2);
50+
setPermissionsTeamId(2);
5151
$this->testUser->load('permissions');
5252
$this->testUser->assignRole('testRole');
5353
$this->testUser->givePermissionTo('edit-blog');
5454

55-
$this->setPermissionsTeamId(1);
55+
setPermissionsTeamId(1);
5656
$this->testUser->load('roles');
5757
$this->testUser->load('permissions');
5858

@@ -61,7 +61,7 @@ public function it_can_list_all_the_coupled_permissions_both_directly_and_via_ro
6161
$this->testUser->getAllPermissions()->pluck('name')->sort()->values()
6262
);
6363

64-
$this->setPermissionsTeamId(2);
64+
setPermissionsTeamId(2);
6565
$this->testUser->load('roles');
6666
$this->testUser->load('permissions');
6767

@@ -74,15 +74,15 @@ public function it_can_list_all_the_coupled_permissions_both_directly_and_via_ro
7474
/** @test */
7575
public function it_can_sync_or_remove_permission_without_detach_on_different_teams()
7676
{
77-
$this->setPermissionsTeamId(1);
77+
setPermissionsTeamId(1);
7878
$this->testUser->load('permissions');
7979
$this->testUser->syncPermissions('edit-articles', 'edit-news');
8080

81-
$this->setPermissionsTeamId(2);
81+
setPermissionsTeamId(2);
8282
$this->testUser->load('permissions');
8383
$this->testUser->syncPermissions('edit-articles', 'edit-blog');
8484

85-
$this->setPermissionsTeamId(1);
85+
setPermissionsTeamId(1);
8686
$this->testUser->load('permissions');
8787

8888
$this->assertEquals(
@@ -96,11 +96,40 @@ public function it_can_sync_or_remove_permission_without_detach_on_different_tea
9696
$this->testUser->getPermissionNames()->sort()->values()
9797
);
9898

99-
$this->setPermissionsTeamId(2);
99+
setPermissionsTeamId(2);
100100
$this->testUser->load('permissions');
101101
$this->assertEquals(
102102
collect(['edit-articles', 'edit-blog']),
103103
$this->testUser->getPermissionNames()->sort()->values()
104104
);
105105
}
106+
107+
/** @test */
108+
public function it_can_scope_users_on_different_teams()
109+
{
110+
$user1 = User::create(['email' => 'user1@test.com']);
111+
$user2 = User::create(['email' => 'user2@test.com']);
112+
113+
setPermissionsTeamId(2);
114+
$user1->givePermissionTo(['edit-articles', 'edit-news']);
115+
$this->testUserRole->givePermissionTo('edit-articles');
116+
$user2->assignRole('testRole');
117+
118+
setPermissionsTeamId(1);
119+
$user1->givePermissionTo(['edit-articles']);
120+
121+
setPermissionsTeamId(2);
122+
$scopedUsers1Team2 = User::permission(['edit-articles', 'edit-news'])->get();
123+
$scopedUsers2Team2 = User::permission('edit-news')->get();
124+
125+
$this->assertEquals(2, $scopedUsers1Team2->count());
126+
$this->assertEquals(1, $scopedUsers2Team2->count());
127+
128+
setPermissionsTeamId(1);
129+
$scopedUsers1Team1 = User::permission(['edit-articles', 'edit-news'])->get();
130+
$scopedUsers2Team1 = User::permission('edit-news')->get();
131+
132+
$this->assertEquals(1, $scopedUsers1Team1->count());
133+
$this->assertEquals(0, $scopedUsers2Team1->count());
134+
}
106135
}

tests/TeamHasRolesTest.php

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ public function it_can_assign_same_and_different_roles_on_same_user_different_te
2222
$this->assertNotNull($testRole3Team1);
2323
$this->assertNotNull($testRole4NoTeam);
2424

25-
$this->setPermissionsTeamId(1);
25+
setPermissionsTeamId(1);
2626
$this->testUser->load('roles');
2727
$this->testUser->assignRole('testRole', 'testRole2');
2828

29-
$this->setPermissionsTeamId(2);
29+
setPermissionsTeamId(2);
3030
$this->testUser->load('roles');
3131
$this->testUser->assignRole('testRole', 'testRole3');
3232

33-
$this->setPermissionsTeamId(1);
33+
setPermissionsTeamId(1);
3434
$this->testUser->load('roles');
3535

3636
$this->assertEquals(
@@ -44,7 +44,7 @@ public function it_can_assign_same_and_different_roles_on_same_user_different_te
4444
$this->assertTrue($this->testUser->hasRole($testRole3Team1)); //testRole3 team=1
4545
$this->assertTrue($this->testUser->hasRole($testRole4NoTeam)); // global role team=null
4646

47-
$this->setPermissionsTeamId(2);
47+
setPermissionsTeamId(2);
4848
$this->testUser->load('roles');
4949

5050
$this->assertEquals(
@@ -63,15 +63,15 @@ public function it_can_sync_or_remove_roles_without_detach_on_different_teams()
6363
{
6464
app(Role::class)->create(['name' => 'testRole3', 'team_test_id' => 2]);
6565

66-
$this->setPermissionsTeamId(1);
66+
setPermissionsTeamId(1);
6767
$this->testUser->load('roles');
6868
$this->testUser->syncRoles('testRole', 'testRole2');
6969

70-
$this->setPermissionsTeamId(2);
70+
setPermissionsTeamId(2);
7171
$this->testUser->load('roles');
7272
$this->testUser->syncRoles('testRole', 'testRole3');
7373

74-
$this->setPermissionsTeamId(1);
74+
setPermissionsTeamId(1);
7575
$this->testUser->load('roles');
7676

7777
$this->assertEquals(
@@ -85,12 +85,40 @@ public function it_can_sync_or_remove_roles_without_detach_on_different_teams()
8585
$this->testUser->getRoleNames()->sort()->values()
8686
);
8787

88-
$this->setPermissionsTeamId(2);
88+
setPermissionsTeamId(2);
8989
$this->testUser->load('roles');
9090

9191
$this->assertEquals(
9292
collect(['testRole', 'testRole3']),
9393
$this->testUser->getRoleNames()->sort()->values()
9494
);
9595
}
96+
97+
/** @test */
98+
public function it_can_scope_users_on_different_teams()
99+
{
100+
$user1 = User::create(['email' => 'user1@test.com']);
101+
$user2 = User::create(['email' => 'user2@test.com']);
102+
103+
setPermissionsTeamId(2);
104+
$user1->assignRole($this->testUserRole);
105+
$user2->assignRole('testRole2');
106+
107+
setPermissionsTeamId(1);
108+
$user1->assignRole('testRole');
109+
110+
setPermissionsTeamId(2);
111+
$scopedUsers1Team1 = User::role($this->testUserRole)->get();
112+
$scopedUsers2Team1 = User::role(['testRole', 'testRole2'])->get();
113+
114+
$this->assertEquals(1, $scopedUsers1Team1->count());
115+
$this->assertEquals(2, $scopedUsers2Team1->count());
116+
117+
setPermissionsTeamId(1);
118+
$scopedUsers1Team2 = User::role($this->testUserRole)->get();
119+
$scopedUsers2Team2 = User::role('testRole2')->get();
120+
121+
$this->assertEquals(1, $scopedUsers1Team2->count());
122+
$this->assertEquals(0, $scopedUsers2Team2->count());
123+
}
96124
}

0 commit comments

Comments
 (0)