diff --git a/app/Filament/Pages/Workspaces/ManagedTenantsLanding.php b/app/Filament/Pages/Workspaces/ManagedTenantsLanding.php index 85a5b1c..f7b9550 100644 --- a/app/Filament/Pages/Workspaces/ManagedTenantsLanding.php +++ b/app/Filament/Pages/Workspaces/ManagedTenantsLanding.php @@ -18,6 +18,8 @@ class ManagedTenantsLanding extends Page protected static bool $isDiscovered = false; + protected static string $layout = 'filament-panels::components.layout.simple'; + protected static ?string $title = 'Managed tenants'; protected string $view = 'filament.pages.workspaces.managed-tenants-landing'; diff --git a/tests/Feature/Workspaces/ManagedTenantsLivewireUpdateTest.php b/tests/Feature/Workspaces/ManagedTenantsLivewireUpdateTest.php new file mode 100644 index 0000000..65c2b4f --- /dev/null +++ b/tests/Feature/Workspaces/ManagedTenantsLivewireUpdateTest.php @@ -0,0 +1,75 @@ +create(); + + $workspace = Workspace::factory()->create(['slug' => 'test-ws']); + WorkspaceMembership::factory()->create([ + 'workspace_id' => $workspace->getKey(), + 'user_id' => $user->getKey(), + 'role' => 'owner', + ]); + + // 1. Load the page + $response = $this->actingAs($user) + ->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]) + ->get('/admin/w/'.$workspace->slug.'/managed-tenants'); + + $response->assertSuccessful(); + + $html = $response->getContent(); + + // 2. Extract the first Livewire component snapshot + preg_match('/wire:snapshot="([^"]+)"/', $html, $snapshotMatch); + expect($snapshotMatch)->not->toBeEmpty('No Livewire snapshot found in page HTML'); + + $snapshotJson = htmlspecialchars_decode($snapshotMatch[1]); + $snapshot = json_decode($snapshotJson, true); + + expect($snapshot)->toBeArray(); + expect($snapshot['memo']['path'] ?? null)->toBe('admin/w/test-ws/managed-tenants'); + + // 3. POST a Livewire update request + $updatePayload = [ + 'components' => [[ + 'snapshot' => $snapshotJson, + 'updates' => new \stdClass, + 'calls' => [], + ]], + ]; + + // Get the Livewire update URI path (includes hash prefix) + $routes = app('router')->getRoutes(); + $updateRoute = null; + foreach ($routes as $route) { + if (str_contains($route->getName() ?? '', 'livewire.update')) { + $updateRoute = $route; + break; + } + } + expect($updateRoute)->not->toBeNull('Livewire update route must exist'); + + $updateResponse = $this->actingAs($user) + ->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]) + ->withHeaders([ + 'X-Livewire' => 'true', + ]) + ->postJson('/'.$updateRoute->uri(), $updatePayload); + + $updateResponse->assertSuccessful(); +});