browser()->timeout(20_000); beforeEach(function (): void { Storage::fake('exports'); }); it('smokes the customer review workspace handoff from tenant review detail', function (): void { $tenantPublished = Tenant::factory()->create(['name' => 'Published Tenant']); [$user, $tenantPublished] = createUserWithTenant( tenant: $tenantPublished, role: 'owner', workspaceRole: 'manager', ); $user->forceFill(['preferred_locale' => 'de'])->save(); $tenantWithoutPublished = Tenant::factory()->create([ 'workspace_id' => (int) $tenantPublished->workspace_id, 'name' => 'No Published Tenant', ]); createUserWithTenant( tenant: $tenantWithoutPublished, user: $user, role: 'owner', workspaceRole: 'manager', ); $publishedSnapshot = seedTenantReviewEvidence($tenantPublished); $noPublishedSnapshot = seedTenantReviewEvidence($tenantWithoutPublished); $publishedReview = composeTenantReviewForTest($tenantPublished, $user, $publishedSnapshot); $publishedReview->forceFill([ 'status' => TenantReviewStatus::Published->value, 'published_at' => now(), 'published_by_user_id' => (int) $user->getKey(), ])->save(); $internalOnlyReview = composeTenantReviewForTest($tenantWithoutPublished, $user, $noPublishedSnapshot); $internalOnlyReview->forceFill([ 'status' => TenantReviewStatus::Ready->value, 'published_at' => null, 'published_by_user_id' => null, ])->save(); Storage::disk('exports')->put('review-packs/customer-review-workspace-smoke.zip', 'PK-test'); $pack = ReviewPack::factory()->ready()->create([ 'tenant_id' => (int) $tenantPublished->getKey(), 'workspace_id' => (int) $tenantPublished->workspace_id, 'tenant_review_id' => (int) $publishedReview->getKey(), 'evidence_snapshot_id' => (int) $publishedSnapshot->getKey(), 'initiated_by_user_id' => (int) $user->getKey(), 'file_path' => 'review-packs/customer-review-workspace-smoke.zip', 'file_disk' => 'exports', ]); $publishedReview->forceFill(['current_export_review_pack_id' => (int) $pack->getKey()])->save(); $this->actingAs($user)->withSession([ WorkspaceContext::SESSION_KEY => (int) $tenantPublished->workspace_id, WorkspaceContext::LAST_TENANT_IDS_SESSION_KEY => [ (string) $tenantPublished->workspace_id => (int) $tenantPublished->getKey(), ], ]); visit(TenantReviewResource::tenantScopedUrl('view', ['record' => $publishedReview], $tenantPublished)) ->waitForText('Verwandter Kontext') ->assertSee('Kunden-Workspace öffnen') ->assertNoJavaScriptErrors() ->assertNoConsoleLogs() ->click('Kunden-Workspace öffnen') ->waitForText('Kundensicherer Governance-Paket-Index') ->assertSee('Filter löschen') ->assertSee('Review öffnen') ->assertSee('Governance-Paket') ->assertSee('Status') ->assertSee('Nachweise') ->assertSee('Prüfen Sie für jeden berechtigten Tenant den executive-fähigen Status des Governance-Pakets') ->assertSee('Dieser Workspace fasst die aktuelle Review- und Nachweislage für die Service-Auslieferung zusammen. Er ersetzt weder ein formales Auditurteil noch eine Zertifizierung oder rechtliche Attestierung.') ->assertSee('Teilweise') ->assertSee('Prüfung erforderlich') ->assertSee('Verfügbar') ->assertSee('Paket prüfen') ->assertDontSee('Customer-safe governance package index') ->assertDontSee('localization.review.customer_safe_review_workspace') ->assertDontSee('Publishable') ->assertDontSee('No mapped controls') ->assertDontSee('Compliance evidence mapping v1') ->assertDontSee('Publish review') ->assertDontSee('Refresh review') ->click('Filter löschen') ->waitForText('Published Tenant') ->assertDontSee('No Published Tenant') ->assertDontSee('No published review available yet') ->click('Review öffnen') ->waitForText('Ergebniszusammenfassung') ->assertSee('Governance-Paket herunterladen') ->assertSee('Governance-Paket') ->assertSee('Veröffentlichter Governance-Nachweis') ->assertSee('Review-Status') ->assertSee('Primäre Aktion') ->assertSee('Executive-Einstieg') ->assertSee('Strukturierter Auditor-Anhang') ->assertSee('Prüfgrundlage') ->assertDontSee('Released governance record') ->assertDontSee('Control readiness interpretation') ->assertDontSee('Compliance evidence mapping v1') ->assertDontSee('Publish review') ->assertDontSee('Refresh review') ->assertDontSee('Create next review') ->assertDontSee('Export executive pack') ->assertDontSee('Archive review') ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); });