TenantAtlas/tests/Feature/090/ActionSurfaceSmokeTest.php
ahmido 90bfe1516e feat(spec-090): action surface contract compliance (#108)
Implements Spec 090 (Action Surface Contract Compliance & RBAC Hardening).

Highlights:
- Adds/updates action surface declarations and shrinks baseline exemptions.
- Standardizes Filament action grouping/order and empty-state CTAs.
- Enforces RBAC UX semantics (non-member -> 404, member w/o capability -> disabled + tooltip, server-side 403).
- Adds audit logging for successful side-effect actions.
- Fixes Provider Connections list context so header create + row actions resolve tenant correctly.

Tests (focused):
- vendor/bin/sail artisan test --compact tests/Feature/090/
- vendor/bin/sail artisan test --compact tests/Feature/Guards/ActionSurfaceContractTest.php
- vendor/bin/sail bin pint --dirty

Livewire/Filament:
- Filament v5 + Livewire v4 compliant.
- No panel provider registration changes (Laravel 11+ registration remains in bootstrap/providers.php).

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #108
2026-02-13 01:30:22 +00:00

29 lines
1.0 KiB
PHP

<?php
declare(strict_types=1);
use App\Filament\Resources\BackupScheduleResource;
use App\Filament\Resources\FindingResource;
use App\Filament\Resources\ProviderConnectionResource;
use App\Filament\Resources\TenantResource;
use App\Filament\Resources\Workspaces\WorkspaceResource;
use App\Support\Ui\ActionSurface\ActionSurfaceExemptions;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
final class ActionSurfaceSmokeTest extends TestCase
{
use RefreshDatabase;
public function test_spec090_removes_in_scope_resources_from_baseline_action_surface_exemptions(): void
{
$exemptions = ActionSurfaceExemptions::baseline();
$this->assertFalse($exemptions->hasClass(ProviderConnectionResource::class));
$this->assertFalse($exemptions->hasClass(BackupScheduleResource::class));
$this->assertFalse($exemptions->hasClass(FindingResource::class));
$this->assertFalse($exemptions->hasClass(TenantResource::class));
$this->assertFalse($exemptions->hasClass(WorkspaceResource::class));
}
}