Skip to content

Commit 316eed1

Browse files
committed
refactor: correct set resource instead model
1 parent 1f64ef5 commit 316eed1

File tree

13 files changed

+686
-191
lines changed

13 files changed

+686
-191
lines changed

.env.testing

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
FAIL_EXPORT_JSON=false

src/Generators/NovaTestGenerator.php

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -33,38 +33,53 @@ public function __construct()
3333
public function generate(): void
3434
{
3535
if (class_exists(NovaServiceProvider::class)) {
36-
if (!$this->classExists('models', $this->model)) {
36+
if (!$this->classExists('models', $this->model, $this->modelSubFolder)) {
3737
$this->throwFailureException(
3838
ClassNotExistsException::class,
3939
"Cannot create Nova{$this->model}Resource Test cause {$this->model} does not exist.",
4040
"Create a {$this->model} Model by himself or run command 'php artisan make:entity {$this->model} --only-model'."
4141
);
4242
}
4343

44-
$novaResources = $this->getCommonNovaResources();
44+
if (empty($this->novaResourceName)) {
4545

46-
if (count($novaResources) > 1){
47-
$foundedResources = implode(', ', $novaResources);
46+
$novaResources = $this->getCommonNovaResources();
4847

49-
// TODO: pass $this->modelSubfolder to Exception after refactoring in https://github.com/RonasIT/laravel-entity-generator/issues/179
50-
$this->throwFailureException(
51-
EntityCreateException::class,
52-
"Cannot create Nova{$this->model}ResourceTest cause was found a lot of suitable resources: {$foundedResources}.",
53-
'Make test by yourself.'
54-
);
48+
if (count($novaResources) > 1) {
49+
$foundedResources = implode(', ', $novaResources);
50+
51+
// TODO: pass $this->modelSubfolder to Exception after refactoring in https://github.com/RonasIT/laravel-entity-generator/issues/179
52+
$this->throwFailureException(
53+
EntityCreateException::class,
54+
"Cannot create Nova{$this->model}ResourceTest cause was found a lot of suitable resources: {$foundedResources}.",
55+
'Please, use --resource-name option.'
56+
);
57+
}
58+
59+
if (empty($novaResources)) {
60+
$this->throwFailureException(
61+
ClassNotExistsException::class,
62+
"Cannot create Nova{$this->model}ResourceTest cause {$this->model} Nova resource does not exist.",
63+
"Create {$this->model} Nova resource."
64+
);
65+
}
66+
67+
$this->novaResourceName = array_pop($novaResources);
5568
}
5669

57-
if (empty($novaResources)) {
70+
$this->shortNovaResourceName = Str::afterLast($this->novaResourceName, '\\');
71+
72+
$this->fullNovaResourcePath = "App\\Nova\\{$this->novaResourceName}";
73+
74+
if (!class_exists($this->fullNovaResourcePath)) {
5875
$this->throwFailureException(
5976
ClassNotExistsException::class,
60-
"Cannot create Nova{$this->model}ResourceTest cause {$this->model} Nova resource does not exist.",
61-
"Create {$this->model} Nova resource."
77+
"Cannot create Nova{$this->shortNovaResourceName}Test cause {$this->novaResourceName} Nova resource does not exist.",
78+
"Create {$this->novaResourceName} Nova resource."
6279
);
6380
}
6481

65-
$this->novaResourceName = array_pop($novaResources);
66-
67-
if ($this->classExists('nova', "Nova{$this->model}Test")) {
82+
if ($this->classExists('nova', "Nova{$this->shortNovaResourceName}Test")) {
6883
$this->throwFailureException(
6984
ClassAlreadyExistsException::class,
7085
"Cannot create Nova{$this->model}ResourceTest cause it's already exist.",
@@ -94,25 +109,23 @@ public function generateTests(): void
94109
$actions = $this->getActions();
95110
$filters = $this->collectFilters();
96111

97-
$resourceClass = Str::afterLast($this->novaResourceName, '\\');
98-
99112
$fileContent = $this->getStub('nova_test', [
100113
'url_path' => Str::kebab($this->model) . '-resources',
101114
'entity_namespace' => $this->getOrCreateNamespace('models', $this->modelSubFolder),
102115
'entity' => $this->model,
103-
'resource' => $resourceClass,
116+
'resource' => $this->shortNovaResourceName,
104117
'resource_path' => "App\\Nova\\{$this->novaResourceName}",
105118
'entities' => $this->getPluralName($this->model),
106-
'snake_resource' => Str::snake($resourceClass),
119+
'snake_resource' => Str::snake($this->shortNovaResourceName),
107120
'dromedary_entity' => Str::lcfirst($this->model),
108121
'lower_entities' => $this->getPluralName(Str::snake($this->model)),
109122
'actions' => $actions,
110123
'filters' => $filters,
111124
]);
112125

113-
$this->saveClass('tests', "Nova{$resourceClass}Test", $fileContent);
126+
$this->saveClass('tests', "Nova{$this->shortNovaResourceName}Test", $fileContent);
114127

115-
event(new SuccessCreateMessage("Created a new Nova test: Nova{$resourceClass}Test"));
128+
event(new SuccessCreateMessage("Created a new Nova test: Nova{$this->shortNovaResourceName}Test"));
116129
}
117130

118131
protected function getActions(): array
@@ -198,23 +211,6 @@ protected function isFixtureNeeded($type): bool
198211
return true;
199212
}
200213

201-
protected function getNovaResource(): string
202-
{
203-
$commonResources = $this->getCommonNovaResources();
204-
205-
if (count($commonResources) > 1) {
206-
$commonResources = implode(', ', $commonResources);
207-
208-
$this->throwFailureException(
209-
EntityCreateException::class,
210-
"Cannot create Nova{$this->model}Resource Test cause was found a lot of suitable resources: $commonResources",
211-
"Please, use --resource-name option"
212-
);
213-
}
214-
215-
return array_pop($commonResources);
216-
}
217-
218214
protected function collectFilters(): array
219215
{
220216
$filtersFromFields = $this->getFiltersFromFields();
@@ -250,7 +246,7 @@ protected function getFiltersFromFields(): array
250246

251247
protected function getFilters(): array
252248
{
253-
$filters = [];
249+
$filters= [];
254250
$novaResourceFilters = $this->loadNovaFilters();
255251

256252
foreach ($novaResourceFilters as $filter) {

tests/CommandTest.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,10 @@ public function testCallCommand()
9292
$this->assertGeneratedFileEquals('validation.php', 'lang/en/validation.php');
9393
$this->assertGeneratedFileEquals('nova_resource.php', 'app/Nova/PostResource.php');
9494
$this->assertGeneratedFileEquals('nova_test.php', 'tests/NovaPostResourceTest.php');
95-
$this->assertGeneratedFileEquals('nova_dump.php', 'tests/fixtures/NovaPostTest/nova_post_dump.sql');
96-
$this->assertGeneratedFileEquals('create_request.json', 'tests/fixtures/NovaPostTest/create_post_request.json');
97-
$this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/NovaPostTest/create_post_response.json');
98-
$this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/NovaPostTest/update_post_request.json');
95+
$this->assertGeneratedFileEquals('nova_dump.php', 'tests/fixtures/NovaPostResourceTest/nova_post_dump.sql');
96+
$this->assertGeneratedFileEquals('create_request.json', 'tests/fixtures/NovaPostResourceTest/create_post_request.json');
97+
$this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/NovaPostResourceTest/create_post_response.json');
98+
$this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/NovaPostResourceTest/update_post_request.json');
9999
}
100100

101101
public function testCallCommandSubFoldersModel()
@@ -138,10 +138,10 @@ public function testCallCommandSubFoldersModel()
138138
$this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/PostTest/create_post_response.json');
139139
$this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/PostTest/update_post_request.json');
140140
$this->assertGeneratedFileEquals('validation.php', 'lang/en/validation.php');
141-
$this->assertGeneratedFileEquals('nova_dump.php', 'tests/fixtures/NovaPostTest/nova_post_dump.sql');
142-
$this->assertGeneratedFileEquals('create_request.json', 'tests/fixtures/NovaPostTest/create_post_request.json');
143-
$this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/NovaPostTest/create_post_response.json');
144-
$this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/NovaPostTest/update_post_request.json');
141+
$this->assertGeneratedFileEquals('nova_dump.php', 'tests/fixtures/NovaPostResourceTest/nova_post_dump.sql');
142+
$this->assertGeneratedFileEquals('create_request.json', 'tests/fixtures/NovaPostResourceTest/create_post_request.json');
143+
$this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/NovaPostResourceTest/create_post_response.json');
144+
$this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/NovaPostResourceTest/update_post_request.json');
145145
}
146146

147147
public function testMakeOnly()

tests/NovaTestGeneratorTest.php

Lines changed: 13 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,8 @@
1010
use RonasIT\Support\Generators\NovaTestGenerator;
1111
use RonasIT\Support\Tests\Support\NovaTestGeneratorTest\NovaTestGeneratorMockTrait;
1212
use Laravel\Nova\NovaServiceProvider;
13-
use RonasIT\Support\Tests\Support\Models\WelcomeBonus;
1413
use RonasIT\Support\Exceptions\EntityCreateException;
1514
use RonasIT\Support\Tests\Support\Models\Post;
16-
use RonasIT\Support\Exceptions\EntityCreateException;
1715

1816
class NovaTestGeneratorTest extends TestCase
1917
{
@@ -44,41 +42,16 @@ className: ClassNotExistsException::class,
4442
->generate();
4543
}
4644

47-
public function testGenerateToManyResources(): void
48-
{
49-
$this->mockNovaServiceProviderExists();
50-
51-
$this->mockClass(NovaTestGenerator::class, [
52-
$this->getCommonNovaResourcesMock([
53-
'BasePostResource',
54-
'PublishPostResource',
55-
]),
56-
]);
57-
58-
$this->assertExceptionThrew(
59-
className: EntityCreateException::class,
60-
message: 'Cannot create NovaNewsResourceTest cause NewsResource Nova resource does not exist. Create NewsResource Nova resource.',
61-
);
62-
63-
app(NovaTestGenerator::class)
64-
->setModel('News')
65-
->setMetaData(['resource_name' => 'NewsResource'])
66-
->generate();
67-
}
68-
6945
public function testGenerateNovaTestAlreadyExists()
7046
{
71-
$this->mockNovaServiceProviderExists();
72-
7347
$this->mockClass(NovaTestGenerator::class, [
74-
$this->classExistsMethodCall(['nova', 'NovaPostTest']),
7548
$this->classExistsMethodCall(['models', 'Post']),
7649
$this->classExistsMethodCall(['nova', 'NovaPostResourceTest']),
7750
]);
7851

7952
$this->mockNativeGeneratorFunctions(
80-
$this->nativeClassExistsMethodCall([NovaServiceProvider::class, true]),
81-
$this->nativeClassExistsMethodCall(["App\Nova\Resources\PostResource"]),
53+
$this->nativeClassExistsMethodCall([NovaServiceProvider::class]),
54+
$this->nativeClassExistsMethodCall(["App\Nova\PostResource"]),
8255
);
8356

8457
$this->assertExceptionThrew(
@@ -88,7 +61,7 @@ className: ClassAlreadyExistsException::class,
8861

8962
app(NovaTestGenerator::class)
9063
->setModel('Post')
91-
->setMetaData(['resource_name' => 'Resources\PostResource'])
64+
->setMetaData(['resource_name' => 'PostResource'])
9265
->generate();
9366
}
9467

@@ -165,11 +138,11 @@ public function testDumpStubNotExist()
165138
->setMetaData(['resource_name' => 'WelcomeBonusResource'])
166139
->generate();
167140

168-
$this->assertGeneratedFileEquals('created_resource_test.php', 'tests/NovaWelcomeBonusResourceTest.php');
141+
$this->assertGeneratedFileEquals('created_welcome_bonus_resource_test.php', 'tests/NovaWelcomeBonusResourceTest.php');
169142
$this->assertFileDoesNotExist('tests/fixtures/NovaWelcomeBonusTest/nova_welcome_bonus_dump.sql');
170-
$this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_request.json');
171-
$this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_response.json');
172-
$this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/update_welcome_bonus_request.json');
143+
$this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/create_welcome_bonus_request.json');
144+
$this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/create_welcome_bonus_response.json');
145+
$this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/update_welcome_bonus_request.json');
173146

174147
$this->assertEventPushed(
175148
className: WarningEvent::class,
@@ -206,7 +179,7 @@ public function testSuccess()
206179
->setMetaData(['resource_name' => 'WelcomeBonusResource'])
207180
->generate();
208181

209-
$this->assertGeneratedFileEquals('created_resource_test.php', 'tests/NovaWelcomeBonusResourceTest.php');
182+
$this->assertGeneratedFileEquals('created_welcome_bonus_resource_test.php', 'tests/NovaWelcomeBonusResourceTest.php');
210183
$this->assertGeneratedFileEquals('dump.sql', 'tests/fixtures/NovaWelcomeBonusResourceTest/nova_welcome_bonus_dump.sql');
211184
$this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/create_welcome_bonus_request.json');
212185
$this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/create_welcome_bonus_response.json');
@@ -225,7 +198,7 @@ public function testWithManySameResources()
225198

226199
$this->assertExceptionThrew(
227200
className: EntityCreateException::class,
228-
message: 'Cannot create NovaWelcomeBonusResource Test cause was found a lot of suitable resources: WelcomeBonusResource, Resources\WelcomeBonus Please, use --resource-name option',
201+
message: 'Cannot create NovaWelcomeBonusResourceTest cause was found a lot of suitable resources: WelcomeBonusResource, Resources\WelcomeBonus. Please, use --resource-name option.',
229202
);
230203

231204
app(NovaTestGenerator::class)
@@ -241,6 +214,9 @@ public function testSuccessWithoutSetMetaData()
241214
]);
242215

243216
$this->mockClass(NovaTestGenerator::class, [
217+
$this->getCommonNovaResourcesMock([
218+
'Resources\PostResource',
219+
]),
244220
$this->classExistsMethodCall(['models', 'Post']),
245221
$this->classExistsMethodCall(['nova', 'NovaPostResourceTest'], false),
246222
$this->classExistsMethodCall(['models', 'User'], false),
@@ -299,7 +275,7 @@ public function testSuccessWithNestedFile(): void
299275
->setMetaData(['resource_name' => 'Resources\WelcomeBonusDraftResource'])
300276
->generate();
301277

302-
$this->assertGeneratedFileEquals('created_resource_test.php', 'tests/NovaWelcomeBonusDraftResourceTest.php');
278+
$this->assertGeneratedFileEquals('created_welcome_bonuse_draft_resource_test.php', 'tests/NovaWelcomeBonusDraftResourceTest.php');
303279
$this->assertGeneratedFileEquals('dump.sql', 'tests/fixtures/NovaWelcomeBonusDraftResourceTest/nova_welcome_bonus_dump.sql');
304280
$this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusDraftResourceTest/create_welcome_bonus_request.json');
305281
$this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusDraftResourceTest/create_welcome_bonus_response.json');

tests/Support/Command/CommandMockTrait.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ public function mockGeneratorSubFolders(): void
120120
$this->nativeClassExistsMethodCall(['RonasIT\Support\Tests\Support\Command\Models\Forum\Post', true]),
121121
$this->nativeClassExistsMethodCall(['Laravel\Nova\NovaServiceProvider', true]),
122122
$this->nativeClassExistsMethodCall(['Laravel\Nova\NovaServiceProvider', true]),
123+
$this->nativeClassExistsMethodCall(['App\Nova\Forum\PostResource']),
123124
$this->nativeClassExistsMethodCall(['RonasIT\Support\Tests\Support\Command\Models\Forum\Post', true]),
124125
);
125126
}

tests/Support/Nova/Forum/PostResource.php

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,57 +2,59 @@
22

33
namespace App\Nova\Forum;
44

5+
use RonasIT\Support\Tests\Support\Command\Models\Forum\Post;
6+
use Illuminate\Http\Request;
57
use Laravel\Nova\Fields\ID;
68
use Laravel\Nova\Fields\Text;
7-
use Laravel\Nova\Http\Requests\NovaRequest;
8-
use RonasIT\Support\Tests\Support\NovaTestGeneratorTest\CreatedAtFilter;
9-
use RonasIT\Support\Tests\Support\NovaTestGeneratorTest\DateField;
10-
use RonasIT\Support\Tests\Support\NovaTestGeneratorTest\PublishPostAction;
11-
use RonasIT\Support\Tests\Support\NovaTestGeneratorTest\TextField;
12-
use RonasIT\Support\Tests\Support\NovaTestGeneratorTest\UnPublishPostAction;
139
use Laravel\Nova\Resource;
1410

1511
class PostResource extends Resource
1612
{
13+
public static $model = Post::class;
14+
15+
//TODO change field for the title if it required
1716
public static $title = 'name';
1817

18+
//TODO change query fields if it required
1919
public static $search = ['id', 'name'];
2020

2121
public static function label(): string
2222
{
23-
return 'Post';
23+
return 'Posts';
2424
}
2525

26-
public function fields(NovaRequest $request): array
26+
public function fields(Request $request): array
2727
{
2828
return [
29-
new TextField,
30-
new DateField,
29+
ID::make('Id')
30+
->required()
31+
->sortable(),
32+
Text::make('Title')
33+
->required()
34+
->sortable(),
35+
Text::make('Created At')
36+
->required()
37+
->sortable(),
3138
];
3239
}
3340

34-
public function cards(NovaRequest $request): array
41+
public function cards(Request $request): array
3542
{
3643
return [];
3744
}
3845

39-
public function filters(NovaRequest $request): array
46+
public function filters(Request $request): array
4047
{
41-
return [
42-
new CreatedAtFilter,
43-
];
48+
return [];
4449
}
4550

46-
public function lenses(NovaRequest $request): array
51+
public function lenses(Request $request): array
4752
{
4853
return [];
4954
}
5055

51-
public function actions(NovaRequest $request): array
56+
public function actions(Request $request): array
5257
{
53-
return [
54-
new PublishPostAction,
55-
new UnPublishPostAction,
56-
];
58+
return [];
5759
}
58-
}
60+
}

tests/Support/Nova/Resources/PostResource.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ public function actions(NovaRequest $request): array
5353
return [
5454
new PublishPostAction,
5555
new UnPublishPostAction,
56-
new UnPublishPostAction,
5756
];
5857
}
5958
}

tests/Support/Nova/Resources/WelcomeBonus.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ public function actions(NovaRequest $request): array
5353
return [
5454
new PublishPostAction,
5555
new UnPublishPostAction,
56-
new UnPublishPostAction,
5756
];
5857
}
5958
}

0 commit comments

Comments
 (0)