Skip to content

Commit f8fdcee

Browse files
committed
Further tests
1 parent 30ea52e commit f8fdcee

File tree

3 files changed

+83
-1
lines changed

3 files changed

+83
-1
lines changed

tests/HasModelTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Phpsa\LaravelApiController\Tests\Models\User;
1010

1111
use function PHPUnit\Framework\assertArrayNotHasKey;
12+
use function PHPUnit\Framework\assertEquals;
1213
use function PHPUnit\Framework\assertTrue;
1314

1415
class HasModelTest extends TestCase
@@ -41,6 +42,9 @@ public function test_controller_makes_model_query_builder()
4142

4243
assertArrayNotHasKey('age', $res);
4344
$this->assertArrayHasKey('email', $res);
45+
46+
$getUnqualifiedTableName = self::getMethod($class, 'getUnqualifiedTableName');
47+
assertEquals('users', $getUnqualifiedTableName->invoke($class));
4448
}
4549

4650

tests/HasPoliciesTest.php

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?php
2+
3+
namespace Phpsa\LaravelApiController\Tests;
4+
5+
use Mockery;
6+
use Illuminate\Support\Facades\App;
7+
use Phpsa\LaravelApiController\Tests\TestCase;
8+
use Phpsa\LaravelApiController\Tests\Models\User;
9+
use Phpsa\LaravelApiController\Tests\Controllers\UserController;
10+
use Phpsa\LaravelApiController\Tests\Models\Policies\UserPolicy;
11+
12+
use function PHPUnit\Framework\assertTrue;
13+
14+
class HasPoliciesTest extends TestCase
15+
{
16+
17+
18+
public function test_policy_logic()
19+
{
20+
21+
factory(User::class, 1)->create([
22+
'email' => '[email protected]'
23+
]);
24+
$this->actingAs(User::first());
25+
26+
$class = App::make(UserController::class);
27+
$this->assertInstanceOf(UserController::class, $class);
28+
29+
$policy = Mockery::mock(UserPolicy::class)->makePartial();
30+
app()->instance(UserPolicy::class, $policy);
31+
$policy->shouldReceive('qualifyCollectionQueryWithUser')->once()->andReturn(null);
32+
$policy->shouldReceive('qualifyItemQueryWithUser')->once()->andReturn(null);
33+
$policy->shouldReceive('qualifyStoreDataWithUser')->withAnyArgs()->once()->andReturn([]);
34+
$policy->shouldReceive('qualifyUpdateDataWithUser')->withAnyArgs()->once()->andReturn([]);
35+
36+
$qualifyCollectionQuery = self::getMethod($class, 'qualifyCollectionQuery');
37+
$qualifyItemQuery = self::getMethod($class, 'qualifyItemQuery');
38+
$qualifyStoreQuery = self::getMethod($class, 'qualifyStoreQuery');
39+
$qualifyUpdateQuery = self::getMethod($class, 'qualifyUpdateQuery');
40+
41+
$qualifyCollectionQuery->invoke($class);
42+
$qualifyItemQuery->invoke($class);
43+
$qualifyStoreQuery->invokeArgs($class, [['a' => 'b']]);
44+
$qualifyUpdateQuery->invokeArgs($class, [['a' => 'b']]);
45+
}
46+
47+
public function test_autorize_policy_blocks()
48+
{
49+
$this->expectException(\Illuminate\Auth\Access\AuthorizationException::class);
50+
$class = App::make(UserController::class);
51+
52+
$policy = Mockery::mock(UserPolicy::class)->makePartial();
53+
app()->instance(UserPolicy::class, $policy);
54+
55+
$authoriseUserAction = self::getMethod($class, 'authoriseUserAction');
56+
57+
$authoriseUserAction->invokeArgs($class, ['view']);
58+
}
59+
60+
61+
public function test_autorize_policy_allows()
62+
{
63+
factory(User::class, 1)->create([
64+
'email' => '[email protected]'
65+
]);
66+
$this->actingAs(User::first());
67+
68+
$class = App::make(UserController::class);
69+
70+
$policy = Mockery::mock(UserPolicy::class)->makePartial();
71+
app()->instance(UserPolicy::class, $policy);
72+
73+
$authoriseUserAction = self::getMethod($class, 'authoriseUserAction');
74+
75+
$res = $authoriseUserAction->invokeArgs($class, ['view']);
76+
assertTrue($res);
77+
}
78+
}

tests/Models/Policies/UserPolicy.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public function viewAny(User $authed)
3030
*/
3131
public function view(User $authed, User $user)
3232
{
33-
//
33+
return true;
3434
}
3535

3636
/**

0 commit comments

Comments
 (0)