Skip to content

Commit 418fe23

Browse files
committed
Merge branch '140-use-NovaResource-class-in-NovaTestGenerator-instead-of-Model' into 159-ability-to-set-nova-resource-for-nova-tests-generator
2 parents e0fa9ec + 79baddf commit 418fe23

11 files changed

+74
-202
lines changed

src/Generators/AbstractTestsGenerator.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ abstract class AbstractTestsGenerator extends EntityGenerator
1313
protected array $fakerProperties = [];
1414
protected array $getFields = [];
1515
protected bool $withAuth = false;
16+
protected string $entity;
1617

1718
const array FIXTURE_TYPES = [
1819
'create' => ['request', 'response'],
@@ -186,7 +187,6 @@ protected function getMockModel($model): array
186187
protected function generateFixtures(): void
187188
{
188189
$object = $this->getFixtureValuesList($this->model);
189-
$entity = Str::snake($this->model);
190190

191191
$this->createFixtureFolder();
192192

@@ -195,7 +195,7 @@ protected function generateFixtures(): void
195195
foreach ($modifications as $modification) {
196196
$excepts = ($modification === 'request') ? ['id'] : [];
197197

198-
$this->generateFixture("{$type}_{$entity}_{$modification}.json", Arr::except($object, $excepts));
198+
$this->generateFixture("{$type}_" . Str::snake($this->entity) . "_{$modification}.json", Arr::except($object, $excepts));
199199
}
200200
}
201201
}

src/Generators/EntityGenerator.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,16 +150,18 @@ abstract public function generate(): void;
150150

151151
protected function classExists(string $path, string $name, ?string $subFolder = null): bool
152152
{
153-
$classPath = $this->getClassPath($path, $name, $subFolder);
153+
$relativePath = $this->getClassPath($path, $name, $subFolder);
154154

155-
return file_exists($classPath);
155+
$absolutePath = base_path($relativePath);
156+
157+
return file_exists($absolutePath);
156158
}
157159

158160
protected function getClassPath(string $path, string $name, ?string $subFolder = null): string
159161
{
160162
$path = $this->getPath($path, $subFolder);
161163

162-
return base_path("{$path}/{$name}.php");
164+
return "{$path}/{$name}.php";
163165
}
164166

165167
protected function saveClass($path, $name, $content, ?string $entityFolder = null): string

src/Generators/NovaTestGenerator.php

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
use Laravel\Nova\NovaServiceProvider;
77
use Laravel\Nova\Http\Requests\NovaRequest;
88
use RonasIT\Support\Events\SuccessCreateMessage;
9-
use RonasIT\Support\Exceptions\ClassAlreadyExistsException;
109
use RonasIT\Support\Exceptions\ClassNotExistsException;
1110
use RonasIT\Support\Exceptions\EntityCreateException;
1211
use Generator;
@@ -43,7 +42,6 @@ public function generate(): void
4342
}
4443

