mirror of
https://github.com/filamentphp/filament.git
synced 2026-09-24 15:42:09 +08:00
Add tests
This commit is contained in:
@@ -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),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -26,6 +26,9 @@ class PostResource extends Resource
|
||||
->relationship('author', 'name')
|
||||
->required(),
|
||||
Forms\Components\TagsInput::make('tags'),
|
||||
Forms\Components\TextInput::make('rating')
|
||||
->numeric()
|
||||
->required(),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace Filament\Tests\Admin\Fixtures\Resources;
|
||||
|
||||
use Filament\Forms;
|
||||
use Filament\Resources\Form;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Resources\Table;
|
||||
use Filament\Tables;
|
||||
use Filament\Tests\Admin\Fixtures\Resources\UserResource\Pages;
|
||||
use Filament\Tests\Models\User;
|
||||
|
||||
class UserResource extends Resource
|
||||
{
|
||||
protected static ?string $model = User::class;
|
||||
|
||||
protected static ?string $recordTitleAttribute = 'name';
|
||||
|
||||
public static function form(Form $form): Form
|
||||
{
|
||||
return $form
|
||||
->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'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Filament\Tests\Admin\Fixtures\Resources\UserResource\Pages;
|
||||
|
||||
use Filament\Resources\Pages\CreateRecord;
|
||||
use Filament\Tests\Admin\Fixtures\Resources\UserResource;
|
||||
|
||||
class CreateUser extends CreateRecord
|
||||
{
|
||||
protected static string $resource = UserResource::class;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Filament\Tests\Admin\Fixtures\Resources\UserResource\Pages;
|
||||
|
||||
use Filament\Resources\Pages\EditRecord;
|
||||
use Filament\Tests\Admin\Fixtures\Resources\UserResource;
|
||||
|
||||
class EditUser extends EditRecord
|
||||
{
|
||||
protected static string $resource = UserResource::class;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Filament\Tests\Admin\Fixtures\Resources\UserResource\Pages;
|
||||
|
||||
use Filament\Resources\Pages\ListRecords;
|
||||
use Filament\Tests\Admin\Fixtures\Resources\UserResource;
|
||||
|
||||
class ListUsers extends ListRecords
|
||||
{
|
||||
protected static string $resource = UserResource::class;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Filament\Tests\Admin\Fixtures\Resources\UserResource\Pages;
|
||||
|
||||
use Filament\Resources\Pages\ViewRecord;
|
||||
use Filament\Tests\Admin\Fixtures\Resources\UserResource;
|
||||
|
||||
class ViewUser extends ViewRecord
|
||||
{
|
||||
protected static string $resource = UserResource::class;
|
||||
}
|
||||
@@ -19,6 +19,7 @@ it('can create', function () {
|
||||
->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,
|
||||
]);
|
||||
});
|
||||
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
<?php
|
||||
|
||||
use Filament\Tests\Admin\Fixtures\Resources\PostResource;
|
||||
use Filament\Tests\Admin\Fixtures\Resources\UserResource;
|
||||
use Filament\Tests\Admin\Resources\TestCase;
|
||||
|
||||
uses(TestCase::class);
|
||||
|
||||
it('can render page', function () {
|
||||
it('can render posts page', function () {
|
||||
$this->get(PostResource::getUrl('index'))->assertSuccessful();
|
||||
});
|
||||
|
||||
it('can render users page', function () {
|
||||
$this->get(UserResource::getUrl('index'))->assertSuccessful();
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user