Skip to content

Commit e48eac9

Browse files
committed
Brought all tests back to green.
1 parent 6f3054d commit e48eac9

11 files changed

+67
-16
lines changed

database/seeders/LaravelGovernorPermissionsTableSeeder.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ public function run()
2121

2222
foreach ($entities as $entity) {
2323
foreach ($actions as $action) {
24-
(new $permissionClass)->firstOrCreate([
24+
$permission = (new $permissionClass)->firstOrNew([
2525
"role_name" => $superadmin->name,
2626
"action_name" => $action->name,
2727
"ownership_name" => $ownership->name,
2828
"entity_name" => $entity->name,
2929
]);
30+
$permission->saveQuietly();
3031
}
3132
}
3233
}

src/Permission.php

+22
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,28 @@ class Permission extends Model
2424
];
2525
protected $table = "governor_permissions";
2626

27+
protected static function syncPermissionsSingleton(): void
28+
{
29+
$permissionClass = config("genealabs-laravel-governor.models.permission");
30+
$permissions = (new $permissionClass)
31+
->with("role", "team")
32+
->toBase()
33+
->get();
34+
app()->instance("governor-permissions", $permissions);
35+
}
36+
37+
public static function boot(): void
38+
{
39+
parent::boot();
40+
41+
static::saved(function () {
42+
self::syncPermissionsSingleton();
43+
});
44+
static::deleted(function () {
45+
self::syncPermissionsSingleton();
46+
});
47+
}
48+
2749
public function entity(): BelongsTo
2850
{
2951
return $this->belongsTo(

src/Policies/BasePolicy.php

+6-3
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,17 @@ protected function validatePermissions(
128128
return true;
129129
}
130130

131-
if ($user->roles->isEmpty()
131+
if (
132+
$user->roles->isEmpty()
132133
&& $user->teams->isEmpty()
133134
) {
134135
return false;
135136
}
136137

137138
$ownership = 'other';
138139

139-
if ($model
140+
if (
141+
$model
140142
&& $user->getKey() == $model->governor_owned_by
141143
) {
142144
$ownership = 'own';
@@ -145,7 +147,8 @@ protected function validatePermissions(
145147
$filteredPermissions = $this->filterPermissions($action, $entity, $ownership);
146148

147149
foreach ($filteredPermissions as $permission) {
148-
if ($user->roles->pluck("name")->contains($permission->role_name)
150+
if (
151+
$user->roles->pluck("name")->contains($permission->role_name)
149152
|| $user->teams->pluck("id")->contains($permission->team_id)
150153
) {
151154
return true;

src/Traits/Governable.php

+7-5
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ protected function applyPermissionToQuery(Builder $query, string $ability): Buil
1818
$entityName = $this->getEntityFromModel(get_class($this));
1919
$ownerships = $this->getOwnershipsForEntity($entityName, $ability);
2020

21-
return $this->filterQuery($query, $ownerships);
21+
return $this->filterQuery($query, $ownerships->pluck("ownership_name"));
2222
}
2323

2424
protected function filterQuery(Builder $query, Collection $ownerships): Builder
2525
{
2626
if (
27-
$ownerships->pluck("ownership_name")->contains("any")
27+
$ownerships->contains("any")
2828
|| auth()->user()->hasRole("SuperAdmin")
2929
) {
3030
return $query;
@@ -35,7 +35,6 @@ protected function filterQuery(Builder $query, Collection $ownerships): Builder
3535
$authTable = (new $authModel)->getTable();
3636

3737
if (method_exists($query->getModel(), "teams")) {
38-
3938
if ($query->getModel()->getTable() === $authTable) {
4039
return $query
4140
->whereHas("teams", function ($query) {
@@ -55,12 +54,15 @@ protected function filterQuery(Builder $query, Collection $ownerships): Builder
5554
}
5655

5756
if ($query->getModel()->getTable() === $authTable) {
58-
return $query->where($query->getModel()->getKeyName(), auth()->user()->getKey());
57+
return $query->where(
58+
$query->getModel()->getKeyName(),
59+
auth()->user()->getKey(),
60+
);
5961
}
6062

6163
return $query->where(
6264
"{$query->getModel()->getTable()}.governor_owned_by",
63-
auth()->user()->getKey()
65+
auth()->user()->getKey(),
6466
);
6567
}
6668

src/Traits/GovernorOwnedByField.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
trait GovernorOwnedByField
1414
{
15-
protected function createGovernorOwnedByFieldsByPolicy(BasePolicy $policy) : bool
15+
protected function createGovernorOwnedByFieldsByPolicy(BasePolicy $policy): bool
1616
{
1717
$gate = app("Illuminate\Contracts\Auth\Access\Gate");
1818
$reflection = new ReflectionClass($gate);

tests/CreatesApplication.php

+22-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ protected function getPackageProviders($app)
3737
];
3838
}
3939

40-
protected function setUp() : void
40+
protected function setUp(): void
4141
{
4242
parent::setUp();
4343

@@ -50,5 +50,26 @@ protected function setUp() : void
5050
'--class' => LaravelGovernorDatabaseSeeder::class,
5151
'--no-interaction' => true
5252
]);
53+
54+
$actionClass = app(config('genealabs-laravel-governor.models.action'));
55+
$entityClass = app(config('genealabs-laravel-governor.models.entity'));
56+
$roleClass = config("genealabs-laravel-governor.models.role");
57+
$actions = (new $actionClass)
58+
->orderBy("name")
59+
->get();
60+
$entities = (new $entityClass)
61+
->select("name")
62+
->with("group:name")
63+
->orderBy("name")
64+
->toBase()
65+
->get();
66+
$roles = (new $roleClass)
67+
->select('name')
68+
->toBase()
69+
->get();
70+
71+
app()->instance("governor-actions", $actions);
72+
app()->instance("governor-entities", $entities);
73+
app()->instance("governor-roles", $roles);
5374
}
5475
}

tests/Integration/Traits/GovernableTest.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ public function testScopeViewableWithAnyPermission()
165165
$this->assertTrue($results->contains($this->otherAuthor));
166166
}
167167

168-
/** @group test */
169168
public function testScopeViewableWithOwnPermission()
170169
{
171170
(new Permission)->firstOrCreate([
@@ -193,7 +192,7 @@ public function testScopeViewableWithOwnPermission()
193192
$userResults = (new $userClass)
194193
->viewable()
195194
->get();
196-
// dd($authorResults, $this->otherAuthor, $authorResults->contains($this->otherAuthor));
195+
197196
$this->assertTrue($authorResults->isNotEmpty());
198197
$this->assertTrue($authorResults->contains($this->author));
199198
$this->assertFalse($authorResults->contains($this->otherAuthor));

tests/Integration/Traits/GoverningTest.php

-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ public function testOwnedTeamsRelationship()
5252
$this->assertTrue($this->user->ownedTeams->contains($this->team));
5353
}
5454

55-
/** @group test */
5655
public function testPermissionsAttribute()
5756
{
5857
$permission = (new Permission)->create([

tests/Integration/Traits/GovernorOwnedByFieldTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@ public function testUsingPolicyWhereModelDoesntHaveGovernorOwnedByField()
3030
{
3131
$result = $this->createGovernorOwnedByFields(new User);
3232

33-
$this->assertTrue($result);
33+
$this->assertFalse($result);
3434
}
3535
}

tests/UnitTestCase.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
<?php namespace GeneaLabs\LaravelGovernor\Tests;
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace GeneaLabs\LaravelGovernor\Tests;
26

37
use Orchestra\Testbench\TestCase;
48

tests/database/database.sqlite

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)