diff --git a/ReadMe.md b/ReadMe.md index 9bc4f0ed..b7653bcd 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -103,6 +103,14 @@ The following options are available: - `--only-seeder` - `--only-resource` + --only-nova-resource : Set this flag if you want to create only nova resource. + + --only-nova-tests : Set this flag if you want to create only nova resource tests. + + --resource-name[=RESOURCE-NAME] : Override the default (App\\Nova\\ModelResource) Nova resource name. Used only with --only-nova-tests. + + please, use flag variable with double screening and double quotes without Nova directory, for example --resource-name="Resources\\Banner\\BannerResource" + #### Mode combination options Sometimes you need to generate the stack of classes to work with some entity only inside the application without diff --git a/src/Commands/MakeEntityCommand.php b/src/Commands/MakeEntityCommand.php index a5b047a9..8238c219 100644 --- a/src/Commands/MakeEntityCommand.php +++ b/src/Commands/MakeEntityCommand.php @@ -60,7 +60,8 @@ class MakeEntityCommand extends Command {--only-seeder : Set this flag if you want to create only seeder.} {--only-nova-resource : Set this flag if you want to create only nova resource.} {--only-nova-tests : Set this flag if you want to create only nova resource tests.} - + {--resource-name= : Override the default Nova resource name. Used only with --only-nova-tests.} + {--methods=CRUD : Set types of methods to create. Affect on routes, requests classes, controller\'s methods and tests methods.} {--i|integer=* : Add integer field to entity.} @@ -228,6 +229,7 @@ protected function runGeneration(string $generator): void ->setFields($this->getFields()) ->setRelations($this->relations) ->setCrudOptions($this->getCrudOptions()) + ->setMetaData(['resource_name' => $this->option('resource-name')]) ->generate(); } 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/EntityGenerator.php b/src/Generators/EntityGenerator.php index 764f1b50..f5dcb0a9 100644 --- a/src/Generators/EntityGenerator.php +++ b/src/Generators/EntityGenerator.php @@ -87,6 +87,11 @@ public function setRelations(RelationsDTO $relations): self return $this; } + public function setMetaData(array $data): self + { + return $this; + } + public function __construct() { $this->paths = config('entity-generator.paths'); diff --git a/src/Generators/NovaTestGenerator.php b/src/Generators/NovaTestGenerator.php index 961aedfd..053821c9 100644 --- a/src/Generators/NovaTestGenerator.php +++ b/src/Generators/NovaTestGenerator.php @@ -15,35 +15,53 @@ class NovaTestGenerator extends AbstractTestsGenerator { - protected string $novaResourceClassName; + protected ?string $novaResourceClassName; public function generate(): void { if (class_exists(NovaServiceProvider::class)) { - $this->checkResourceExists('nova', "Nova{$this->model}ResourceTest"); + if (empty($this->novaResourceClassName)) { + $novaResources = $this->getCommonNovaResources(); + + if (count($novaResources) > 1) { + $foundedResources = implode(', ', $novaResources); + + $this->throwFailureException( + EntityCreateException::class, + "Cannot create Nova{$this->model}ResourceTest cause was found a lot of suitable resources: {$foundedResources}.", + 'Please, use --resource-name option.' + ); + } + + if (empty($novaResources)) { + // TODO: pass $this->modelSubfolder to Exception after refactoring in https://github.com/RonasIT/laravel-entity-generator/issues/179 + $this->throwFailureException( + ClassNotExistsException::class, + "Cannot create Nova{$this->model}ResourceTest cause {$this->model} Nova resource does not exist.", + "Create {$this->model} Nova resource." + ); + } - $novaResources = $this->getCommonNovaResources(); + $this->novaResourceClassName = Arr::first($novaResources); - if (count($novaResources) > 1) { - $foundedResources = implode(', ', $novaResources); + $this->checkResourceExists('nova', $this->getTestClassName(), $this->modelSubFolder); - // TODO: Change exception message after https://github.com/RonasIT/laravel-entity-generator/issues/159 will be ready - $this->throwFailureException( - EntityCreateException::class, - "Cannot create Nova{$this->model}ResourceTest cause was found a lot of suitable resources: {$foundedResources}.", - 'Make test by yourself.' - ); - } + } else { + $this->checkResourceExists('nova', $this->getTestClassName(), $this->modelSubFolder); - if (empty($novaResources)) { - $this->throwFailureException( - ClassNotExistsException::class, - "Cannot create Nova{$this->model}ResourceTest cause {$this->model} Nova resource does not exist.", - "Create {$this->model} Nova resource." - ); - } + if (!$this->isNovaResource($this->novaResourceClassName) || !$this->isResourceNameContainModel($this->novaResourceClassName)) { + // TODO: pass $this->modelSubfolder to Exception after refactoring in https://github.com/RonasIT/laravel-entity-generator/issues/179 - $this->novaResourceClassName = Arr::first($novaResources); + $entityName = $this->getTestingEntityName(); + $entityTestName = $this->getTestClassName(); + + $this->throwFailureException( + ClassNotExistsException::class, + "Cannot create {$entityTestName} cause {$entityName} Nova resource does not exist.", + "Create {$entityName} Nova resource." + ); + } + } parent::generate(); } else { @@ -51,6 +69,15 @@ public function generate(): void } } + public function setMetaData(array $data): self + { + if (!empty($data['resource_name'])) { + $this->novaResourceClassName = $this->pathToNamespace($this->paths['nova'] . DIRECTORY_SEPARATOR . Str::studly($data['resource_name'])); + } + + return $this; + } + public function generateTests(): void { if (!$this->isStubExists('nova_test')) { @@ -60,24 +87,22 @@ 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), ]); - $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 +180,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 +238,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..03a2c248 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 Models\User; class Nova{{ $resource_name }}Test extends TestCase { diff --git a/tests/CommandTest.php b/tests/CommandTest.php index b289dce1..53dcae03 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() @@ -113,7 +113,7 @@ public function testCallCommandSubFoldersModel() $this ->artisan('make:entity Forum/Post --methods=CRUD') ->assertSuccessful(); - + $this->assertGeneratedFileEquals('subfolder/model.php', 'RonasIT/Support/Tests/Support/Command/Models/Forum/Post.php'); $this->assertGeneratedFileEquals('subfolder/factory.php', 'RonasIT/Support/Tests/Support/Command/Factories/PostFactory.php'); $this->assertGeneratedFileEquals('subfolder/repository.php', 'app/Repositories/PostRepository.php'); @@ -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() @@ -180,6 +180,52 @@ public function testMakeOnly() $this->assertFileDoesNotExist('tests/fixtures/NovaPostTest/update_post_request.json'); } + public function testMakeOnlyNovaTest(): void + { + Carbon::setTestNow('2016-10-20 11:05:00'); + + $this->mockFilesystemWithPostModelAndResource(); + + config([ + 'entity-generator.paths.models' => 'RonasIT\Support\Tests\Support\Command\Models', + 'entity-generator.paths.factories' => 'RonasIT\Support\Tests\Support\Command\Factories', + ]); + + $this->mockGeneratorOnlyNovaTests(); + + $this + ->artisan('make:entity Post --only-nova-tests --resource-name=PostResource') + ->assertSuccessful(); + + $this->assertFileDoesNotExist('app/Repositories/PostRepository.php'); + $this->assertFileDoesNotExist('database/migrations/2016_10_20_110500_posts_create_table.php'); + $this->assertFileDoesNotExist('database/factories/PostFactory.php'); + $this->assertFileDoesNotExist('database/seeders/PostSeeder.php'); + $this->assertFileDoesNotExist('app/Models/Post.php'); + $this->assertFileDoesNotExist('app/Services/PostService.php'); + $this->assertFileDoesNotExist('app/Http/Requests/Post/CreatePostRequest.php'); + $this->assertFileDoesNotExist('app/Http/Requests/Post/GetPostRequest.php'); + $this->assertFileDoesNotExist('app/Http/Requests/Post/SearchPostsRequest.php'); + $this->assertFileDoesNotExist('app/Http/Requests/Post/UpdatePostRequest.php'); + $this->assertFileDoesNotExist('app/Http/Requests/Post/DeletePostRequest.php'); + $this->assertFileDoesNotExist('app/Http/Controllers/PostController.php'); + $this->assertFileDoesNotExist('app/Http/Resources/Post/PostResource.php'); + $this->assertFileDoesNotExist('app/Http/Resources/Post/PostsCollectionResource.php'); + $this->assertFileDoesNotExist('routes/api.php'); + $this->assertFileDoesNotExist('tests/PostTest.php'); + $this->assertFileDoesNotExist('tests/fixtures/PostTest/dump.sql'); + $this->assertFileDoesNotExist('tests/fixtures/PostTest/create_post_request.json'); + $this->assertFileDoesNotExist('tests/fixtures/PostTest/create_post_response.json'); + $this->assertFileDoesNotExist('tests/fixtures/PostTest/update_post_request.json'); + $this->assertFileDoesNotExist('lang/en/validation.php'); + $this->assertFileDoesNotExist('app/Nova/PostResource.php'); + $this->assertGeneratedFileEquals('nova_test.php', 'tests/NovaPostResourceTest.php'); + $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 testCallWithNotDefaultConfig() { $this->app->instance('path.base', $this->generatedFileBasePath); diff --git a/tests/NovaTestGeneratorTest.php b/tests/NovaTestGeneratorTest.php index 84d1b59e..f1816613 100644 --- a/tests/NovaTestGeneratorTest.php +++ b/tests/NovaTestGeneratorTest.php @@ -41,24 +41,40 @@ className: ClassNotExistsException::class, ->generate(); } - public function testGenerateToManyResources(): void + public function testGenerateResourceWithSetResourceNameNotExists() + { + $this->assertExceptionThrew( + className: ClassNotExistsException::class, + message: 'Cannot create NovaWelcomeBonusDraftResourceTest cause WelcomeBonusDraftResource Nova resource does not exist. Create WelcomeBonusDraftResource Nova resource.', + ); + + $this->mockNativeGeneratorFunctions( + $this->nativeClassExistsMethodCall([NovaServiceProvider::class, true]), + $this->nativeIsSubClassOfMethodCall(['App\Nova\Resources\WelcomeBonusDraftResource', 'Laravel\\Nova\\Resource'], false), + ); + + app(NovaTestGenerator::class) + ->setModel('Post') + ->setMetaData(['resource_name' => 'Resources\WelcomeBonusDraftResource']) + ->generate(); + } + + public function testGenerateNovaTestWithSetResourceNameAlreadyExists() { $this->mockNovaServiceProviderExists(); $this->mockClass(NovaTestGenerator::class, [ - $this->getCommonNovaResourcesMock([ - 'BasePostResource', - 'PublishPostResource', - ]), + $this->classExistsMethodCall(['nova', 'NovaPostResourceTest']), ]); $this->assertExceptionThrew( - className: EntityCreateException::class, - message: 'Cannot create NovaPostResourceTest cause was found a lot of suitable resources: BasePostResource, PublishPostResource. Make test by yourself.', + className: ResourceAlreadyExistsException::class, + message: "Cannot create NovaPostResourceTest cause it already exists. Remove app/Nova/NovaPostResourceTest.php and run command again.", ); app(NovaTestGenerator::class) ->setModel('Post') + ->setMetaData(['resource_name' => 'PostResource']) ->generate(); } @@ -75,6 +91,28 @@ className: ResourceAlreadyExistsException::class, message: "Cannot create NovaPostResourceTest cause it already exists. Remove app/Nova/NovaPostResourceTest.php and run command again.", ); + app(NovaTestGenerator::class) + ->setModel('Post') + ->setMetaData(['resource_name' => 'PostResource']) + ->generate(); + } + + public function testGenerateToManyResources(): void + { + $this->mockNovaServiceProviderExists(); + + $this->mockClass(NovaTestGenerator::class, [ + $this->getCommonNovaResourcesMock([ + 'BasePostResource', + 'PublishPostResource', + ]), + ]); + + $this->assertExceptionThrew( + className: EntityCreateException::class, + message: 'Cannot create NovaPostResourceTest cause was found a lot of suitable resources: BasePostResource, PublishPostResource. Please, use --resource-name option.', + ); + app(NovaTestGenerator::class) ->setModel('Post') ->generate(); @@ -89,7 +127,7 @@ public function testNovaTestStubNotExist() $this->mockNativeGeneratorFunctions( $this->nativeClassExistsMethodCall([NovaServiceProvider::class, true]), - $this->nativeClassExistsMethodCall([WelcomeBonus::class, true]), + $this->nativeClassExistsMethodCall(['RonasIT\Support\Tests\Support\Models\WelcomeBonus']), ); $this->mockClass(NovaTestGenerator::class, [ @@ -106,11 +144,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, @@ -139,11 +177,11 @@ public function testDumpStubNotExist() ->setModel('WelcomeBonus') ->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->assertGeneratedFileEquals('created_resource_test_without_set_resource_name.php', 'tests/NovaWelcomeBonusResourceTest.php'); + $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, @@ -176,11 +214,39 @@ public function testSuccess() ->setModel('WelcomeBonus') ->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('created_resource_test_without_set_resource_name.php', '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'); + } + + public function testSuccessWithSetResourceName() + { + config([ + 'entity-generator.paths.models' => 'RonasIT/Support/Tests/Support/Models', + ]); + + $this->mockDBTransactionStartRollback(); + + $this->mockNativeGeneratorFunctions( + $this->nativeClassExistsMethodCall([NovaServiceProvider::class, true]), + $this->nativeClassExistsMethodCall([WelcomeBonus::class, true]), + $this->nativeIsSubClassOfMethodCall(['App\Nova\Resources\WelcomeBonusDraftResource', 'Laravel\\Nova\\Resource']), + ); + + $this->mockNovaRequestClassCall(); + + app(NovaTestGenerator::class) + ->setModel('WelcomeBonus') + ->setMetaData(['resource_name' => 'Resources\WelcomeBonusDraftResource']) + ->generate(); + + $this->assertGeneratedFileEquals('created_resource_test.php', 'tests/NovaWelcomeBonusDraftResourceTest.php'); + $this->assertGeneratedFileEquals('dump.sql', 'tests/fixtures/NovaWelcomeBonusDraftResourceTest/nova_welcome_bonus_draft_resource_dump.sql'); + $this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusDraftResourceTest/create_welcome_bonus_draft_resource_request.json'); + $this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusDraftResourceTest/create_welcome_bonus_draft_resource_response.json'); + $this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusDraftResourceTest/update_welcome_bonus_draft_resource_request.json'); } public function testGenerateNovaPackageNotInstall() diff --git a/tests/Support/Command/CommandMockTrait.php b/tests/Support/Command/CommandMockTrait.php index d04f3fed..900dc78d 100644 --- a/tests/Support/Command/CommandMockTrait.php +++ b/tests/Support/Command/CommandMockTrait.php @@ -20,6 +20,17 @@ public function mockFilesystemPostModelExists(): void $fileSystemMock->setStructure(); } + public function mockFilesystemWithPostModelAndResource(): void + { + $fileSystemMock = new FileSystemMock(); + + $fileSystemMock->models = ['Post.php' => $this->mockPhpFileContent()]; + $fileSystemMock->novaModels = ['PostResource.php' => $this->mockPhpFileContent()]; + $fileSystemMock->config = ['entity-generator.php' => '']; + + $fileSystemMock->setStructure(); + } + public function mockFilesystem(): void { $fileSystemMock = new FileSystemMock(); @@ -83,8 +94,33 @@ public function mockGeneratorSubFolders(): void ); } - public function nativeIsSubClassOfMethodCall(array $arguments, bool $result = true): array + public function mockGeneratorOnlyNovaTests(): void { - return $this->functionCall('is_subclass_of', $arguments, $result); + $this->mockClass(NovaTestGenerator::class, [ + $this->functionCall( + name: 'loadNovaActions', + result: [], + ), + $this->functionCall( + name: 'loadNovaFields', + result: [], + ), + $this->functionCall( + name: 'loadNovaFilters', + result: [], + ), + $this->classExistsMethodCall(['nova', 'NovaPostResourceTest'], false), + $this->classExistsMethodCall(['models', 'User'], false), + $this->classExistsMethodCall(['factories', 'PostFactory']), + $this->classExistsMethodCall(['factories', 'PostFactory']), + ]); + + $this->mockDBTransactionStartRollback(); + + $this->mockNativeGeneratorFunctions( + $this->nativeClassExistsMethodCall(['Laravel\Nova\NovaServiceProvider', true]), + $this->nativeIsSubClassOfMethodCall(['App\Nova\PostResource', 'Laravel\\Nova\\Resource']), + $this->nativeClassExistsMethodCall(['RonasIT\Support\Tests\Support\Command\Models\Post', true]), + ); } } diff --git a/tests/Support/FileSystemMock.php b/tests/Support/FileSystemMock.php index 11c84f27..425cbf5d 100644 --- a/tests/Support/FileSystemMock.php +++ b/tests/Support/FileSystemMock.php @@ -8,6 +8,7 @@ class FileSystemMock { public ?array $novaModels = null; + public ?array $novaResources = null; public ?array $novaActions = null; public ?array $models = null; public ?array $controllers = null; @@ -32,6 +33,18 @@ public function setStructure(): void } } + if (!is_null($this->novaResources)) { + if (!array_key_exists('Nova', $structure['app'])) { + $structure['app']['Nova'] = []; + } + + $structure['app']['Nova']['Resources'] = []; + + foreach ($this->novaResources as $novaResource => $content) { + $structure['app']['Nova']['Resources'][$novaResource] = $content; + } + } + if (!is_null($this->novaActions)) { if (!array_key_exists('Nova', $structure['app'])) { $structure['app']['Nova'] = []; diff --git a/tests/Support/GeneratorMockTrait.php b/tests/Support/GeneratorMockTrait.php index 33cec554..641a0be9 100644 --- a/tests/Support/GeneratorMockTrait.php +++ b/tests/Support/GeneratorMockTrait.php @@ -32,6 +32,11 @@ public function mockNovaServiceProviderExists(bool $result = true): void ); } + public function nativeIsSubClassOfMethodCall(array $arguments, bool $result = true): array + { + return $this->functionCall('is_subclass_of', $arguments, $result); + } + public function classExistsMethodCall(array $arguments, bool $result = true): array { return [ diff --git a/tests/Support/Models/News.php b/tests/Support/Models/News.php new file mode 100644 index 00000000..e1c6c5ac --- /dev/null +++ b/tests/Support/Models/News.php @@ -0,0 +1,25 @@ + $this->mockPhpFileContent(), ]; - $fileSystemMock->models = [ + $fileSystemMock->novaResources = [ + 'WelcomeBonusDraftResource.php' => $this->mockPhpFileContent(), 'WelcomeBonus.php' => $this->mockPhpFileContent(), + 'PostResource.php' => $this->mockPhpFileContent(), ]; - $fileSystemMock->testFixtures = [ - 'NovaWelcomeBonusTest' => [] + $fileSystemMock->models = [ + 'WelcomeBonus.php' => $this->mockPhpFileContent(), + 'Post.php' => $this->mockPhpFileContent(), + 'News.php' => $this->mockPhpFileContent(), ]; $fileSystemMock->setStructure(); 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/create_post_request.json b/tests/fixtures/NovaTestGeneratorTest/create_post_request.json new file mode 100644 index 00000000..538b482c --- /dev/null +++ b/tests/fixtures/NovaTestGeneratorTest/create_post_request.json @@ -0,0 +1,4 @@ +{ + "title": 1, + "name": 1 +} \ No newline at end of file diff --git a/tests/fixtures/NovaTestGeneratorTest/create_post_response.json b/tests/fixtures/NovaTestGeneratorTest/create_post_response.json new file mode 100644 index 00000000..ea1ee8ea --- /dev/null +++ b/tests/fixtures/NovaTestGeneratorTest/create_post_response.json @@ -0,0 +1,5 @@ +{ + "id": 1, + "title": 1, + "name": 1 +} \ No newline at end of file diff --git a/tests/fixtures/NovaTestGeneratorTest/created_post_resource_test.php b/tests/fixtures/NovaTestGeneratorTest/created_post_resource_test.php new file mode 100644 index 00000000..e17d2518 --- /dev/null +++ b/tests/fixtures/NovaTestGeneratorTest/created_post_resource_test.php @@ -0,0 +1,262 @@ +skipDocumentationCollecting(); + } + + public function testCreate(): void + { + $data = $this->getJsonFixture('create_post_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(PostResource::class, $data); + + $response->assertCreated(); + + $this->assertEqualsFixture('create_post_resource_response', $response->json()); + + // TODO: Need to remove last argument after first successful start + self::$postState->assertChangesEqualsFixture('create_posts_state', true); + } + + public function testCreateNoAuth(): void + { + $response = $this->novaCreateResourceAPICall(PostResource::class); + + $response->assertUnauthorized(); + + self::$postState->assertNotChanged(); + } + + public function testCreateValidationError(): void + { + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(PostResource::class); + + $response->assertUnprocessable(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('create_validation_response', $response->json(), true); + + self::$postState->assertNotChanged(); + } + + public function testUpdate(): void + { + $data = $this->getJsonFixture('update_post_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(PostResource::class, 1, $data); + + $response->assertNoContent(); + + // TODO: Need to remove last argument after first successful start + self::$postState->assertChangesEqualsFixture('update_posts_state', true); + } + + public function testUpdateNotExists(): void + { + $data = $this->getJsonFixture('update_post_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(PostResource::class, 0, $data); + + $response->assertNotFound(); + } + + public function testUpdateNoAuth(): void + { + $response = $this->novaUpdateResourceAPICall(PostResource::class, 1); + + $response->assertUnauthorized(); + } + + public function testUpdateValidationError(): void + { + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(PostResource::class, 4); + + $response->assertUnprocessable(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('update_validation_response', $response->json(), true); + } + + public function testGetUpdatableFields(): void + { + $response = $this->novaActingAs(self::$user)->novaGetUpdatableFieldsAPICall(PostResource::class, 1); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_updatable_fields_response', $response->json(), true); + } + + public function testDelete(): void + { + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(PostResource::class, [1, 2]); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + self::$postState->assertChangesEqualsFixture('delete_posts_state', true); + } + + public function testDeleteNotExists(): void + { + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(PostResource::class, [0]); + + $response->assertNotFound(); + } + + public function testDeleteNoAuth(): void + { + $response = $this->novaDeleteResourceAPICall(PostResource::class, [1, 2]); + + $response->assertUnauthorized(); + } + + public function testGet(): void + { + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(PostResource::class, 1); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_post_resource_response', $response->json(), true); + } + + public function testGetNotExists(): void + { + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(PostResource::class, 0); + + $response->assertNotFound(); + } + + public function testGetNoAuth(): void + { + $response = $this->novaGetResourceAPICall(PostResource::class, 1); + + $response->assertUnauthorized(); + } + + public function testSearchUnauthorized(): void + { + $response = $this->novaSearchResourceAPICall(PostResource::class); + + $response->assertUnauthorized(); + } + + public function testGetFieldsVisibleOnCreate(): void + { + $response = $this->novaActingAs(self::$user)->novaGetCreationFieldsAPICall(PostResource::class); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_fields_visible_on_create_response', $response->json(), true); + } + + public static function getRunPostResourceActionsData(): array + { + return [ + [ + 'action' => PublishPostAction::class, + 'request' => [ + 'resources' => '1,2', + ], + 'state' => 'run_publish_post_action_state', + ], + [ + 'action' => UnPublishPostAction::class, + 'request' => [ + 'resources' => '1,2', + ], + 'state' => 'run_un_publish_post_action_state', + ], + ]; + } + + #[DataProvider('getRunPostResourceActionsData')] + public function testRunPostResourceActions($action, $request, $state): void + { + $response = $this->novaActingAs(self::$user)->novaRunActionAPICall(PostResource::class, $action, $request); + + $response->assertOk(); + + $this->assertEmpty($response->getContent()); + + // TODO: Need to remove last argument after first successful start + self::$postState->assertChangesEqualsFixture($state, true); + } + + public static function getPostResourceActionsData(): array + { + return [ + [ + 'resources' => [1, 2], + 'fixture' => 'get_post_resource_actions_publish_post_action', + ], + [ + 'resources' => [1, 2], + 'fixture' => 'get_post_resource_actions_un_publish_post_action', + ], + ]; + } + + #[DataProvider('getPostResourceActionsData')] + public function testGetPostResourceActions(array $resources, string $fixture): void + { + $response = $this->novaActingAs(self::$user)->novaGetActionsAPICall(PostResource::class, $resources); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); + } + + public static function getPostResourceFiltersData(): array + { + return [ + [ + 'request' => [ + 'TextField:description_field' => $this->novaSearchParams(['search term']), + ], + 'fixture' => 'filter_post_resource_by_text_field', + ], + [ + 'request' => [ + 'RonasIT\Support\Tests\Support\NovaTestGeneratorTest\CreatedAtFilter' => $this->novaSearchParams(['search term']), + ], + 'fixture' => 'filter_post_resource_by_created_at_filter', + ], + ]; + } + + #[DataProvider('getPostResourceFiltersData')] + public function testFilterPostResource(array $request, string $fixture): void + { + $response = $this->novaActingAs(self::$user)->novaSearchResourceAPICall(PostResource::class, $request); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); + } +} diff --git a/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php b/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php index 158f73c1..ae9d02f2 100644 --- a/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php +++ b/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php @@ -2,14 +2,14 @@ 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 App\Nova\Resources\WelcomeBonusDraftResource; +use Models\User; -class NovaWelcomeBonusResourceTest extends TestCase +class NovaWelcomeBonusDraftResourceTest extends TestCase { use NovaTestTrait; @@ -28,13 +28,13 @@ public function setUp(): void public function testCreate(): void { - $data = $this->getJsonFixture('create_welcome_bonus_resource_request'); + $data = $this->getJsonFixture('create_welcome_bonus_draft_resource_request'); - $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonusResource::class, $data); + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonusDraftResource::class, $data); $response->assertCreated(); - $this->assertEqualsFixture('create_welcome_bonus_resource_response', $response->json()); + $this->assertEqualsFixture('create_welcome_bonus_draft_resource_response', $response->json()); // TODO: Need to remove last argument after first successful start self::$welcomeBonusState->assertChangesEqualsFixture('create_welcome_bonuses_state', true); @@ -42,7 +42,7 @@ public function testCreate(): void public function testCreateNoAuth(): void { - $response = $this->novaCreateResourceAPICall(WelcomeBonusResource::class); + $response = $this->novaCreateResourceAPICall(WelcomeBonusDraftResource::class); $response->assertUnauthorized(); @@ -51,7 +51,7 @@ public function testCreateNoAuth(): void public function testCreateValidationError(): void { - $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonusResource::class); + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonusDraftResource::class); $response->assertUnprocessable(); @@ -63,9 +63,9 @@ public function testCreateValidationError(): void public function testUpdate(): void { - $data = $this->getJsonFixture('update_welcome_bonus_resource_request'); + $data = $this->getJsonFixture('update_welcome_bonus_draft_resource_request'); - $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusResource::class, 1, $data); + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusDraftResource::class, 1, $data); $response->assertNoContent(); @@ -75,23 +75,23 @@ public function testUpdate(): void public function testUpdateNotExists(): void { - $data = $this->getJsonFixture('update_welcome_bonus_resource_request'); + $data = $this->getJsonFixture('update_welcome_bonus_draft_resource_request'); - $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusResource::class, 0, $data); + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusDraftResource::class, 0, $data); $response->assertNotFound(); } public function testUpdateNoAuth(): void { - $response = $this->novaUpdateResourceAPICall(WelcomeBonusResource::class, 1); + $response = $this->novaUpdateResourceAPICall(WelcomeBonusDraftResource::class, 1); $response->assertUnauthorized(); } public function testUpdateValidationError(): void { - $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusResource::class, 4); + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusDraftResource::class, 4); $response->assertUnprocessable(); @@ -101,7 +101,7 @@ public function testUpdateValidationError(): void public function testGetUpdatableFields(): void { - $response = $this->novaActingAs(self::$user)->novaGetUpdatableFieldsAPICall(WelcomeBonusResource::class, 1); + $response = $this->novaActingAs(self::$user)->novaGetUpdatableFieldsAPICall(WelcomeBonusDraftResource::class, 1); $response->assertOk(); @@ -111,7 +111,7 @@ public function testGetUpdatableFields(): void public function testDelete(): void { - $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonusResource::class, [1, 2]); + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonusDraftResource::class, [1, 2]); $response->assertOk(); @@ -121,52 +121,52 @@ public function testDelete(): void public function testDeleteNotExists(): void { - $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonusResource::class, [0]); + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonusDraftResource::class, [0]); $response->assertNotFound(); } public function testDeleteNoAuth(): void { - $response = $this->novaDeleteResourceAPICall(WelcomeBonusResource::class, [1, 2]); + $response = $this->novaDeleteResourceAPICall(WelcomeBonusDraftResource::class, [1, 2]); $response->assertUnauthorized(); } public function testGet(): void { - $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonusResource::class, 1); + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonusDraftResource::class, 1); $response->assertOk(); // TODO: Need to remove last argument after first successful start - $this->assertEqualsFixture('get_welcome_bonus_resource_response', $response->json(), true); + $this->assertEqualsFixture('get_welcome_bonus_draft_resource_response', $response->json(), true); } public function testGetNotExists(): void { - $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonusResource::class, 0); + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonusDraftResource::class, 0); $response->assertNotFound(); } public function testGetNoAuth(): void { - $response = $this->novaGetResourceAPICall(WelcomeBonusResource::class, 1); + $response = $this->novaGetResourceAPICall(WelcomeBonusDraftResource::class, 1); $response->assertUnauthorized(); } public function testSearchUnauthorized(): void { - $response = $this->novaSearchResourceAPICall(WelcomeBonusResource::class); + $response = $this->novaSearchResourceAPICall(WelcomeBonusDraftResource::class); $response->assertUnauthorized(); } public function testGetFieldsVisibleOnCreate(): void { - $response = $this->novaActingAs(self::$user)->novaGetCreationFieldsAPICall(WelcomeBonusResource::class); + $response = $this->novaActingAs(self::$user)->novaGetCreationFieldsAPICall(WelcomeBonusDraftResource::class); $response->assertOk(); @@ -174,7 +174,7 @@ public function testGetFieldsVisibleOnCreate(): void $this->assertEqualsFixture('get_fields_visible_on_create_response', $response->json(), true); } - public static function getRunWelcomeBonusResourceActionsData(): array + public static function getRunWelcomeBonusDraftResourceActionsData(): array { return [ [ @@ -194,10 +194,10 @@ public static function getRunWelcomeBonusResourceActionsData(): array ]; } - #[DataProvider('getRunWelcomeBonusResourceActionsData')] - public function testRunWelcomeBonusResourceActions($action, $request, $state): void + #[DataProvider('getRunWelcomeBonusDraftResourceActionsData')] + public function testRunWelcomeBonusDraftResourceActions($action, $request, $state): void { - $response = $this->novaActingAs(self::$user)->novaRunActionAPICall(WelcomeBonusResource::class, $action, $request); + $response = $this->novaActingAs(self::$user)->novaRunActionAPICall(WelcomeBonusDraftResource::class, $action, $request); $response->assertOk(); @@ -207,24 +207,24 @@ public function testRunWelcomeBonusResourceActions($action, $request, $state): v self::$welcomeBonusState->assertChangesEqualsFixture($state, true); } - public static function getWelcomeBonusResourceActionsData(): array + public static function getWelcomeBonusDraftResourceActionsData(): array { return [ [ 'resources' => [1, 2], - 'fixture' => 'get_welcome_bonus_resource_actions_publish_post_action', + 'fixture' => 'get_welcome_bonus_draft_resource_actions_publish_post_action', ], [ 'resources' => [1, 2], - 'fixture' => 'get_welcome_bonus_resource_actions_un_publish_post_action', + 'fixture' => 'get_welcome_bonus_draft_resource_actions_un_publish_post_action', ], ]; } - #[DataProvider('getWelcomeBonusResourceActionsData')] - public function testGetWelcomeBonusResourceActions(array $resources, string $fixture): void + #[DataProvider('getWelcomeBonusDraftResourceActionsData')] + public function testGetWelcomeBonusDraftResourceActions(array $resources, string $fixture): void { - $response = $this->novaActingAs(self::$user)->novaGetActionsAPICall(WelcomeBonusResource::class, $resources); + $response = $this->novaActingAs(self::$user)->novaGetActionsAPICall(WelcomeBonusDraftResource::class, $resources); $response->assertOk(); @@ -232,28 +232,28 @@ public function testGetWelcomeBonusResourceActions(array $resources, string $fix $this->assertEqualsFixture($fixture, $response->json(), true); } - public static function getWelcomeBonusResourceFiltersData(): array + public static function getWelcomeBonusDraftResourceFiltersData(): array { return [ [ 'request' => [ 'TextField:description_field' => $this->novaSearchParams(['search term']), ], - 'fixture' => 'filter_welcome_bonus_resource_by_text_field', + 'fixture' => 'filter_welcome_bonus_draft_resource_by_text_field', ], [ 'request' => [ 'RonasIT\Support\Tests\Support\NovaTestGeneratorTest\CreatedAtFilter' => $this->novaSearchParams(['search term']), ], - 'fixture' => 'filter_welcome_bonus_resource_by_created_at_filter', + 'fixture' => 'filter_welcome_bonus_draft_resource_by_created_at_filter', ], ]; } - #[DataProvider('getWelcomeBonusResourceFiltersData')] - public function testFilterWelcomeBonusResource(array $request, string $fixture): void + #[DataProvider('getWelcomeBonusDraftResourceFiltersData')] + public function testFilterWelcomeBonusDraftResource(array $request, string $fixture): void { - $response = $this->novaActingAs(self::$user)->novaSearchResourceAPICall(WelcomeBonusResource::class, $request); + $response = $this->novaActingAs(self::$user)->novaSearchResourceAPICall(WelcomeBonusDraftResource::class, $request); $response->assertOk(); diff --git a/tests/fixtures/NovaTestGeneratorTest/created_resource_test_without_set_resource_name.php b/tests/fixtures/NovaTestGeneratorTest/created_resource_test_without_set_resource_name.php new file mode 100644 index 00000000..c8c1188a --- /dev/null +++ b/tests/fixtures/NovaTestGeneratorTest/created_resource_test_without_set_resource_name.php @@ -0,0 +1,263 @@ +skipDocumentationCollecting(); + } + + public function testCreate(): void + { + $data = $this->getJsonFixture('create_welcome_bonus_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonusResource::class, $data); + + $response->assertCreated(); + + $this->assertEqualsFixture('create_welcome_bonus_resource_response', $response->json()); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('create_welcome_bonuses_state', true); + } + + public function testCreateNoAuth(): void + { + $response = $this->novaCreateResourceAPICall(WelcomeBonusResource::class); + + $response->assertUnauthorized(); + + self::$welcomeBonusState->assertNotChanged(); + } + + public function testCreateValidationError(): void + { + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonusResource::class); + + $response->assertUnprocessable(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('create_validation_response', $response->json(), true); + + self::$welcomeBonusState->assertNotChanged(); + } + + public function testUpdate(): void + { + $data = $this->getJsonFixture('update_welcome_bonus_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusResource::class, 1, $data); + + $response->assertNoContent(); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('update_welcome_bonuses_state', true); + } + + public function testUpdateNotExists(): void + { + $data = $this->getJsonFixture('update_welcome_bonus_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusResource::class, 0, $data); + + $response->assertNotFound(); + } + + public function testUpdateNoAuth(): void + { + $response = $this->novaUpdateResourceAPICall(WelcomeBonusResource::class, 1); + + $response->assertUnauthorized(); + } + + public function testUpdateValidationError(): void + { + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusResource::class, 4); + + $response->assertUnprocessable(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('update_validation_response', $response->json(), true); + } + + public function testGetUpdatableFields(): void + { + $response = $this->novaActingAs(self::$user)->novaGetUpdatableFieldsAPICall(WelcomeBonusResource::class, 1); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_updatable_fields_response', $response->json(), true); + } + + public function testDelete(): void + { + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonusResource::class, [1, 2]); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('delete_welcome_bonuses_state', true); + } + + public function testDeleteNotExists(): void + { + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonusResource::class, [0]); + + $response->assertNotFound(); + } + + public function testDeleteNoAuth(): void + { + $response = $this->novaDeleteResourceAPICall(WelcomeBonusResource::class, [1, 2]); + + $response->assertUnauthorized(); + } + + public function testGet(): void + { + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonusResource::class, 1); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_welcome_bonus_resource_response', $response->json(), true); + } + + public function testGetNotExists(): void + { + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonusResource::class, 0); + + $response->assertNotFound(); + } + + public function testGetNoAuth(): void + { + $response = $this->novaGetResourceAPICall(WelcomeBonusResource::class, 1); + + $response->assertUnauthorized(); + } + + public function testSearchUnauthorized(): void + { + $response = $this->novaSearchResourceAPICall(WelcomeBonusResource::class); + + $response->assertUnauthorized(); + } + + public function testGetFieldsVisibleOnCreate(): void + { + $response = $this->novaActingAs(self::$user)->novaGetCreationFieldsAPICall(WelcomeBonusResource::class); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_fields_visible_on_create_response', $response->json(), true); + } + + public static function getRunWelcomeBonusResourceActionsData(): array + { + return [ + [ + 'action' => PublishPostAction::class, + 'request' => [ + 'resources' => '1,2', + ], + 'state' => 'run_publish_post_action_state', + ], + [ + 'action' => UnPublishPostAction::class, + 'request' => [ + 'resources' => '1,2', + ], + 'state' => 'run_un_publish_post_action_state', + ], + ]; + } + + #[DataProvider('getRunWelcomeBonusResourceActionsData')] + public function testRunWelcomeBonusResourceActions($action, $request, $state): void + { + $response = $this->novaActingAs(self::$user)->novaRunActionAPICall(WelcomeBonusResource::class, $action, $request); + + $response->assertOk(); + + $this->assertEmpty($response->getContent()); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture($state, true); + } + + public static function getWelcomeBonusResourceActionsData(): array + { + return [ + [ + 'resources' => [1, 2], + 'fixture' => 'get_welcome_bonus_resource_actions_publish_post_action', + ], + [ + 'resources' => [1, 2], + 'fixture' => 'get_welcome_bonus_resource_actions_un_publish_post_action', + ], + ]; + } + + #[DataProvider('getWelcomeBonusResourceActionsData')] + public function testGetWelcomeBonusResourceActions(array $resources, string $fixture): void + { + $response = $this->novaActingAs(self::$user)->novaGetActionsAPICall(WelcomeBonusResource::class, $resources); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); + } + + public static function getWelcomeBonusResourceFiltersData(): array + { + return [ + [ + 'request' => [ + 'TextField:description_field' => $this->novaSearchParams(['search term']), + ], + 'fixture' => 'filter_welcome_bonus_resource_by_text_field', + ], + [ + 'request' => [ + 'RonasIT\Support\Tests\Support\NovaTestGeneratorTest\CreatedAtFilter' => $this->novaSearchParams(['search term']), + ], + 'fixture' => 'filter_welcome_bonus_resource_by_created_at_filter', + ], + ]; + } + + #[DataProvider('getWelcomeBonusResourceFiltersData')] + public function testFilterWelcomeBonusResource(array $request, string $fixture): void + { + $response = $this->novaActingAs(self::$user)->novaSearchResourceAPICall(WelcomeBonusResource::class, $request); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); + } +} diff --git a/tests/fixtures/NovaTestGeneratorTest/created_welcome_bonus_resource_test.php b/tests/fixtures/NovaTestGeneratorTest/created_welcome_bonus_resource_test.php new file mode 100644 index 00000000..0357559a --- /dev/null +++ b/tests/fixtures/NovaTestGeneratorTest/created_welcome_bonus_resource_test.php @@ -0,0 +1,262 @@ +skipDocumentationCollecting(); + } + + public function testCreate(): void + { + $data = $this->getJsonFixture('create_welcome_bonus_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonusResource::class, $data); + + $response->assertCreated(); + + $this->assertEqualsFixture('create_welcome_bonus_resource_response', $response->json()); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('create_welcome_bonuses_state', true); + } + + public function testCreateNoAuth(): void + { + $response = $this->novaCreateResourceAPICall(WelcomeBonusResource::class); + + $response->assertUnauthorized(); + + self::$welcomeBonusState->assertNotChanged(); + } + + public function testCreateValidationError(): void + { + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonusResource::class); + + $response->assertUnprocessable(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('create_validation_response', $response->json(), true); + + self::$welcomeBonusState->assertNotChanged(); + } + + public function testUpdate(): void + { + $data = $this->getJsonFixture('update_welcome_bonus_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusResource::class, 1, $data); + + $response->assertNoContent(); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('update_welcome_bonuses_state', true); + } + + public function testUpdateNotExists(): void + { + $data = $this->getJsonFixture('update_welcome_bonus_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusResource::class, 0, $data); + + $response->assertNotFound(); + } + + public function testUpdateNoAuth(): void + { + $response = $this->novaUpdateResourceAPICall(WelcomeBonusResource::class, 1); + + $response->assertUnauthorized(); + } + + public function testUpdateValidationError(): void + { + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusResource::class, 4); + + $response->assertUnprocessable(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('update_validation_response', $response->json(), true); + } + + public function testGetUpdatableFields(): void + { + $response = $this->novaActingAs(self::$user)->novaGetUpdatableFieldsAPICall(WelcomeBonusResource::class, 1); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_updatable_fields_response', $response->json(), true); + } + + public function testDelete(): void + { + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonusResource::class, [1, 2]); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('delete_welcome_bonuses_state', true); + } + + public function testDeleteNotExists(): void + { + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonusResource::class, [0]); + + $response->assertNotFound(); + } + + public function testDeleteNoAuth(): void + { + $response = $this->novaDeleteResourceAPICall(WelcomeBonusResource::class, [1, 2]); + + $response->assertUnauthorized(); + } + + public function testGet(): void + { + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonusResource::class, 1); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_welcome_bonus_resource_response', $response->json(), true); + } + + public function testGetNotExists(): void + { + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonusResource::class, 0); + + $response->assertNotFound(); + } + + public function testGetNoAuth(): void + { + $response = $this->novaGetResourceAPICall(WelcomeBonusResource::class, 1); + + $response->assertUnauthorized(); + } + + public function testSearchUnauthorized(): void + { + $response = $this->novaSearchResourceAPICall(WelcomeBonusResource::class); + + $response->assertUnauthorized(); + } + + public function testGetFieldsVisibleOnCreate(): void + { + $response = $this->novaActingAs(self::$user)->novaGetCreationFieldsAPICall(WelcomeBonusResource::class); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_fields_visible_on_create_response', $response->json(), true); + } + + public static function getRunWelcomeBonusResourceActionsData(): array + { + return [ + [ + 'action' => PublishPostAction::class, + 'request' => [ + 'resources' => '1,2', + ], + 'state' => 'run_publish_post_action_state', + ], + [ + 'action' => UnPublishPostAction::class, + 'request' => [ + 'resources' => '1,2', + ], + 'state' => 'run_un_publish_post_action_state', + ], + ]; + } + + #[DataProvider('getRunWelcomeBonusResourceActionsData')] + public function testRunWelcomeBonusResourceActions($action, $request, $state): void + { + $response = $this->novaActingAs(self::$user)->novaRunActionAPICall(WelcomeBonusResource::class, $action, $request); + + $response->assertOk(); + + $this->assertEmpty($response->getContent()); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture($state, true); + } + + public static function getWelcomeBonusResourceActionsData(): array + { + return [ + [ + 'resources' => [1, 2], + 'fixture' => 'get_welcome_bonus_resource_actions_publish_post_action', + ], + [ + 'resources' => [1, 2], + 'fixture' => 'get_welcome_bonus_resource_actions_un_publish_post_action', + ], + ]; + } + + #[DataProvider('getWelcomeBonusResourceActionsData')] + public function testGetWelcomeBonusResourceActions(array $resources, string $fixture): void + { + $response = $this->novaActingAs(self::$user)->novaGetActionsAPICall(WelcomeBonusResource::class, $resources); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); + } + + public static function getWelcomeBonusResourceFiltersData(): array + { + return [ + [ + 'request' => [ + 'TextField:description_field' => $this->novaSearchParams(['search term']), + ], + 'fixture' => 'filter_welcome_bonus_resource_by_text_field', + ], + [ + 'request' => [ + 'RonasIT\Support\Tests\Support\NovaTestGeneratorTest\CreatedAtFilter' => $this->novaSearchParams(['search term']), + ], + 'fixture' => 'filter_welcome_bonus_resource_by_created_at_filter', + ], + ]; + } + + #[DataProvider('getWelcomeBonusResourceFiltersData')] + public function testFilterWelcomeBonusResource(array $request, string $fixture): void + { + $response = $this->novaActingAs(self::$user)->novaSearchResourceAPICall(WelcomeBonusResource::class, $request); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); + } +} diff --git a/tests/fixtures/NovaTestGeneratorTest/created_welcome_bonuse_draft_resource_test.php b/tests/fixtures/NovaTestGeneratorTest/created_welcome_bonuse_draft_resource_test.php new file mode 100644 index 00000000..e478293e --- /dev/null +++ b/tests/fixtures/NovaTestGeneratorTest/created_welcome_bonuse_draft_resource_test.php @@ -0,0 +1,262 @@ +skipDocumentationCollecting(); + } + + public function testCreate(): void + { + $data = $this->getJsonFixture('create_welcome_bonus_draft_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonusDraftResource::class, $data); + + $response->assertCreated(); + + $this->assertEqualsFixture('create_welcome_bonus_draft_resource_response', $response->json()); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('create_welcome_bonuses_state', true); + } + + public function testCreateNoAuth(): void + { + $response = $this->novaCreateResourceAPICall(WelcomeBonusDraftResource::class); + + $response->assertUnauthorized(); + + self::$welcomeBonusState->assertNotChanged(); + } + + public function testCreateValidationError(): void + { + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonusDraftResource::class); + + $response->assertUnprocessable(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('create_validation_response', $response->json(), true); + + self::$welcomeBonusState->assertNotChanged(); + } + + public function testUpdate(): void + { + $data = $this->getJsonFixture('update_welcome_bonus_draft_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusDraftResource::class, 1, $data); + + $response->assertNoContent(); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('update_welcome_bonuses_state', true); + } + + public function testUpdateNotExists(): void + { + $data = $this->getJsonFixture('update_welcome_bonus_draft_resource_request'); + + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusDraftResource::class, 0, $data); + + $response->assertNotFound(); + } + + public function testUpdateNoAuth(): void + { + $response = $this->novaUpdateResourceAPICall(WelcomeBonusDraftResource::class, 1); + + $response->assertUnauthorized(); + } + + public function testUpdateValidationError(): void + { + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonusDraftResource::class, 4); + + $response->assertUnprocessable(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('update_validation_response', $response->json(), true); + } + + public function testGetUpdatableFields(): void + { + $response = $this->novaActingAs(self::$user)->novaGetUpdatableFieldsAPICall(WelcomeBonusDraftResource::class, 1); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_updatable_fields_response', $response->json(), true); + } + + public function testDelete(): void + { + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonusDraftResource::class, [1, 2]); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('delete_welcome_bonuses_state', true); + } + + public function testDeleteNotExists(): void + { + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonusDraftResource::class, [0]); + + $response->assertNotFound(); + } + + public function testDeleteNoAuth(): void + { + $response = $this->novaDeleteResourceAPICall(WelcomeBonusDraftResource::class, [1, 2]); + + $response->assertUnauthorized(); + } + + public function testGet(): void + { + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonusDraftResource::class, 1); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_welcome_bonus_draft_resource_response', $response->json(), true); + } + + public function testGetNotExists(): void + { + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonusDraftResource::class, 0); + + $response->assertNotFound(); + } + + public function testGetNoAuth(): void + { + $response = $this->novaGetResourceAPICall(WelcomeBonusDraftResource::class, 1); + + $response->assertUnauthorized(); + } + + public function testSearchUnauthorized(): void + { + $response = $this->novaSearchResourceAPICall(WelcomeBonusDraftResource::class); + + $response->assertUnauthorized(); + } + + public function testGetFieldsVisibleOnCreate(): void + { + $response = $this->novaActingAs(self::$user)->novaGetCreationFieldsAPICall(WelcomeBonusDraftResource::class); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_fields_visible_on_create_response', $response->json(), true); + } + + public static function getRunWelcomeBonusDraftResourceActionsData(): array + { + return [ + [ + 'action' => PublishPostAction::class, + 'request' => [ + 'resources' => '1,2', + ], + 'state' => 'run_publish_post_action_state', + ], + [ + 'action' => UnPublishPostAction::class, + 'request' => [ + 'resources' => '1,2', + ], + 'state' => 'run_un_publish_post_action_state', + ], + ]; + } + + #[DataProvider('getRunWelcomeBonusDraftResourceActionsData')] + public function testRunWelcomeBonusDraftResourceActions($action, $request, $state): void + { + $response = $this->novaActingAs(self::$user)->novaRunActionAPICall(WelcomeBonusDraftResource::class, $action, $request); + + $response->assertOk(); + + $this->assertEmpty($response->getContent()); + + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture($state, true); + } + + public static function getWelcomeBonusDraftResourceActionsData(): array + { + return [ + [ + 'resources' => [1, 2], + 'fixture' => 'get_welcome_bonus_draft_resource_actions_publish_post_action', + ], + [ + 'resources' => [1, 2], + 'fixture' => 'get_welcome_bonus_draft_resource_actions_un_publish_post_action', + ], + ]; + } + + #[DataProvider('getWelcomeBonusDraftResourceActionsData')] + public function testGetWelcomeBonusDraftResourceActions(array $resources, string $fixture): void + { + $response = $this->novaActingAs(self::$user)->novaGetActionsAPICall(WelcomeBonusDraftResource::class, $resources); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); + } + + public static function getWelcomeBonusDraftResourceFiltersData(): array + { + return [ + [ + 'request' => [ + 'TextField:description_field' => $this->novaSearchParams(['search term']), + ], + 'fixture' => 'filter_welcome_bonus_draft_resource_by_text_field', + ], + [ + 'request' => [ + 'RonasIT\Support\Tests\Support\NovaTestGeneratorTest\CreatedAtFilter' => $this->novaSearchParams(['search term']), + ], + 'fixture' => 'filter_welcome_bonus_draft_resource_by_created_at_filter', + ], + ]; + } + + #[DataProvider('getWelcomeBonusDraftResourceFiltersData')] + public function testFilterWelcomeBonusDraftResource(array $request, string $fixture): void + { + $response = $this->novaActingAs(self::$user)->novaSearchResourceAPICall(WelcomeBonusDraftResource::class, $request); + + $response->assertOk(); + + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); + } +} diff --git a/tests/fixtures/NovaTestGeneratorTest/post_dump.sql b/tests/fixtures/NovaTestGeneratorTest/post_dump.sql new file mode 100644 index 00000000..15371a53 --- /dev/null +++ b/tests/fixtures/NovaTestGeneratorTest/post_dump.sql @@ -0,0 +1,3 @@ +INSERT INTO "posts"(id, title, name, created_at, updated_at) VALUES + (1, 1, 1, '2016-10-20 11:05:00', '2016-10-20 11:05:00'); + diff --git a/tests/fixtures/NovaTestGeneratorTest/update_post_request.json b/tests/fixtures/NovaTestGeneratorTest/update_post_request.json new file mode 100644 index 00000000..538b482c --- /dev/null +++ b/tests/fixtures/NovaTestGeneratorTest/update_post_request.json @@ -0,0 +1,4 @@ +{ + "title": 1, + "name": 1 +} \ No newline at end of file