Skip to content

Commit 61b547a

Browse files
committed
fix: remove reflection from NovaResourceGeneratorTest
1 parent 80d7b2c commit 61b547a

File tree

7 files changed

+96
-44
lines changed

7 files changed

+96
-44
lines changed

src/Generators/NovaResourceGenerator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ protected function prepareNovaFields(): array
112112
return $result;
113113
}
114114

115-
protected function getFieldsForCreation(): array
115+
public function getFieldsForCreation(): array
116116
{
117117
if ($this->commandFieldsExists()) {
118118
return $this->getFieldsFromCommandLineArguments();

src/Support/DatabaseNovaField.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class DatabaseNovaField extends AbstractNovaField
99
public function __construct(Column $field)
1010
{
1111
$this->isRequired = $field->getNotNull();
12-
$this->type = $field->getType();
12+
$this->type = strtolower($field->getType()->getBindingType()->name);
1313
$this->name = $field->getName();
1414
}
1515
}

tests/NovaResourceGeneratorTest.php

Lines changed: 24 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,15 @@ class NovaResourceGeneratorTest extends TestCase
1919
{
2020
use NovaResourceGeneratorMockTrait;
2121

22-
public function testCreateWithMissingNovaPackage()
22+
public function setUp(): void
2323
{
24+
parent::setUp();
25+
2426
Event::fake();
27+
}
2528

29+
public function testCreateWithMissingNovaPackage()
30+
{
2631
$this->mockNovaServiceProviderExists(false);
2732

2833
app(NovaResourceGenerator::class)
@@ -67,10 +72,8 @@ className: ClassAlreadyExistsException::class,
6772
->generate();
6873
}
6974

70-
public function testCreate()
75+
public function testSuccess()
7176
{
72-
Event::fake();
73-
7477
$this->mockNovaServiceProviderExists();
7578

7679
$this->mockFilesystem();
@@ -90,41 +93,27 @@ className: SuccessCreateMessage::class,
9093
);
9194
}
9295

93-
public function testGetModelFieldsFromDatabase()
96+
public function testSuccessWithoutCommandLineFields()
9497
{
98+
$this->mockNovaServiceProviderExists();
99+
95100
$this->mockGettingModelInstance();
96101

97-
$reflectionClass = new ReflectionClass(NovaResourceGenerator::class);
98-
$method = $reflectionClass->getMethod('getFieldsForCreation');
99-
$method->setAccessible(true);
102+
$this->mockFilesystem();
100103

101-
$generator = (new NovaResourceGenerator)
104+
app(NovaResourceGenerator::class)
105+
->setModel('Post')
102106
->setFields([])
103-
->setModel('Post');
104-
105-
$fields = $method->invokeArgs($generator, []);
106-
107-
$this->assertEquals([
108-
[
109-
new DatabaseNovaField(new Column('id', new IntegerType)),
110-
new DatabaseNovaField(new Column('title', new StringType)),
111-
new DatabaseNovaField(new Column('created_at', new DatetimeType)),
112-
],
113-
[
114-
'integer' => 'Number',
115-
'smallint' => 'Number',
116-
'bigint' => 'Number',
117-
'float' => 'Number',
118-
'decimal' => 'Number',
119-
'string' => 'Text',
120-
'text' => 'Text',
121-
'guid' => 'Text',
122-
'json' => 'Text',
123-
'date' => 'Date',
124-
'datetime' => 'DateTime',
125-
'datetimetz' => 'DateTime',
126-
'boolean' => 'Boolean',
127-
]
128-
], $fields);
107+
->generate();
108+
109+
$this->assertGeneratedFileEquals(
110+
fixtureName: 'created_resource_without_command_line_fields.php',
111+
filePath: 'app/Nova/PostResource.php',
112+
);
113+
114+
$this->assertEventPushed(
115+
className: SuccessCreateMessage::class,
116+
message: 'Created a new Nova Resource: PostResource',
117+
);
129118
}
130119
}

tests/NovaTestGeneratorTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,22 @@ public function testCreateNovaTestAlreadyExists()
3737
{
3838
$this->mockNovaServiceProviderExists();
3939

40-
$this->assertExceptionThrowed(
41-
className: ClassAlreadyExistsException::class,
42-
message: "Cannot create NovaPostTest cause it's already exist. Remove NovaPostTest.",
43-
);
44-
4540
$this->mockClass(NovaTestGenerator::class, [
4641
$this->classExistsMethodCall(['nova', 'PostNovaResource']),
4742
$this->classExistsMethodCall(['nova', 'NovaPostTest'])
4843
]);
4944

45+
$this->assertExceptionThrowed(
46+
className: ClassAlreadyExistsException::class,
47+
message: "Cannot create NovaPostTest cause it's already exist. Remove NovaPostTest.",
48+
);
49+
5050
app(NovaTestGenerator::class)
5151
->setModel('Post')
5252
->generate();
5353
}
5454

55-
public function testCreate()
55+
public function testSuccess()
5656
{
5757
$this->mockNovaServiceProviderExists();
5858

tests/Support/GeneratorMockTrait.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace RonasIT\Support\Tests\Support;
44

5-
use Illuminate\Support\Facades\Event;
65
use Laravel\Nova\NovaServiceProvider;
76

87
trait GeneratorMockTrait

tests/Support/Models/WelcomeBonus.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ class WelcomeBonus extends Model
99
{
1010
use ModelTrait;
1111

12+
public function getConnectionName(): string
13+
{
14+
return 'pgsql';
15+
}
16+
1217
protected $fillable = [
1318
'title',
1419
'name',
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace App\Nova;
4+
5+
use App\Models\Post;
6+
use Illuminate\Http\Request;
7+
use Laravel\Nova\Fields\ID;
8+
use Laravel\Nova\Fields\Text;
9+
10+
class PostResource extends Resource
11+
{
12+
public static $model = Post::class;
13+
14+
//TODO change field for the title if it required
15+
public static $title = 'name';
16+
17+
//TODO change query fields if it required
18+
public static $search = ['id', 'name'];
19+
20+
public static function label(): string
21+
{
22+
return 'Posts';
23+
}
24+
25+
public function fields(Request $request): array
26+
{
27+
return [
28+
ID::make('Id')
29+
->required()
30+
->sortable(),
31+
Text::make('Title')
32+
->required()
33+
->sortable(),
34+
Text::make('Created At')
35+
->required()
36+
->sortable(),
37+
];
38+
}
39+
40+
public function cards(Request $request): array
41+
{
42+
return [];
43+
}
44+
45+
public function filters(Request $request): array
46+
{
47+
return [];
48+
}
49+
50+
public function lenses(Request $request): array
51+
{
52+
return [];
53+
}
54+
55+
public function actions(Request $request): array
56+
{
57+
return [];
58+
}
59+
}

0 commit comments

Comments
 (0)