Skip to content

Commit c07dcdc

Browse files
authored
Merge pull request #75 from RonasIT/49-add-api-resource-generator-tests
Add API resource generator tests
2 parents 4bbe059 + 762b192 commit c07dcdc

File tree

3 files changed

+136
-0
lines changed

3 files changed

+136
-0
lines changed

tests/ResourceGeneratorTest.php

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?php
2+
3+
namespace RonasIT\Support\Tests;
4+
5+
use RonasIT\Support\Events\SuccessCreateMessage;
6+
use RonasIT\Support\Events\WarningEvent;
7+
use RonasIT\Support\Exceptions\ClassAlreadyExistsException;
8+
use RonasIT\Support\Generators\ResourceGenerator;
9+
use RonasIT\Support\Tests\Support\GeneratorMockTrait;
10+
11+
class ResourceGeneratorTest extends TestCase
12+
{
13+
use GeneratorMockTrait;
14+
15+
public function testResourceAlreadyExists()
16+
{
17+
$this->mockClass(ResourceGenerator::class, [
18+
$this->classExistsMethodCall(['resources', 'PostResource']),
19+
]);
20+
21+
$this->assertExceptionThrew(
22+
className: ClassAlreadyExistsException::class,
23+
message: 'Cannot create PostResource cause PostResource already exists. Remove PostResource.',
24+
);
25+
26+
app(ResourceGenerator::class)
27+
->setModel('Post')
28+
->generate();
29+
}
30+
31+
public function testCollectionResourceAlreadyExists()
32+
{
33+
$this->mockClass(ResourceGenerator::class, [
34+
$this->classExistsMethodCall(['resources', 'PostResource'], false),
35+
$this->classExistsMethodCall(['resources', 'PostsCollectionResource']),
36+
]);
37+
38+
$this->assertExceptionThrew(
39+
className: ClassAlreadyExistsException::class,
40+
message: 'Cannot create PostsCollectionResource cause PostsCollectionResource already exists. '
41+
. 'Remove PostsCollectionResource.',
42+
);
43+
44+
app(ResourceGenerator::class)
45+
->setModel('Post')
46+
->generate();
47+
48+
$this->assertGeneratedFileEquals('post_resource.php', 'app/Http/Resources/Post/PostResource.php');
49+
50+
$this->assertEventPushed(
51+
className: SuccessCreateMessage::class,
52+
message: 'Created a new Resource: PostResource',
53+
);
54+
}
55+
56+
public function testCreateResources()
57+
{
58+
app(ResourceGenerator::class)
59+
->setModel('Post')
60+
->generate();
61+
62+
$this->assertGeneratedFileEquals('post_resource.php', 'app/Http/Resources/Post/PostResource.php');
63+
$this->assertGeneratedFileEquals('post_collection_resource.php', 'app/Http/Resources/Post/PostsCollectionResource.php');
64+
65+
$this->assertEventPushedChain([
66+
SuccessCreateMessage::class => [
67+
'Created a new Resource: PostResource',
68+
'Created a new CollectionResource: PostsCollectionResource',
69+
],
70+
]);
71+
}
72+
73+
public function testCreateResourcesResourceStubNotExist()
74+
{
75+
config(['entity-generator.stubs.resource' => 'incorrect_stub']);
76+
77+
app(ResourceGenerator::class)
78+
->setModel('Post')
79+
->generate();
80+
81+
$this->assertFileDoesNotExist('app/Http/Resources/Post/PostResource.php');
82+
$this->assertFileDoesNotExist('app/Http/Resources/Post/PostsCollectionResource.php');
83+
84+
$this->assertEventPushed(
85+
className: WarningEvent::class,
86+
message: 'Generation of resource has been skipped cause the view incorrect_stub from the config entity-generator.stubs.resource is not exists. Please check that config has the correct view name value.',
87+
);
88+
}
89+
90+
public function testCreateResourcesCollectionResourceStubNotExist()
91+
{
92+
config(['entity-generator.stubs.collection_resource' => 'incorrect_stub']);
93+
94+
app(ResourceGenerator::class)
95+
->setModel('Post')
96+
->generate();
97+
98+
$this->assertGeneratedFileEquals('post_resource.php', 'app/Http/Resources/Post/PostResource.php');
99+
$this->assertFileDoesNotExist('app/Http/Resources/Post/PostsCollectionResource.php');
100+
101+
$this->assertEventPushedChain([
102+
SuccessCreateMessage::class => ['Created a new Resource: PostResource'],
103+
WarningEvent::class => ['Generation of collection resource has been skipped cause the view incorrect_stub from the config entity-generator.stubs.collection_resource is not exists. Please check that config has the correct view name value.'],
104+
]);
105+
}
106+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace App\Http\Resources\Post;
4+
5+
use Illuminate\Http\Resources\Json\ResourceCollection;
6+
7+
class PostsCollectionResource extends ResourceCollection
8+
{
9+
public $collects = PostResource::class;
10+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace App\Http\Resources\Post;
4+
5+
use Illuminate\Http\Resources\Json\JsonResource;
6+
use App\Models\Post;
7+
8+
/**
9+
* @property Post $resource
10+
*/
11+
class PostResource extends JsonResource
12+
{
13+
public static $wrap = null;
14+
15+
//TODO implement custom serialization logic or remove method redefining
16+
public function toArray($request): array
17+
{
18+
return parent::toArray($request);
19+
}
20+
}

0 commit comments

Comments
 (0)