Skip to content

Commit 5df22a3

Browse files
authored
Merge pull request #66 from RonasIT/add-nova-tests-generation
Correct nova test generator.
2 parents a793bcb + b65f091 commit 5df22a3

File tree

6 files changed

+45
-11
lines changed

6 files changed

+45
-11
lines changed

src/Generators/AbstractTestsGenerator.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,10 @@ protected function getModelFields($model): array
169169

170170
protected function getMockModel($model): array
171171
{
172+
if (!$this->isFactoryExists($model)) {
173+
return [];
174+
}
175+
172176
$modelClass = $this->getModelClass($model);
173177
$hasFactory = method_exists($modelClass, 'factory') && $this->classExists('factory', "{$model}Factory");
174178
$factory = ($hasFactory) ? $modelClass::factory() : factory($modelClass);

src/Generators/NovaTestGenerator.php

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@
1111

1212
class NovaTestGenerator extends AbstractTestsGenerator
1313
{
14+
protected $novaModelName;
15+
1416
public function generate(): void
1517
{
1618
if (class_exists(NovaServiceProvider::class)) {
17-
if (!$this->classExists('nova', $this->model)) {
19+
if (!$this->doesNovaResourceExists()) {
1820
$this->throwFailureException(
1921
ClassNotExistsException::class,
2022
"Cannot create Nova{$this->model}Test cause {$this->model} Nova resource does not exist.",
@@ -80,17 +82,17 @@ protected function getActions(): array
8082

8183
protected function loadNovaActions()
8284
{
83-
return app("\\App\\Nova\\{$this->model}")->actions(new NovaRequest());
85+
return app("\\App\\Nova\\{$this->novaModelName}")->actions(new NovaRequest());
8486
}
8587

8688
protected function loadNovaFields()
8789
{
88-
return app("\\App\\Nova\\{$this->model}")->fields(new NovaRequest());
90+
return app("\\App\\Nova\\{$this->novaModelName}")->fields(new NovaRequest());
8991
}
9092

9193
protected function loadNovaFilters()
9294
{
93-
return app("\\App\\Nova\\{$this->model}")->filters(new NovaRequest());
95+
return app("\\App\\Nova\\{$this->novaModelName}")->filters(new NovaRequest());
9496
}
9597

9698
public function getTestClassName(): string
@@ -103,7 +105,26 @@ protected function isFixtureNeeded($type): bool
103105
return true;
104106
}
105107

106-
protected function collectFilters()
108+
protected function doesNovaResourceExists(): bool
109+
{
110+
$possibleNovaModelNames = [
111+
"{$this->model}NovaResource",
112+
"{$this->model}Resource",
113+
$this->model
114+
];
115+
116+
foreach ($possibleNovaModelNames as $modelName) {
117+
if ($this->classExists('nova', $modelName)) {
118+
$this->novaModelName = $modelName;
119+
120+
return true;
121+
}
122+
}
123+
124+
return false;
125+
}
126+
127+
protected function collectFilters(): array
107128
{
108129
$filtersFromFields = $this->getFiltersFromFields();
109130
$filters = $this->getFilters();

stubs/nova_test.blade.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@
22
namespace App\Tests;
33

44
use App\Models\{{$entity}};
5-
use Illuminate\Support\Collection;
65
use RonasIT\Support\Tests\ModelTestState;
76
use RonasIT\Support\Traits\AuthTestTrait;
87
@if($shouldUseStatus)
98
use Symfony\Component\HttpFoundation\Response;
109
@endif
1110

12-
class {{$entity}}Test extends TestCase
11+
class Nova{{$entity}}Test extends TestCase
1312
{
1413
use AuthTestTrait;
1514

tests/NovaTestGeneratorTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public function testCreateNovaTestsResourceNotExists()
4343

4444
public function testCreateNovaTestAlreadyExists()
4545
{
46+
$this->setupConfigurations();
47+
4648
$mock = $this->mockClassExistsFunction();
4749

4850
$this->expectException(ClassAlreadyExistsException::class);

tests/Support/NovaTestMockTrait.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public function getGeneratorMockForNonExistingNovaResource(): MockInterface
7474
$mock
7575
->shouldAllowMockingProtectedMethods()
7676
->shouldReceive('classExists')
77-
->once()
77+
->times(3)
7878
->andReturn(false);
7979

8080
return $mock;
@@ -87,10 +87,19 @@ public function getGeneratorMockForExistingNovaResourceTest(): MockInterface
8787
$mock
8888
->shouldAllowMockingProtectedMethods()
8989
->shouldReceive('classExists')
90-
->once()
9190
->with('nova', 'Post')
9291
->andReturn(true);
9392

93+
$mock
94+
->shouldReceive('classExists')
95+
->with('nova', 'PostResource')
96+
->andReturn(false);
97+
98+
$mock
99+
->shouldReceive('classExists')
100+
->with('nova', 'PostNovaResource')
101+
->andReturn(false);
102+
94103
$mock
95104
->shouldReceive('classExists')
96105
->once()

tests/fixtures/NovaTestGeneratorTest/created_resource_test.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
namespace App\Tests;
44

55
use App\Models\Post;
6-
use Illuminate\Support\Collection;
76
use RonasIT\Support\Tests\ModelTestState;
87
use RonasIT\Support\Traits\AuthTestTrait;
98

10-
class PostTest extends TestCase
9+
class NovaPostTest extends TestCase
1110
{
1211
use AuthTestTrait;
1312

0 commit comments

Comments
 (0)