create($tenant, $initialSnapshot, $user); $review = $reviewService->compose($review); EvidenceSnapshot::query() ->where('tenant_id', (int) $tenant->getKey()) ->where('status', 'active') ->update([ 'status' => 'expired', 'expires_at' => now(), ]); $refreshSnapshot = seedTenantReviewEvidence( tenant: $tenant, findingCount: 6, driftCount: 2, operationRunCount: 2, ); $review = $reviewService->refresh($review, $user, $refreshSnapshot); $review = $reviewService->compose($review->fresh()); $published = $lifecycle->publish($review, $user); EvidenceSnapshot::query() ->where('tenant_id', (int) $tenant->getKey()) ->where('status', 'active') ->update([ 'status' => 'expired', 'expires_at' => now(), ]); $pack = app(ReviewPackService::class)->generateFromReview($published, $user, [ 'include_pii' => true, 'include_operations' => true, ]); $job = new GenerateReviewPackJob( reviewPackId: (int) $pack->getKey(), operationRunId: (int) $pack->operation_run_id, ); app()->call([$job, 'handle']); $nextReview = $lifecycle->createNextReview($published->fresh(), $user, seedTenantReviewEvidence( tenant: $tenant, findingCount: 7, driftCount: 1, operationRunCount: 3, )); $lifecycle->archive($nextReview, $user); expect(AuditLog::query()->where('action', AuditActionId::TenantReviewCreated->value)->exists())->toBeTrue() ->and(AuditLog::query()->where('action', AuditActionId::TenantReviewRefreshed->value)->exists())->toBeTrue() ->and(AuditLog::query()->where('action', AuditActionId::TenantReviewPublished->value)->exists())->toBeTrue() ->and(AuditLog::query()->where('action', AuditActionId::TenantReviewExported->value)->exists())->toBeTrue() ->and(AuditLog::query()->where('action', AuditActionId::TenantReviewSuccessorCreated->value)->exists())->toBeTrue() ->and(AuditLog::query()->where('action', AuditActionId::TenantReviewArchived->value)->exists())->toBeTrue(); $exportAudit = AuditLog::query() ->where('action', AuditActionId::TenantReviewExported->value) ->latest('id') ->first(); expect($exportAudit)->not->toBeNull() ->and($exportAudit?->resource_type)->toBe('tenant_review') ->and(data_get($exportAudit?->metadata, 'review_pack_id'))->toBe((int) $pack->getKey()); });