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(); // This landing page must not include Livewire-driven panel widgets that // trigger background updates (lazy-loaded database notifications, progress poller). expect($html)->not->toContain('Filament\\Livewire\\DatabaseNotifications'); expect($html)->not->toContain('__lazyLoad'); expect($html)->not->toContain('opsUxProgressWidgetPoller'); // 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(); });