From 875454120040b2e77c36b04958cbfa1be57712d5 Mon Sep 17 00:00:00 2001 From: Craig Anderson Date: Tue, 5 Apr 2022 09:55:41 -0400 Subject: [PATCH] Add tests --- tests/database/factories/PostFactory.php | 1 + .../migrations/create_posts_table.php | 1 + .../Admin/Fixtures/Resources/PostResource.php | 3 + .../Admin/Fixtures/Resources/UserResource.php | 64 +++++++++++++++++++ .../UserResource/Pages/CreateUser.php | 11 ++++ .../Resources/UserResource/Pages/EditUser.php | 11 ++++ .../UserResource/Pages/ListUsers.php | 11 ++++ .../Resources/UserResource/Pages/ViewUser.php | 11 ++++ .../Resources/Pages/CreateRecordTest.php | 2 + .../Admin/Resources/Pages/ListRecordsTest.php | 7 +- .../Resources/ResourcesServiceProvider.php | 2 + tests/src/Models/User.php | 6 ++ 12 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 tests/src/Admin/Fixtures/Resources/UserResource.php create mode 100644 tests/src/Admin/Fixtures/Resources/UserResource/Pages/CreateUser.php create mode 100644 tests/src/Admin/Fixtures/Resources/UserResource/Pages/EditUser.php create mode 100644 tests/src/Admin/Fixtures/Resources/UserResource/Pages/ListUsers.php create mode 100644 tests/src/Admin/Fixtures/Resources/UserResource/Pages/ViewUser.php diff --git a/tests/database/factories/PostFactory.php b/tests/database/factories/PostFactory.php index e1078111c5..d6e6888cba 100644 --- a/tests/database/factories/PostFactory.php +++ b/tests/database/factories/PostFactory.php @@ -17,6 +17,7 @@ class PostFactory extends Factory 'content' => $this->faker->paragraph(), 'tags' => $this->faker->words(), 'title' => $this->faker->sentence(), + 'rating' => $this->faker->numberBetween(1, 10), ]; } } diff --git a/tests/database/migrations/create_posts_table.php b/tests/database/migrations/create_posts_table.php index 5a4fa29b92..e0d839d258 100644 --- a/tests/database/migrations/create_posts_table.php +++ b/tests/database/migrations/create_posts_table.php @@ -13,6 +13,7 @@ return new class () extends Migration { $table->text('content')->nullable(); $table->json('tags')->nullable(); $table->string('title'); + $table->unsignedTinyInteger('rating')->default(0); $table->timestamps(); }); } diff --git a/tests/src/Admin/Fixtures/Resources/PostResource.php b/tests/src/Admin/Fixtures/Resources/PostResource.php index 8507480c13..87cbdc8406 100644 --- a/tests/src/Admin/Fixtures/Resources/PostResource.php +++ b/tests/src/Admin/Fixtures/Resources/PostResource.php @@ -26,6 +26,9 @@ class PostResource extends Resource ->relationship('author', 'name') ->required(), Forms\Components\TagsInput::make('tags'), + Forms\Components\TextInput::make('rating') + ->numeric() + ->required(), ]); } diff --git a/tests/src/Admin/Fixtures/Resources/UserResource.php b/tests/src/Admin/Fixtures/Resources/UserResource.php new file mode 100644 index 0000000000..c08056c343 --- /dev/null +++ b/tests/src/Admin/Fixtures/Resources/UserResource.php @@ -0,0 +1,64 @@ +schema([ + Forms\Components\TextInput::make('name')->required(), + Forms\Components\TextInput::make('email')->required(), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + Tables\Columns\TextColumn::make('name'), + Tables\Columns\TextColumn::make('email'), + Tables\Columns\TextColumn::make('posts_exists') + ->exists('posts') + ->label('Has Posts'), + Tables\Columns\TextColumn::make('posts_count') + ->counts('posts') + ->label('# Posts'), + Tables\Columns\TextColumn::make('posts_avg_rating') + ->avg('posts', 'rating') + ->label('Posts Avg. Rating'), + Tables\Columns\TextColumn::make('posts_max_rating') + ->max('posts', 'rating') + ->label('Posts Max. Rating'), + Tables\Columns\TextColumn::make('posts_min_rating') + ->min('posts', 'rating') + ->label('Posts Min. Rating'), + Tables\Columns\TextColumn::make('posts_sum_rating') + ->sum('posts', 'rating') + ->label('Posts Rating Sum'), + ]); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListUsers::route('/'), + 'create' => Pages\CreateUser::route('/create'), + 'view' => Pages\ViewUser::route('/{record}'), + 'edit' => Pages\EditUser::route('/{record}/edit'), + ]; + } +} diff --git a/tests/src/Admin/Fixtures/Resources/UserResource/Pages/CreateUser.php b/tests/src/Admin/Fixtures/Resources/UserResource/Pages/CreateUser.php new file mode 100644 index 0000000000..7ad3c45419 --- /dev/null +++ b/tests/src/Admin/Fixtures/Resources/UserResource/Pages/CreateUser.php @@ -0,0 +1,11 @@ +set('data.content', $newData->content) ->set('data.tags', $newData->tags) ->set('data.title', $newData->title) + ->set('data.rating', $newData->rating) ->call('create'); $this->assertDatabaseHas(Post::class, [ @@ -26,6 +27,7 @@ it('can create', function () { 'content' => $newData->content, 'tags' => json_encode($newData->tags), 'title' => $newData->title, + 'rating' => $newData->rating, ]); }); diff --git a/tests/src/Admin/Resources/Pages/ListRecordsTest.php b/tests/src/Admin/Resources/Pages/ListRecordsTest.php index dfcb4b102f..7d8646e807 100644 --- a/tests/src/Admin/Resources/Pages/ListRecordsTest.php +++ b/tests/src/Admin/Resources/Pages/ListRecordsTest.php @@ -1,10 +1,15 @@ get(PostResource::getUrl('index'))->assertSuccessful(); }); + +it('can render users page', function () { + $this->get(UserResource::getUrl('index'))->assertSuccessful(); +}); diff --git a/tests/src/Admin/Resources/ResourcesServiceProvider.php b/tests/src/Admin/Resources/ResourcesServiceProvider.php index 7c22246513..69171bbf21 100644 --- a/tests/src/Admin/Resources/ResourcesServiceProvider.php +++ b/tests/src/Admin/Resources/ResourcesServiceProvider.php @@ -4,6 +4,7 @@ namespace Filament\Tests\Admin\Resources; use Filament\PluginServiceProvider; use Filament\Tests\Admin\Fixtures\Resources\PostResource; +use Filament\Tests\Admin\Fixtures\Resources\UserResource; class ResourcesServiceProvider extends PluginServiceProvider { @@ -13,6 +14,7 @@ class ResourcesServiceProvider extends PluginServiceProvider { return [ PostResource::class, + UserResource::class, ]; } } diff --git a/tests/src/Models/User.php b/tests/src/Models/User.php index aa8e45349b..b92937219f 100644 --- a/tests/src/Models/User.php +++ b/tests/src/Models/User.php @@ -5,6 +5,7 @@ namespace Filament\Tests\Models; use Filament\Models\Contracts\FilamentUser; use Filament\Tests\Database\Factories\UserFactory; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable implements FilamentUser @@ -23,6 +24,11 @@ class User extends Authenticatable implements FilamentUser return true; } + public function posts(): HasMany + { + return $this->hasMany(Post::class, 'author_id'); + } + protected static function newFactory() { return UserFactory::new();