4544
if (empty($novaResources)) {
46-
// TODO: pass $this->modelSubfolder to Exception after refactoring in https://github.com/RonasIT/laravel-entity-generator/issues/179
4745
$this->throwFailureException(
4846
ClassNotExistsException::class,
4947
"Cannot create Nova{$this->model}ResourceTest cause {$this->model} Nova resource does not exist.",
@@ -53,6 +51,8 @@ public function generate(): void
5351

5452
$this->novaResourceClassName = Arr::first($novaResources);
5553

54+
$this->entity = Str::afterLast($this->novaResourceClassName, '\\');
55+
5656
parent::generate();
5757
} else {
5858
event(new SuccessCreateMessage("Nova is not installed and NovaTest is skipped"));
@@ -75,14 +75,12 @@ public function generateTests(): void
7575
$actions = $this->getActions();
7676
$filters = $this->collectFilters();
7777

78-
$resourceClass = Str::afterLast($this->novaResourceClassName, '\\');
79-
8078
$fileContent = $this->getStub('nova_test', [
8179
'entity_namespace' => $this->getNamespace('models', $this->modelSubFolder),
8280
'entity' => $this->model,
83-
'resource_name' => $resourceClass,
81+
'resource_name' => $this->entity,
8482
'resource_namespace' => $this->novaResourceClassName,
85-
'snake_resource' => Str::snake($resourceClass),
83+
'snake_resource' => Str::snake($this->entity),
8684
'dromedary_entity' => Str::lcfirst($this->model),
8785
'lower_entities' => $this->getPluralName(Str::snake($this->model)),
8886
'actions' => $actions,
@@ -169,7 +167,7 @@ protected function loadNovaFilters()
169167

170168
public function getTestClassName(): string
171169
{
172-
return "Nova{$this->model}Test";
170+
return "Nova{$this->entity}Test";
173171
}
174172

175173
protected function isFixtureNeeded($type): bool
@@ -227,8 +225,8 @@ protected function getFilters(): array
227225

228226
protected function getDumpName(): string
229227
{
230-
$modelName = Str::snake($this->model);
228+
$entityName = Str::snake($this->entity);
231229

232-
return "nova_{$modelName}_dump.sql";
230+
return "nova_{$entityName}_dump.sql";
233231
}
234232
}

src/Generators/TestsGenerator.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@
66

77
class TestsGenerator extends AbstractTestsGenerator
88
{
9+
public function generate(): void
10+
{
11+
$this->entity = $this->model;
12+
13+
parent::generate();
14+
}
15+
916
public function getTestClassName(): string
1017
{
1118
return "{$this->model}Test";

tests/CommandTest.php

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use RonasIT\Support\Tests\Support\Command\CommandMockTrait;
99
use RonasIT\Support\Tests\Support\Command\Models\Post;
1010
use UnexpectedValueException;
11-
use App\Nova\PostResource;
1211
use InvalidArgumentException;
1312

1413
class CommandTest extends TestCase
@@ -92,10 +91,10 @@ public function testCallCommand()
9291
$this->assertGeneratedFileEquals('validation.php', 'lang/en/validation.php');
9392
$this->assertGeneratedFileEquals('nova_resource.php', 'app/Nova/PostResource.php');
9493
$this->assertGeneratedFileEquals('nova_test.php', 'tests/NovaPostResourceTest.php');
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');
94+
$this->assertGeneratedFileEquals('nova_dump.php', 'tests/fixtures/NovaPostResourceTest/nova_post_resource_dump.sql');
95+
$this->assertGeneratedFileEquals('create_request.json', 'tests/fixtures/NovaPostResourceTest/create_post_resource_request.json');
96+
$this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/NovaPostResourceTest/create_post_resource_response.json');
97+
$this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/NovaPostResourceTest/update_post_resource_request.json');
9998
}
10099

101100
public function testCallCommandSubFoldersModel()
@@ -114,7 +113,7 @@ public function testCallCommandSubFoldersModel()
114113
$this
115114
->artisan('make:entity Forum/Post --methods=CRUD')
116115
->assertSuccessful();
117-
116+
118117
$this->assertGeneratedFileEquals('subfolder/model.php', 'RonasIT/Support/Tests/Support/Command/Models/Forum/Post.php');
119118
$this->assertGeneratedFileEquals('subfolder/factory.php', 'RonasIT/Support/Tests/Support/Command/Factories/PostFactory.php');
120119
$this->assertGeneratedFileEquals('subfolder/repository.php', 'app/Repositories/PostRepository.php');
@@ -138,10 +137,10 @@ public function testCallCommandSubFoldersModel()
138137
$this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/PostTest/create_post_response.json');
139138
$this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/PostTest/update_post_request.json');
140139
$this->assertGeneratedFileEquals('validation.php', 'lang/en/validation.php');
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');
140+
$this->assertGeneratedFileEquals('nova_dump.php', 'tests/fixtures/NovaPostResourceTest/nova_post_resource_dump.sql');
141+
$this->assertGeneratedFileEquals('create_request.json', 'tests/fixtures/NovaPostResourceTest/create_post_resource_request.json');
142+
$this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/NovaPostResourceTest/create_post_resource_response.json');
143+
$this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/NovaPostResourceTest/update_post_resource_request.json');
145144
}
146145

147146
public function testMakeOnly()

tests/ControllerGeneratorTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public function testControllerAlreadyExists()
3030

3131
$this->assertExceptionThrew(
3232
className: ResourceAlreadyExistsException::class,
33-
message: 'Cannot create PostController cause it already exists. Remove vfs://root/app/Http/Controllers/PostController.php and run command again.',
33+
message: 'Cannot create PostController cause it already exists. Remove app/Http/Controllers/PostController.php and run command again.',
3434
);
3535

3636
app(ControllerGenerator::class)

tests/FactoryGeneratorTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public function testFactoryClassExists()
4646
{
4747
$this->assertExceptionThrew(
4848
className: ResourceAlreadyExistsException::class,
49-
message: 'Cannot create PostFactory cause it already exists. Remove vfs://root/database/factories/PostFactory.php and run command again.',
49+
message: 'Cannot create PostFactory cause it already exists. Remove database/factories/PostFactory.php and run command again.',
5050
);
5151

5252
$this->mockFactoryGenerator(

tests/ModelGeneratorTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public function testModelAlreadyExists()
3030

3131
$this->assertExceptionThrew(
3232
className: ResourceAlreadyExistsException::class,
33-
message: 'Cannot create Post cause it already exists. Remove vfs://root/app/Models/Blog/Post.php and run command again.',
33+
message: 'Cannot create Post cause it already exists. Remove app/Models/Blog/Post.php and run command again.',
3434
);
3535

3636
app(ModelGenerator::class)

tests/NovaResourceGeneratorTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public function testCreateNovaTestAlreadyExists()
6363

6464
$this->assertExceptionThrew(
6565
className: ResourceAlreadyExistsException::class,
66-
message: 'Cannot create PostResource cause it already exists. Remove vfs://root/app/Nova/PostResource.php and run command again.',
66+
message: 'Cannot create PostResource cause it already exists. Remove app/Nova/PostResource.php and run command again.',
6767
);
6868

6969
app(NovaResourceGenerator::class)

0 commit comments

Comments
 (0)