diff --git a/src/Generators/AbstractTestsGenerator.php b/src/Generators/AbstractTestsGenerator.php index 612f52fc..653b3c2c 100644 --- a/src/Generators/AbstractTestsGenerator.php +++ b/src/Generators/AbstractTestsGenerator.php @@ -186,10 +186,11 @@ protected function getMockModel($model): array protected function generateFixtures(): void { $object = $this->getFixtureValuesList($this->model); - $entity = Str::snake($this->model); $this->createFixtureFolder(); + $entity = Str::snake($this->getTestingEntityName()); + foreach (self::FIXTURE_TYPES as $type => $modifications) { if ($this->isFixtureNeeded($type)) { foreach ($modifications as $modification) { @@ -259,6 +260,8 @@ abstract protected function isFixtureNeeded($type): bool; abstract protected function generateTests(): void; + abstract protected function getTestingEntityName(): string; + private function filterBadModelField($fields): array { return array_diff($fields, [ diff --git a/src/Generators/NovaTestGenerator.php b/src/Generators/NovaTestGenerator.php index 961aedfd..644bb782 100644 --- a/src/Generators/NovaTestGenerator.php +++ b/src/Generators/NovaTestGenerator.php @@ -20,8 +20,6 @@ class NovaTestGenerator extends AbstractTestsGenerator public function generate(): void { if (class_exists(NovaServiceProvider::class)) { - $this->checkResourceExists('nova', "Nova{$this->model}ResourceTest"); - $novaResources = $this->getCommonNovaResources(); if (count($novaResources) > 1) { @@ -45,6 +43,8 @@ public function generate(): void $this->novaResourceClassName = Arr::first($novaResources); + $this->checkResourceExists('nova', $this->getTestClassName(), $this->modelSubFolder); + parent::generate(); } else { event(new SuccessCreateMessage("Nova is not installed and NovaTest is skipped")); @@ -60,24 +60,23 @@ public function generateTests(): void $actions = $this->getActions(); $filters = $this->collectFilters(); - $resourceClass = Str::afterLast($this->novaResourceClassName, '\\'); - $fileContent = $this->getStub('nova_test', [ - 'entity_namespace' => $this->generateNamespace($this->paths['models'], $this->modelSubFolder), + 'entity_namespace' => $this->generateNamespace('models', $this->modelSubFolder), 'entity' => $this->model, - 'resource_name' => $resourceClass, + 'resource_name' => $this->getTestingEntityName(), 'resource_namespace' => $this->novaResourceClassName, - 'snake_resource' => Str::snake($resourceClass), + 'snake_resource' => Str::snake($this->getTestingEntityName()), 'dromedary_entity' => Str::lcfirst($this->model), 'lower_entities' => $this->getPluralName(Str::snake($this->model)), 'actions' => $actions, 'filters' => $filters, - 'models_namespace' => $this->generateNamespace($this->paths['models']), + 'models_namespace' => $this->generateNamespace('models', $this->modelSubFolder), + 'user_model_path' => $this->generateNamespace('models') . '\User', ]); - $this->saveClass('tests', "Nova{$this->model}ResourceTest", $fileContent); + $this->saveClass('tests', $this->getTestClassName(), $fileContent); - event(new SuccessCreateMessage("Created a new Nova test: Nova{$this->model}ResourceTest")); + event(new SuccessCreateMessage("Created a new Nova test: {$this->getTestClassName()}")); } protected function getActions(): array @@ -155,7 +154,7 @@ protected function loadNovaFilters() public function getTestClassName(): string { - return "Nova{$this->model}Test"; + return "Nova{$this->getTestingEntityName()}Test"; } protected function isFixtureNeeded($type): bool @@ -213,8 +212,13 @@ protected function getFilters(): array protected function getDumpName(): string { - $modelName = Str::snake($this->model); + $entityName = Str::snake($this->getTestingEntityName()); - return "nova_{$modelName}_dump.sql"; + return "nova_{$entityName}_dump.sql"; + } + + protected function getTestingEntityName(): string + { + return Str::afterLast($this->novaResourceClassName, '\\'); } } diff --git a/src/Generators/TestsGenerator.php b/src/Generators/TestsGenerator.php index 4e552888..077b5400 100644 --- a/src/Generators/TestsGenerator.php +++ b/src/Generators/TestsGenerator.php @@ -60,4 +60,9 @@ protected function generateTests(): void event(new SuccessCreateMessage($createMessage)); } + + protected function getTestingEntityName(): string + { + return $this->model; + } } diff --git a/stubs/nova_test.blade.php b/stubs/nova_test.blade.php index 6e81e8aa..b70b533f 100644 --- a/stubs/nova_test.blade.php +++ b/stubs/nova_test.blade.php @@ -5,7 +5,7 @@ use RonasIT\Support\Testing\ModelTestState; use RonasIT\Support\Traits\NovaTestTrait; use {{ $resource_namespace }}; -use {{ $models_namespace }}\User; +use {{ $user_model_path }}; class Nova{{ $resource_name }}Test extends TestCase { diff --git a/tests/CommandTest.php b/tests/CommandTest.php index b289dce1..6ef6feb5 100644 --- a/tests/CommandTest.php +++ b/tests/CommandTest.php @@ -91,10 +91,10 @@ public function testCallCommand() $this->assertGeneratedFileEquals('validation.php', 'lang/en/validation.php'); $this->assertGeneratedFileEquals('nova_resource.php', 'app/Nova/PostResource.php'); $this->assertGeneratedFileEquals('nova_test.php', 'tests/NovaPostResourceTest.php'); - $this->assertGeneratedFileEquals('nova_dump.php', 'tests/fixtures/NovaPostTest/nova_post_dump.sql'); - $this->assertGeneratedFileEquals('create_request.json', 'tests/fixtures/NovaPostTest/create_post_request.json'); - $this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/NovaPostTest/create_post_response.json'); - $this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/NovaPostTest/update_post_request.json'); + $this->assertGeneratedFileEquals('nova_dump.php', 'tests/fixtures/NovaPostResourceTest/nova_post_resource_dump.sql'); + $this->assertGeneratedFileEquals('create_request.json', 'tests/fixtures/NovaPostResourceTest/create_post_resource_request.json'); + $this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/NovaPostResourceTest/create_post_resource_response.json'); + $this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/NovaPostResourceTest/update_post_resource_request.json'); } public function testCallCommandSubFoldersModel() @@ -137,10 +137,10 @@ public function testCallCommandSubFoldersModel() $this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/PostTest/create_post_response.json'); $this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/PostTest/update_post_request.json'); $this->assertGeneratedFileEquals('validation.php', 'lang/en/validation.php'); - $this->assertGeneratedFileEquals('nova_dump.php', 'tests/fixtures/NovaPostTest/nova_post_dump.sql'); - $this->assertGeneratedFileEquals('create_request.json', 'tests/fixtures/NovaPostTest/create_post_request.json'); - $this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/NovaPostTest/create_post_response.json'); - $this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/NovaPostTest/update_post_request.json'); + $this->assertGeneratedFileEquals('nova_dump.php', 'tests/fixtures/NovaPostResourceTest/nova_post_resource_dump.sql'); + $this->assertGeneratedFileEquals('create_request.json', 'tests/fixtures/NovaPostResourceTest/create_post_resource_request.json'); + $this->assertGeneratedFileEquals('create_response.json', 'tests/fixtures/NovaPostResourceTest/create_post_resource_response.json'); + $this->assertGeneratedFileEquals('update_request.json', 'tests/fixtures/NovaPostResourceTest/update_post_resource_request.json'); } public function testMakeOnly() diff --git a/tests/NovaTestGeneratorTest.php b/tests/NovaTestGeneratorTest.php index 84d1b59e..4cc90741 100644 --- a/tests/NovaTestGeneratorTest.php +++ b/tests/NovaTestGeneratorTest.php @@ -68,6 +68,9 @@ public function testGenerateNovaTestAlreadyExists() $this->mockClass(NovaTestGenerator::class, [ $this->classExistsMethodCall(['nova', 'NovaPostResourceTest']), + $this->getCommonNovaResourcesMock([ + 'PostResource', + ]), ]); $this->assertExceptionThrew( @@ -106,11 +109,11 @@ public function testNovaTestStubNotExist() ->setModel('WelcomeBonus') ->generate(); - $this->assertFileDoesNotExist('tests/NovaWelcomeBonusTest.php'); - $this->assertGeneratedFileEquals('dump.sql', 'tests/fixtures/NovaWelcomeBonusTest/nova_welcome_bonus_dump.sql'); - $this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_request.json'); - $this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_response.json'); - $this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/update_welcome_bonus_request.json'); + $this->assertFileDoesNotExist('tests/NovaWelcomeBonusResourceTest.php'); + $this->assertGeneratedFileEquals('dump.sql', 'tests/fixtures/NovaWelcomeBonusResourceTest/nova_welcome_bonus_resource_dump.sql'); + $this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/create_welcome_bonus_resource_request.json'); + $this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/create_welcome_bonus_resource_response.json'); + $this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/update_welcome_bonus_resource_request.json'); $this->assertEventPushed( className: WarningEvent::class, @@ -140,10 +143,10 @@ public function testDumpStubNotExist() ->generate(); $this->assertGeneratedFileEquals('created_resource_test.php', 'tests/NovaWelcomeBonusResourceTest.php'); - $this->assertFileDoesNotExist('tests/fixtures/NovaWelcomeBonusTest/nova_welcome_bonus_dump.sql'); - $this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_request.json'); - $this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_response.json'); - $this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/update_welcome_bonus_request.json'); + $this->assertFileDoesNotExist('tests/fixtures/NovaWelcomeBonusResourceTest/nova_welcome_bonus_resource_dump.sql'); + $this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/create_welcome_bonus_resource_request.json'); + $this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/create_welcome_bonus_resource_response.json'); + $this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/update_welcome_bonus_resource_request.json'); $this->assertEventPushed( className: WarningEvent::class, @@ -177,10 +180,10 @@ public function testSuccess() ->generate(); $this->assertGeneratedFileEquals('created_resource_test.php', 'tests/NovaWelcomeBonusResourceTest.php'); - $this->assertGeneratedFileEquals('dump.sql', 'tests/fixtures/NovaWelcomeBonusTest/nova_welcome_bonus_dump.sql'); - $this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_request.json'); - $this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_response.json'); - $this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/update_welcome_bonus_request.json'); + $this->assertGeneratedFileEquals('dump.sql', 'tests/fixtures/NovaWelcomeBonusResourceTest/nova_welcome_bonus_resource_dump.sql'); + $this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/create_welcome_bonus_resource_request.json'); + $this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/create_welcome_bonus_resource_response.json'); + $this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusResourceTest/update_welcome_bonus_resource_request.json'); } public function testGenerateNovaPackageNotInstall() diff --git a/tests/fixtures/CommandTest/nova_test.php b/tests/fixtures/CommandTest/nova_test.php index 67b3183c..30799a7c 100644 --- a/tests/fixtures/CommandTest/nova_test.php +++ b/tests/fixtures/CommandTest/nova_test.php @@ -2,12 +2,12 @@ namespace App\Tests; -use RonasIT\Support\Tests\Support\Command\Models\Post; +use Models\Post; use PHPUnit\Framework\Attributes\DataProvider; use RonasIT\Support\Testing\ModelTestState; use RonasIT\Support\Traits\NovaTestTrait; use App\Nova\PostResource; -use RonasIT\Support\Tests\Support\Command\Models\User; +use Models\User; class NovaPostResourceTest extends TestCase { diff --git a/tests/fixtures/CommandTest/subfolder/nova_test.php b/tests/fixtures/CommandTest/subfolder/nova_test.php index b26f67b0..7bca9e92 100644 --- a/tests/fixtures/CommandTest/subfolder/nova_test.php +++ b/tests/fixtures/CommandTest/subfolder/nova_test.php @@ -2,12 +2,12 @@ namespace App\Tests; -use RonasIT\Support\Tests\Support\Command\Models\Forum\Post; +use Models\Forum\Post; use PHPUnit\Framework\Attributes\DataProvider; use RonasIT\Support\Testing\ModelTestState; use RonasIT\Support\Traits\NovaTestTrait; use App\Nova\Forum\PostResource; -use RonasIT\Support\Tests\Support\Command\Models\User; +use Models\User; class NovaPostResourceTest extends TestCase { diff --git a/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php b/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php index 158f73c1..c8c1188a 100644 --- a/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php +++ b/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php @@ -2,12 +2,12 @@ namespace App\Tests; -use RonasIT\Support\Tests\Support\Models\WelcomeBonus; +use Models\WelcomeBonus; use PHPUnit\Framework\Attributes\DataProvider; use RonasIT\Support\Testing\ModelTestState; use RonasIT\Support\Traits\NovaTestTrait; use App\Nova\WelcomeBonusResource; -use RonasIT\Support\Tests\Support\Models\User; +use Models\User; class NovaWelcomeBonusResourceTest extends TestCase {