TenantAtlas/tests/Feature/Guards/NoLegacyRunBackfillTest.php
ahmido 5770c7b76b Spec 092: Legacy Purge (runs/routes/UI/test shims) (#110)
Implements Spec 092 legacy purge.

Key changes:
- Remove legacy Inventory landing page + view; link Inventory entry directly to Inventory Items.
- Update Drift landing copy to "operation runs"; remove URL heuristic from context bar.
- Remove legacy redirect shim route and assert 404 for old bookmarks.
- Staged job payload change: remove legacy ctor arg; keep legacy field for deserialization compatibility; new payload omits field.
- Remove legacy notification artifact.
- Remove legacy test shim + update tests; strengthen guard suite with scoped exception for job compat field.
- Add spec/plan/tasks/checklist artifacts under specs/092-legacy-purge-final.

Tests:
- Focused Pest suite for guards, legacy routes, redirect behavior, job compatibility, drift copy.
- Pint run: `vendor/bin/sail bin pint --dirty`.

Notes:
- Deploy B final removal of `backupScheduleRunId` should occur only after the compatibility window defined in the spec.

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #110
2026-02-14 18:43:56 +00:00

63 lines
1.8 KiB
PHP

<?php
use Illuminate\Support\Collection;
it('does not backfill canonical operation runs from legacy run tables', function () {
$root = base_path();
$directories = [
$root.'/app',
$root.'/database/migrations',
];
$forbiddenPatterns = [
'/insert\s+into\s+["`]?operation_runs["`]?.{0,1200}\b(?:inventory_sync_runs|entra_group_sync_runs|backup_schedule_runs)\b/is',
];
/** @var Collection<int, string> $files */
$files = collect($directories)
->filter(fn (string $dir): bool => is_dir($dir))
->flatMap(function (string $dir): array {
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS)
);
$paths = [];
foreach ($iterator as $file) {
if (! $file->isFile() || $file->getExtension() !== 'php') {
continue;
}
$paths[] = $file->getPathname();
}
return $paths;
})
->values();
$hits = [];
foreach ($files as $path) {
$contents = file_get_contents($path);
if (! is_string($contents) || $contents === '') {
continue;
}
foreach ($forbiddenPatterns as $pattern) {
if (! preg_match($pattern, $contents, $matches, PREG_OFFSET_CAPTURE)) {
continue;
}
$offset = (int) ($matches[0][1] ?? 0);
$lineNumber = substr_count(substr($contents, 0, $offset), "\n") + 1;
$excerpt = trim((string) ($matches[0][0] ?? ''));
$hits[] = str_replace($root.'/', '', $path).':'.$lineNumber.' -> '.str($excerpt)->limit(160)->value();
}
}
expect($hits)->toBeEmpty('Found legacy-to-canonical backfill patterns:\n'.implode("\n", $hits));
});