create(['name' => 'Spec344 Operator Summary']); [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner', workspaceRole: 'manager'); $snapshot = seedEnvironmentReviewEvidence($environment, findingCount: 0, driftCount: 0); spec344CreatePublishedReview($environment, $user, $snapshot); $this->actingAs($user); setAdminPanelContext(); session()->put(WorkspaceContext::SESSION_KEY, (int) $environment->workspace_id); $component = Livewire::actingAs($user)->test(CustomerReviewWorkspace::class) ->assertSee(__('localization.review.review_acknowledgement')); $html = $component->html(); expect($html)->toContain('data-testid="customer-review-operator-summary"') ->and($html)->toContain('data-testid="customer-review-supporting-details"'); $operatorSummaryStart = strpos($html, 'data-testid="customer-review-operator-summary"'); $supportingDetailsStart = strpos($html, 'data-testid="customer-review-supporting-details"'); expect($operatorSummaryStart)->not->toBeFalse() ->and($supportingDetailsStart)->not->toBeFalse() ->and($operatorSummaryStart)->toBeLessThan($supportingDetailsStart); $operatorSummaryHtml = substr($html, $operatorSummaryStart, $supportingDetailsStart - $operatorSummaryStart); expect($operatorSummaryHtml)->toContain('data-testid="customer-review-decision-card"') ->and($operatorSummaryHtml)->toContain('data-testid="customer-review-acknowledgement-card"') ->and($operatorSummaryHtml)->toContain('data-testid="customer-review-findings-summary"'); $acknowledgementCardPosition = strpos($html, 'data-testid="customer-review-acknowledgement-card"'); $readinessFlowPosition = strpos($html, 'data-testid="customer-review-readiness-flow"'); expect($acknowledgementCardPosition)->not->toBeFalse() ->and($readinessFlowPosition)->not->toBeFalse() ->and($acknowledgementCardPosition)->toBeLessThan($readinessFlowPosition); expect($html)->toContain('data-testid="customer-review-diagnostics"') ->and($html)->not->toContain('data-testid="customer-review-diagnostics" open'); }); it('shows the environment filter chip when environment_id is present', function (): void { $environment = ManagedEnvironment::factory()->create(['name' => 'Spec344 Environment Filter']); [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner', workspaceRole: 'manager'); $snapshot = seedEnvironmentReviewEvidence($environment, findingCount: 0, driftCount: 0); spec344CreatePublishedReview($environment, $user, $snapshot); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $environment->workspace_id]) ->get(CustomerReviewWorkspace::environmentFilterUrl($environment)) ->assertOk() ->assertSee('Environment filter:') ->assertSee('Spec344 Environment Filter') ->assertDontSee('/admin/t', false) ->assertDontSee('tenant_id=', false); }); it('disables the acknowledgement action when the actor lacks acknowledge permissions', function (): void { $environment = ManagedEnvironment::factory()->create(['name' => 'Spec344 Ack Disabled']); [$publisher, $environment] = createUserWithTenant(tenant: $environment, role: 'owner', workspaceRole: 'manager'); [$actor] = createUserWithTenant(tenant: $environment, role: 'readonly'); $snapshot = seedEnvironmentReviewEvidence($environment, findingCount: 0, driftCount: 0); spec344CreatePublishedReview($environment, $publisher, $snapshot); $this->actingAs($actor); setAdminPanelContext(); session()->put(WorkspaceContext::SESSION_KEY, (int) $environment->workspace_id); $component = Livewire::actingAs($actor)->test(CustomerReviewWorkspace::class); $payload = $component->instance()->latestReviewConsumptionPayload(); expect(data_get($payload, 'acknowledgement.action_name'))->toBe('acknowledgeReview') ->and(data_get($payload, 'acknowledgement.action_disabled'))->toBeTrue(); }); function spec344CreatePublishedReview(ManagedEnvironment $environment, User $user, EvidenceSnapshot $snapshot): EnvironmentReview { $review = composeEnvironmentReviewForTest($environment, $user, $snapshot); $review->forceFill([ 'status' => EnvironmentReviewStatus::Published->value, 'generated_at' => now(), 'published_at' => now(), 'published_by_user_id' => (int) $user->getKey(), ])->save(); return $review->refresh(); }