fix(filament): reduce number of gate checks for base actions (#906)

This commit is contained in:
Kyrch
2025-07-31 19:50:04 -03:00
committed by GitHub
parent 6ae0cf12b1
commit 7c146e465f
31 changed files with 361 additions and 114 deletions
+33 -9
View File
@@ -7,28 +7,52 @@ namespace App\Filament\Actions\Base;
use App\Actions\Http\Api\List\Playlist\Track\DestroyTrackAction;
use App\Models\Admin\ActionLog;
use App\Models\List\Playlist\PlaylistTrack;
use Filament\Actions\DeleteAction as BaseDeleteAction;
use Filament\Actions\Action;
use Filament\Support\Icons\Heroicon;
use Illuminate\Database\Eloquent\Model;
class DeleteAction extends BaseDeleteAction
class DeleteAction extends Action
{
/**
* Initial setup for the action.
*/
public static function getDefaultName(): ?string
{
return 'delete';
}
protected function setUp(): void
{
parent::setUp();
$this->label(__('filament.actions.base.delete'));
$this->action(function (Model $record) {
if ($record instanceof PlaylistTrack) {
new DestroyTrackAction()->destroy($record->playlist, $record);
$this->modalHeading(fn (): string => __('filament-actions::delete.single.modal.heading', ['label' => $this->getRecordTitle()]));
$this->modalSubmitActionLabel(__('filament-actions::delete.single.modal.actions.delete.label'));
$this->successNotificationTitle(__('filament-actions::delete.single.notifications.deleted.title'));
$this->defaultColor('danger');
$this->tableIcon(Heroicon::Trash);
$this->groupedIcon(Heroicon::Trash);
$this->requiresConfirmation();
$this->modalIcon(Heroicon::OutlinedTrash);
$this->keyBindings(['mod+d']);
$this->action(function (Model $record): void {
$result = $record instanceof PlaylistTrack
? new DestroyTrackAction()->destroy($record->playlist, $record)
: $record->delete();
if (! $result) {
$this->failure();
return;
}
$record->delete();
$this->success();
});
$this->after(fn (Model $record) => ActionLog::modelDeleted($record));
+99 -5
View File
@@ -11,20 +11,32 @@ use App\Filament\Resources\Base\BaseListResources;
use App\Filament\Resources\Base\BaseManageResources;
use App\Filament\Resources\Base\BaseViewResource;
use App\Models\Admin\ActionLog;
use Filament\Actions\EditAction as BaseEditAction;
use Closure;
use Filament\Actions\Action;
use Filament\Actions\Concerns\CanCustomizeProcess;
use Filament\Actions\Contracts\HasActions;
use Filament\Schemas\Contracts\HasSchemas;
use Filament\Schemas\Schema;
use Filament\Support\Enums\IconSize;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Support\Arr;
class EditAction extends BaseEditAction
class EditAction extends Action
{
use CanCustomizeProcess;
use HasActionLogs;
use HasPivotActionLogs;
/**
* Initial setup for the action.
*/
protected ?Closure $mutateRecordDataUsing = null;
public static function getDefaultName(): ?string
{
return 'edit';
}
protected function setUp(): void
{
parent::setUp();
@@ -37,6 +49,12 @@ class EditAction extends BaseEditAction
return '';
});
$this->modalHeading(fn (): string => __('filament-actions::edit.single.modal.heading', ['label' => $this->getRecordTitle()]));
$this->modalSubmitActionLabel(__('filament-actions::edit.single.modal.actions.save.label'));
$this->successNotificationTitle(__('filament-actions::edit.single.notifications.saved.title'));
$this->tableIcon(Heroicon::PencilSquare);
$this->groupedIcon(Heroicon::PencilSquare);
$this->iconSize(IconSize::Medium);
$this->schema(fn (Schema $schema, BaseListResources|BaseViewResource|BaseManageResources|BaseRelationManager $livewire) => [
@@ -55,5 +73,81 @@ class EditAction extends BaseEditAction
}
}
});
$this->fillForm(function (HasActions&HasSchemas $livewire, Model $record, ?Table $table): array {
$translatableContentDriver = $livewire->makeFilamentTranslatableContentDriver();
if ($translatableContentDriver) {
$data = $translatableContentDriver->getRecordAttributesToArray($record);
} else {
$data = $record->attributesToArray();
}
$relationship = $table?->getRelationship();
if ($relationship instanceof BelongsToMany) {
$pivot = $record->getRelationValue($relationship->getPivotAccessor());
$pivotColumns = $relationship->getPivotColumns();
if ($translatableContentDriver) {
$data = [
...$data,
...Arr::only($translatableContentDriver->getRecordAttributesToArray($pivot), $pivotColumns),
];
} else {
$data = [
...$data,
...Arr::only($pivot->attributesToArray(), $pivotColumns),
];
}
}
if ($this->mutateRecordDataUsing) {
$data = $this->evaluate($this->mutateRecordDataUsing, ['data' => $data]);
}
return $data;
});
$this->action(function (): void {
$this->process(function (array $data, HasActions&HasSchemas $livewire, Model $record, ?Table $table): void {
$relationship = $table?->getRelationship();
$translatableContentDriver = $livewire->makeFilamentTranslatableContentDriver();
if ($relationship instanceof BelongsToMany) {
$pivot = $record->getRelationValue($relationship->getPivotAccessor());
$pivotColumns = $relationship->getPivotColumns();
$pivotData = Arr::only($data, $pivotColumns);
if (count($pivotColumns)) {
if ($translatableContentDriver) {
$translatableContentDriver->updateRecord($pivot, $pivotData);
} else {
$pivot->update($pivotData);
}
}
$data = Arr::except($data, $pivotColumns);
}
if ($translatableContentDriver) {
$translatableContentDriver->updateRecord($record, $data);
} else {
$record->update($data);
}
});
$this->success();
});
}
public function mutateRecordDataUsing(?Closure $callback): static
{
$this->mutateRecordDataUsing = $callback;
return $this;
}
}
@@ -5,18 +5,47 @@ declare(strict_types=1);
namespace App\Filament\Actions\Base;
use App\Contracts\Models\SoftDeletable;
use Filament\Actions\ForceDeleteAction as BaseForceDeleteAction;
use Filament\Actions\Action;
use Filament\Actions\Concerns\CanCustomizeProcess;
use Filament\Support\Icons\Heroicon;
use Illuminate\Database\Eloquent\Model;
class ForceDeleteAction extends BaseForceDeleteAction
class ForceDeleteAction extends Action
{
/**
* Initial setup for the action.
*/
use CanCustomizeProcess;
public static function getDefaultName(): ?string
{
return 'forceDelete';
}
protected function setUp(): void
{
parent::setUp();
$this->label(__('filament.actions.base.forcedelete'));
$this->modalHeading(fn (): string => __('filament-actions::force-delete.single.modal.heading', ['label' => $this->getRecordTitle()]));
$this->modalSubmitActionLabel(__('filament-actions::force-delete.single.modal.actions.delete.label'));
$this->defaultColor('danger');
$this->tableIcon(Heroicon::Trash);
$this->groupedIcon(Heroicon::Trash);
$this->modalIcon(Heroicon::OutlinedTrash);
$this->requiresConfirmation();
$this->action(function (): void {
$result = $this->process(static fn (Model $record): ?bool => $record->forceDelete());
if (! $result) {
$this->failure();
return;
}
$this->success();
});
$this->visible(fn (string $model) => in_array(SoftDeletable::class, class_implements($model)));
}
@@ -12,7 +12,6 @@ use Filament\Actions\ReplicateAction as BaseReplicateAction;
use Filament\Facades\Filament;
use Filament\Schemas\Schema;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Gate;
class ReplicateAction extends BaseReplicateAction
{
@@ -23,8 +22,6 @@ class ReplicateAction extends BaseReplicateAction
{
parent::setUp();
$this->visible(fn (string $model) => Gate::allows('create', $model));
$this->schema(fn (Schema $schema, BaseListResources|BaseManageResources|BaseRelationManager $livewire) => $livewire->form($schema)->getComponents());
$this->successRedirectUrl(fn (Model $replica) => Filament::getModelResource($replica)::getUrl('view', ['record' => $replica]));
+49 -5
View File
@@ -5,19 +5,63 @@ declare(strict_types=1);
namespace App\Filament\Actions\Base;
use App\Models\Admin\ActionLog;
use Filament\Actions\RestoreAction as BaseRestoreAction;
use Filament\Actions\Action;
use Filament\Actions\Concerns\CanCustomizeProcess;
use Filament\Support\Icons\Heroicon;
use Illuminate\Database\Eloquent\Model;
class RestoreAction extends BaseRestoreAction
class RestoreAction extends Action
{
/**
* Initial setup for the action.
*/
use CanCustomizeProcess;
public static function getDefaultName(): ?string
{
return 'restore';
}
protected function setUp(): void
{
parent::setUp();
$this->label(__('filament.actions.base.restore'));
$this->modalHeading(fn (): string => __('filament-actions::restore.single.modal.heading', ['label' => $this->getRecordTitle()]));
$this->modalSubmitActionLabel(__('filament-actions::restore.single.modal.actions.restore.label'));
$this->successNotificationTitle(__('filament-actions::restore.single.notifications.restored.title'));
$this->defaultColor('gray');
$this->tableIcon(Heroicon::ArrowUturnLeft);
$this->groupedIcon(Heroicon::ArrowUturnLeft);
$this->modalIcon(Heroicon::OutlinedArrowUturnLeft);
$this->requiresConfirmation();
$this->action(function (Model $record): void {
if (! method_exists($record, 'restore')) {
$this->failure();
return;
}
$result = $this->process(static fn (): ?bool => $record->restore());
if (! $result) {
$this->failure();
return;
}
$this->success();
});
$this->visible(static function (Model $record): bool {
if (! method_exists($record, 'trashed')) {
return false;
}
return $record->trashed();
});
$this->after(fn (Model $record) => ActionLog::modelRestored($record));
}
+48 -5
View File
@@ -8,20 +8,63 @@ use App\Filament\RelationManagers\BaseRelationManager;
use App\Filament\Resources\Base\BaseListResources;
use App\Filament\Resources\Base\BaseManageResources;
use App\Filament\Resources\Base\BaseViewResource;
use Filament\Actions\ViewAction as BaseViewAction;
use Closure;
use Filament\Actions\Action;
use Filament\Actions\Contracts\HasActions;
use Filament\Schemas\Contracts\HasSchemas;
use Filament\Support\Enums\IconSize;
use Filament\Support\Icons\Heroicon;
use Illuminate\Database\Eloquent\Model;
class ViewAction extends BaseViewAction
class ViewAction extends Action
{
/**
* Initial setup for the action.
*/
protected ?Closure $mutateRecordDataUsing = null;
public static function getDefaultName(): ?string
{
return 'view';
}
protected function setUp(): void
{
parent::setUp();
$this->label('');
$this->modalHeading(fn (): string => __('filament-actions::view.single.modal.heading', ['label' => $this->getRecordTitle()]));
$this->modalSubmitAction(false);
$this->modalCancelAction(fn (Action $action) => $action->label(__('filament-actions::view.single.modal.actions.close.label')));
$this->defaultColor('gray');
$this->tableIcon(Heroicon::Eye);
$this->groupedIcon(Heroicon::Eye);
$this->iconSize(IconSize::Medium);
$this->disabledSchema();
$this->fillForm(function (HasActions&HasSchemas $livewire, Model $record): array {
if ($translatableContentDriver = $livewire->makeFilamentTranslatableContentDriver()) {
$data = $translatableContentDriver->getRecordAttributesToArray($record);
} else {
$data = $record->attributesToArray();
}
if ($this->mutateRecordDataUsing) {
$data = $this->evaluate($this->mutateRecordDataUsing, ['data' => $data]);
}
return $data;
});
$this->hidden(fn (BaseManageResources|BaseListResources|BaseViewResource|BaseRelationManager $livewire) => $livewire instanceof BaseViewResource);
}
public function mutateRecordDataUsing(?Closure $callback): static
{
$this->mutateRecordDataUsing = $callback;
return $this;
}
}
@@ -142,8 +142,10 @@ abstract class BaseRelationManager extends RelationManager
*/
public static function getBulkActions(?array $actionsIncludedInGroup = []): array
{
$relatedResource = static::$relatedResource;
return [
...(static::$relatedResource ? static::$relatedResource::getBulkActions() : []),
...($relatedResource ? $relatedResource::getBulkActions() : []),
DetachBulkAction::make(),
];
@@ -158,12 +160,14 @@ abstract class BaseRelationManager extends RelationManager
*/
public static function getHeaderActions(): array
{
$relatedResource = static::$relatedResource;
return [
CreateAction::make(),
AttachAction::make(),
...(static::$relatedResource ? static::$relatedResource::getTableActions() : []),
...($relatedResource ? $relatedResource::getTableActions() : []),
];
}
+7 -6
View File
@@ -30,6 +30,7 @@ use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Illuminate\Support\Facades\Gate;
abstract class BaseResource extends Resource
{
@@ -120,20 +121,20 @@ abstract class BaseResource extends Resource
public static function getActions(): array
{
return [
ViewAction::make(),
...(Gate::allows('viewAny', static::$model) ? [ViewAction::make()] : []),
EditAction::make(),
...(Gate::allows('updateAny', static::$model) ? [EditAction::make()] : []),
ActionGroup::make([
DetachAction::make(),
DeleteAction::make(),
...(Gate::allows('deleteAny', static::$model) ? [DeleteAction::make()] : []),
ForceDeleteAction::make(),
...(Gate::allows('forceDeleteAny', static::$model) ? [ForceDeleteAction::make()] : []),
RestoreAction::make(),
...(Gate::allows('restoreAny', static::$model) ? [RestoreAction::make()] : []),
ReplicateAction::make(),
...(Gate::allows('create', static::$model) ? [ReplicateAction::make()] : []),
ActionGroup::make(static::getRecordActions())->dropdown(false),
]),
+8
View File
@@ -92,6 +92,14 @@ abstract class BasePolicy
return ! $trashed && $user->can(CrudPermission::UPDATE->format(static::getModel()));
}
/**
* Determine whether the user can update any model.
*/
public function updateAny(User $user): bool
{
return $user->can(CrudPermission::UPDATE->format(static::getModel()));
}
/**
* Determine whether the user can delete the model.
*/
+3
View File
@@ -52,3 +52,6 @@ parameters:
-
message: '#Call to method assertActionHidden\(\) on an unknown class static.#'
path: tests/Unit/Filament/*
-
message: '#Call to method assertActionDoesNotExist\(\) on an unknown class static.#'
path: tests/Unit/Filament/*
@@ -44,12 +44,12 @@ test('user cannot edit record', function () {
$record = AnnouncementModel::factory()->createOne();
Livewire::test(getIndexPage(Announcement::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = AnnouncementModel::factory()->createOne();
Livewire::test(getIndexPage(Announcement::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
@@ -38,12 +38,12 @@ test('user cannot edit record', function () {
$record = DumpModel::factory()->createOne();
Livewire::test(getIndexPage(Dump::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = DumpModel::factory()->createOne();
Livewire::test(getIndexPage(Dump::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
@@ -38,12 +38,12 @@ test('user cannot edit record', function () {
$record = FeatureModel::factory()->createOne();
Livewire::test(getIndexPage(Feature::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = FeatureModel::factory()->createOne();
Livewire::test(getIndexPage(Feature::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
@@ -98,12 +98,12 @@ test('user cannot edit record', function () {
$record = FeaturedThemeModel::factory()->createOne();
Livewire::test(getIndexPage(FeaturedTheme::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = FeaturedThemeModel::factory()->createOne();
Livewire::test(getIndexPage(FeaturedTheme::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
@@ -103,7 +103,7 @@ test('user cannot edit record', function () {
->createOne();
Livewire::test(getIndexPage(DiscordThread::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
@@ -112,5 +112,5 @@ test('user cannot delete record', function () {
->createOne();
Livewire::test(getIndexPage(DiscordThread::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
@@ -95,14 +95,14 @@ test('user cannot edit record', function () {
$record = PageModel::factory()->createOne();
Livewire::test(getIndexPage(Page::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = PageModel::factory()->createOne();
Livewire::test(getIndexPage(Page::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -112,12 +112,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Page::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = PageModel::factory()->createOne();
Livewire::test(getIndexPage(Page::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -103,7 +103,7 @@ test('user cannot edit record', function () {
->createOne();
Livewire::test(getIndexPage(Entry::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
@@ -112,7 +112,7 @@ test('user cannot delete record', function () {
->createOne();
Livewire::test(getIndexPage(Entry::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -124,7 +124,7 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Entry::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
@@ -133,5 +133,5 @@ test('user cannot force delete record', function () {
->createOne();
Livewire::test(getIndexPage(Entry::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -104,7 +104,7 @@ test('user cannot edit record', function () {
->createOne();
Livewire::test(getIndexPage(Theme::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
@@ -113,7 +113,7 @@ test('user cannot delete record', function () {
->createOne();
Livewire::test(getIndexPage(Theme::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -125,7 +125,7 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Theme::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
@@ -134,5 +134,5 @@ test('user cannot force delete record', function () {
->createOne();
Livewire::test(getIndexPage(Theme::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -95,14 +95,14 @@ test('user cannot edit record', function () {
$record = AnimeModel::factory()->createOne();
Livewire::test(getIndexPage(Anime::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = AnimeModel::factory()->createOne();
Livewire::test(getIndexPage(Anime::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -112,12 +112,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Anime::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = AnimeModel::factory()->createOne();
Livewire::test(getIndexPage(Anime::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -95,14 +95,14 @@ test('user cannot edit record', function () {
$record = ArtistModel::factory()->createOne();
Livewire::test(getIndexPage(Artist::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = ArtistModel::factory()->createOne();
Livewire::test(getIndexPage(Artist::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -112,12 +112,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Artist::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = ArtistModel::factory()->createOne();
Livewire::test(getIndexPage(Artist::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -74,14 +74,14 @@ test('user cannot edit record', function () {
$record = AudioModel::factory()->createOne();
Livewire::test(getIndexPage(Audio::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = AudioModel::factory()->createOne();
Livewire::test(getIndexPage(Audio::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -91,12 +91,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Audio::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = AudioModel::factory()->createOne();
Livewire::test(getIndexPage(Audio::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -74,14 +74,14 @@ test('user cannot edit record', function () {
$record = ExternalResourceModel::factory()->createOne();
Livewire::test(getIndexPage(ExternalResource::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = ExternalResourceModel::factory()->createOne();
Livewire::test(getIndexPage(ExternalResource::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -91,12 +91,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(ExternalResource::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = ExternalResourceModel::factory()->createOne();
Livewire::test(getIndexPage(ExternalResource::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -95,14 +95,14 @@ test('user cannot edit record', function () {
$record = GroupModel::factory()->createOne();
Livewire::test(getIndexPage(Group::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = GroupModel::factory()->createOne();
Livewire::test(getIndexPage(Group::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -112,12 +112,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Group::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = GroupModel::factory()->createOne();
Livewire::test(getIndexPage(Group::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -74,14 +74,14 @@ test('user cannot edit record', function () {
$record = ImageModel::factory()->createOne();
Livewire::test(getIndexPage(Image::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = ImageModel::factory()->createOne();
Livewire::test(getIndexPage(Image::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -91,12 +91,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Image::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = ImageModel::factory()->createOne();
Livewire::test(getIndexPage(Image::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -95,14 +95,14 @@ test('user cannot edit record', function () {
$record = SeriesModel::factory()->createOne();
Livewire::test(getIndexPage(Series::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = SeriesModel::factory()->createOne();
Livewire::test(getIndexPage(Series::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -112,12 +112,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Series::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = SeriesModel::factory()->createOne();
Livewire::test(getIndexPage(Series::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -109,7 +109,7 @@ test('user cannot edit record', function () {
->createOne();
Livewire::test(getIndexPage(Membership::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
@@ -119,7 +119,7 @@ test('user cannot delete record', function () {
->createOne();
Livewire::test(getIndexPage(Membership::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -132,7 +132,7 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Membership::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
@@ -142,5 +142,5 @@ test('user cannot force delete record', function () {
->createOne();
Livewire::test(getIndexPage(Membership::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -109,7 +109,7 @@ test('user cannot edit record', function () {
->createOne();
Livewire::test(getIndexPage(Performance::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
@@ -119,7 +119,7 @@ test('user cannot delete record', function () {
->createOne();
Livewire::test(getIndexPage(Performance::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -132,7 +132,7 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Performance::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
@@ -142,5 +142,5 @@ test('user cannot force delete record', function () {
->createOne();
Livewire::test(getIndexPage(Performance::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -95,14 +95,14 @@ test('user cannot edit record', function () {
$record = SongModel::factory()->createOne();
Livewire::test(getIndexPage(Song::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = SongModel::factory()->createOne();
Livewire::test(getIndexPage(Song::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -112,12 +112,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Song::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = SongModel::factory()->createOne();
Livewire::test(getIndexPage(Song::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -95,14 +95,14 @@ test('user cannot edit record', function () {
$record = StudioModel::factory()->createOne();
Livewire::test(getIndexPage(Studio::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = StudioModel::factory()->createOne();
Livewire::test(getIndexPage(Studio::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -112,12 +112,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Studio::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = StudioModel::factory()->createOne();
Livewire::test(getIndexPage(Studio::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -74,14 +74,14 @@ test('user cannot edit record', function () {
$record = VideoScriptModel::factory()->createOne();
Livewire::test(getIndexPage(Script::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = VideoScriptModel::factory()->createOne();
Livewire::test(getIndexPage(Script::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -91,12 +91,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Script::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = VideoScriptModel::factory()->createOne();
Livewire::test(getIndexPage(Script::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});
@@ -74,14 +74,14 @@ test('user cannot edit record', function () {
$record = VideoModel::factory()->createOne();
Livewire::test(getIndexPage(Video::class))
->assertActionHidden(TestAction::make(EditAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(EditAction::getDefaultName())->table($record));
});
test('user cannot delete record', function () {
$record = VideoModel::factory()->createOne();
Livewire::test(getIndexPage(Video::class))
->assertActionHidden(TestAction::make(DeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(DeleteAction::getDefaultName())->table($record));
});
test('user cannot restore record', function () {
@@ -91,12 +91,12 @@ test('user cannot restore record', function () {
Livewire::test(getIndexPage(Video::class))
->filterTable('trashed', 0)
->assertActionHidden(TestAction::make(RestoreAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(RestoreAction::getDefaultName())->table($record));
});
test('user cannot force delete record', function () {
$record = VideoModel::factory()->createOne();
Livewire::test(getIndexPage(Video::class))
->assertActionHidden(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
->assertActionDoesNotExist(TestAction::make(ForceDeleteAction::getDefaultName())->table($record));
});