Skip to content

Commit ad02b87

Browse files
committed
further test for resource trait,
1 parent f8fdcee commit ad02b87

File tree

5 files changed

+170
-26
lines changed

5 files changed

+170
-26
lines changed

src/Http/Api/Contracts/HasRepository.php

-25
This file was deleted.
+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?php
2+
3+
namespace Phpsa\LaravelApiController\Tests\Controllers;
4+
5+
use Phpsa\LaravelApiController\Tests\Models\User;
6+
use Phpsa\LaravelApiController\Http\Api\Controller;
7+
use Phpsa\LaravelApiController\Tests\Requests\UserRequest;
8+
9+
class ProjectController extends Controller
10+
{
11+
12+
13+
/**
14+
* Display a listing of the resource.
15+
*
16+
* @return \Illuminate\Http\Response
17+
*/
18+
public function index()
19+
{
20+
return $this->handleIndexAction();
21+
}
22+
23+
/**
24+
* Store a newly created resource in storage.
25+
*
26+
* @see self::handleStoreOrUpdateAction to do magic insert / update
27+
* @param App\Http\Requests\ProjectRequest $request
28+
* @return \Illuminate\Http\Response
29+
*/
30+
public function store(UserRequest $request)
31+
{
32+
return $this->handleStoreAction($request);
33+
}
34+
35+
/**
36+
* Display the specified resource.
37+
*
38+
* @param int $id
39+
* @return \Illuminate\Http\Response
40+
*/
41+
public function show($id)
42+
{
43+
return $this->handleShowAction($id);
44+
}
45+
46+
/**
47+
* Update the specified resource in storage.
48+
*
49+
* @param App\Http\Requests\ProjectRequest $request
50+
* @param int $id
51+
* @return \Illuminate\Http\Response
52+
*/
53+
public function update(UserRequest $request, $id)
54+
{
55+
return $this->handleUpdateAction($id, $request);
56+
}
57+
58+
/**
59+
* Remove the specified resource from storage.
60+
*
61+
* @param int $id
62+
* @return \Illuminate\Http\Response
63+
*/
64+
public function destroy($id)
65+
{
66+
return $this->handleDestroyAction($id);
67+
}
68+
69+
/**
70+
* Eloquent model.
71+
*
72+
* @return \Illuminate\Database\Eloquent\Model
73+
*/
74+
protected function model()
75+
{
76+
return User::class;
77+
}
78+
}

tests/HasResourcesTest.php

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
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\Http\Resources\ApiResource;
9+
10+
use Phpsa\LaravelApiController\Http\Resources\ApiCollection;
11+
use Phpsa\LaravelApiController\Tests\Resources\UserResource;
12+
use Phpsa\LaravelApiController\Tests\Controllers\UserController;
13+
use Phpsa\LaravelApiController\Tests\Controllers\ProjectController;
14+
use Phpsa\LaravelApiController\Tests\Resources\UserResourceCollection;
15+
16+
class HasResourcesTest extends TestCase
17+
{
18+
19+
20+
public function test_resources_logic()
21+
{
22+
23+
$class = App::make(UserController::class);
24+
$this->assertInstanceOf(UserController::class, $class);
25+
26+
$this->assertEquals(UserResource::class, $class->getResourceSingle());
27+
$this->assertEquals(UserResourceCollection::class, $class->getResourceCollection());
28+
29+
$pclass = App::make(ProjectController::class);
30+
$this->assertInstanceOf(ProjectController::class, $pclass);
31+
32+
$this->assertEquals(ApiResource::class, $pclass->getResourceSingle());
33+
$this->assertEquals(ApiCollection::class, $pclass->getResourceCollection());
34+
35+
$getDefaultFields = self::getMethod($class, 'getDefaultFields');
36+
$this->assertEquals([
37+
'name','email'
38+
], $getDefaultFields->invoke($class));
39+
40+
$pgetDefaultFields = self::getMethod($pclass, 'getDefaultFields');
41+
$this->assertEquals([
42+
'*'
43+
], $pgetDefaultFields->invoke($pclass));
44+
45+
$getAllowedScopes = self::getMethod($class, 'getAllowedScopes');
46+
$this->assertEquals([
47+
'Has2Fa'
48+
], $getAllowedScopes->invoke($class));
49+
50+
$pgetAllowedScopes = self::getMethod($pclass, 'getAllowedScopes');
51+
$getAllowedScopes = self::getMethod($class, 'getAllowedScopes');
52+
$this->assertEquals([], $pgetAllowedScopes->invoke($pclass));
53+
}
54+
55+
public function test_scope_from_request()
56+
{
57+
$class = Mockery::mock(UserController::class)->makePartial()->shouldAllowMockingProtectedMethods();
58+
app()->instance(UserController::class, $class);
59+
$class->shouldReceive('parseScopeValue')->once()->andReturn(true);
60+
$class->__construct();
61+
62+
// $class = App::make($class);
63+
$request = $this->createRequest('GET', '/?has2Fa=1&notCallable=0');
64+
65+
$parseAllowedScopes = self::getMethod($class, 'parseAllowedScopes');
66+
$parseAllowedScopes->invokeArgs($class, [$request]);
67+
}
68+
69+
public function test_block_scope_from_request()
70+
{
71+
$class = Mockery::mock(ProjectController::class)->makePartial()->shouldAllowMockingProtectedMethods();
72+
app()->instance(ProjectController::class, $class);
73+
$class->shouldReceive('parseScopeValue')->never();
74+
$class->__construct();
75+
76+
$this->assertInstanceOf(ProjectController::class, $class);
77+
78+
//$class = App::make($class);
79+
$request = $this->createRequest('GET', '/?has2Fa=1&notCallable=0');
80+
81+
$parseAllowedScopes = self::getMethod($class, 'parseAllowedScopes');
82+
$parseAllowedScopes->invokeArgs($class, [$request]);
83+
}
84+
}

tests/Models/User.php

+4
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,8 @@ public function scopeHas2Fa(Builder $builder, ?bool $on = null)
5959
break;
6060
}
6161
}
62+
63+
public function scopeNotCallable(Builder $builder)
64+
{
65+
}
6266
}

tests/Resources/UserResource.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ class UserResource extends ApiResource
1919
*
2020
* @var array|null
2121
*/
22-
protected static $defaultFields = null;
22+
protected static $defaultFields = [
23+
'name',
24+
'email'
25+
];
2326

2427
/**
2528
* Allowable fields to be used.

0 commit comments

Comments
 (0)