for($tenant)->create(); $exception = FindingException::query()->create([ 'tenant_id' => (int) $tenant->getKey(), 'finding_id' => (int) $finding->getKey(), 'requested_by_user_id' => (int) $user->getKey(), 'owner_user_id' => (int) $user->getKey(), 'status' => FindingException::STATUS_PENDING, 'current_validity_state' => FindingException::VALIDITY_MISSING_SUPPORT, 'request_reason' => 'Temporary exception request', 'requested_at' => now(), 'review_due_at' => now()->addWeek(), 'evidence_summary' => ['reference_count' => 1], ]); $reference = $exception->evidenceReferences()->create([ 'tenant_id' => (int) $tenant->getKey(), 'source_type' => 'evidence_snapshot', 'source_id' => 'snapshot-001', 'source_fingerprint' => 'fp-001', 'label' => 'Snapshot summary', 'summary_payload' => ['summary' => 'Intelligible even if the live evidence disappears'], 'measured_at' => now()->subHour(), ]); $freshReference = $reference->fresh(); expect($freshReference)->toBeInstanceOf(FindingExceptionEvidenceReference::class) ->and($freshReference?->summary_payload)->toBe(['summary' => 'Intelligible even if the live evidence disappears']) ->and($freshReference?->measured_at)->not->toBeNull() ->and($freshReference?->exception)->toBeInstanceOf(FindingException::class) ->and($freshReference?->tenant)->toBeInstanceOf(\App\Models\Tenant::class); });