-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathResourceGeneratorTest.php
106 lines (84 loc) · 3.93 KB
/
ResourceGeneratorTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
namespace RonasIT\Support\Tests;
use RonasIT\Support\Events\SuccessCreateMessage;
use RonasIT\Support\Events\WarningEvent;
use RonasIT\Support\Exceptions\ClassAlreadyExistsException;
use RonasIT\Support\Generators\ResourceGenerator;
use RonasIT\Support\Tests\Support\GeneratorMockTrait;
class ResourceGeneratorTest extends TestCase
{
use GeneratorMockTrait;
public function testResourceAlreadyExists()
{
$this->mockClass(ResourceGenerator::class, [
$this->classExistsMethodCall(['resources', 'PostResource']),
]);
$this->assertExceptionThrew(
className: ClassAlreadyExistsException::class,
message: 'Cannot create PostResource cause PostResource already exists. Remove PostResource.',
);
app(ResourceGenerator::class)
->setModel('Post')
->generate();
}
public function testCollectionResourceAlreadyExists()
{
$this->mockClass(ResourceGenerator::class, [
$this->classExistsMethodCall(['resources', 'PostResource'], false),
$this->classExistsMethodCall(['resources', 'PostsCollectionResource']),
]);
$this->assertExceptionThrew(
className: ClassAlreadyExistsException::class,
message: 'Cannot create PostsCollectionResource cause PostsCollectionResource already exists. '
. 'Remove PostsCollectionResource.',
);
app(ResourceGenerator::class)
->setModel('Post')
->generate();
$this->assertGeneratedFileEquals('post_resource.php', 'app/Http/Resources/Post/PostResource.php');
$this->assertEventPushed(
className: SuccessCreateMessage::class,
message: 'Created a new Resource: PostResource',
);
}
public function testCreateResources()
{
app(ResourceGenerator::class)
->setModel('Post')
->generate();
$this->assertGeneratedFileEquals('post_resource.php', 'app/Http/Resources/Post/PostResource.php');
$this->assertGeneratedFileEquals('post_collection_resource.php', 'app/Http/Resources/Post/PostsCollectionResource.php');
$this->assertEventPushedChain([
SuccessCreateMessage::class => [
'Created a new Resource: PostResource',
'Created a new CollectionResource: PostsCollectionResource',
],
]);
}
public function testCreateResourcesResourceStubNotExist()
{
config(['entity-generator.stubs.resource' => 'incorrect_stub']);
app(ResourceGenerator::class)
->setModel('Post')
->generate();
$this->assertFileDoesNotExist('app/Http/Resources/Post/PostResource.php');
$this->assertFileDoesNotExist('app/Http/Resources/Post/PostsCollectionResource.php');
$this->assertEventPushed(
className: WarningEvent::class,
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.',
);
}
public function testCreateResourcesCollectionResourceStubNotExist()
{
config(['entity-generator.stubs.collection_resource' => 'incorrect_stub']);
app(ResourceGenerator::class)
->setModel('Post')
->generate();
$this->assertGeneratedFileEquals('post_resource.php', 'app/Http/Resources/Post/PostResource.php');
$this->assertFileDoesNotExist('app/Http/Resources/Post/PostsCollectionResource.php');
$this->assertEventPushedChain([
SuccessCreateMessage::class => ['Created a new Resource: PostResource'],
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.'],
]);
}
}