publish( composeTenantReviewForTest($tenant, $user), $user, ); EvidenceSnapshot::query() ->where('tenant_id', (int) $tenant->getKey()) ->where('status', 'active') ->update([ 'status' => 'expired', 'expires_at' => now(), ]); $nextSnapshot = seedTenantReviewEvidence( tenant: $tenant, findingCount: 5, driftCount: 2, operationRunCount: 2, ); $nextReview = app(TenantReviewLifecycleService::class)->createNextReview($publishedReview, $user, $nextSnapshot); $publishedReview->refresh(); expect((int) $nextReview->getKey())->not->toBe((int) $publishedReview->getKey()) ->and($nextReview->isMutable())->toBeTrue() ->and($nextReview->evidence_snapshot_id)->toBe((int) $nextSnapshot->getKey()); expect($publishedReview->status)->toBe(TenantReviewStatus::Superseded->value) ->and($publishedReview->superseded_by_review_id)->toBe((int) $nextReview->getKey()) ->and($publishedReview->published_at)->not->toBeNull(); });