## Summary - replace the legacy Tenant and TenantMembership core models with ManagedEnvironment and ManagedEnvironmentMembership - propagate the managed environment naming and key changes across Filament resources, pages, controllers, jobs, models, and supporting runtime paths - add feature 279 spec artifacts and focused managed-environment test coverage for model behavior, route binding, panel context, authorization, and legacy guardrails ## Validation - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/ManagedEnvironment/LegacyTenantCoreGuardTest.php tests/Feature/ManagedEnvironment/ManagedEnvironmentAuthorizationTest.php tests/Feature/ManagedEnvironment/ManagedEnvironmentPanelContextTest.php tests/Feature/ManagedEnvironment/ManagedEnvironmentRouteBindingTest.php tests/Unit/ManagedEnvironment/ManagedEnvironmentContextResolverTest.php tests/Unit/ManagedEnvironment/ManagedEnvironmentModelTest.php` - `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` ## Notes - branch pushed from commit `1123b122` - browser smoke test file was added but not run in this pass Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #335
100 lines
3.0 KiB
PHP
100 lines
3.0 KiB
PHP
<?php
|
|
|
|
use App\Models\OperationRun;
|
|
use App\Models\RestoreRun;
|
|
use App\Support\RestoreRunStatus;
|
|
|
|
it('creates an operation run only from previewed onward', function () {
|
|
$restoreRun = RestoreRun::factory()->create([
|
|
'status' => RestoreRunStatus::Checked->value,
|
|
]);
|
|
|
|
expect(OperationRun::query()
|
|
->where('managed_environment_id', $restoreRun->managed_environment_id)
|
|
->where('type', 'restore.execute')
|
|
->count())->toBe(0);
|
|
|
|
$restoreRun->update(['status' => RestoreRunStatus::Previewed->value]);
|
|
|
|
$opRun = OperationRun::query()
|
|
->where('managed_environment_id', $restoreRun->managed_environment_id)
|
|
->where('type', 'restore.execute')
|
|
->latest('id')
|
|
->first();
|
|
|
|
expect($opRun)->not->toBeNull();
|
|
expect($opRun?->status)->toBe('completed');
|
|
expect($opRun?->outcome)->toBe('succeeded');
|
|
expect($opRun?->context)->toMatchArray([
|
|
'restore_run_id' => (int) $restoreRun->getKey(),
|
|
'backup_set_id' => (int) $restoreRun->backup_set_id,
|
|
'is_dry_run' => (bool) $restoreRun->is_dry_run,
|
|
]);
|
|
});
|
|
|
|
it('updates the operation run when restore completes', function () {
|
|
$restoreRun = RestoreRun::factory()->create([
|
|
'status' => RestoreRunStatus::Queued->value,
|
|
'metadata' => [
|
|
'total' => 3,
|
|
'succeeded' => 1,
|
|
'failed' => 1,
|
|
'skipped' => 1,
|
|
],
|
|
]);
|
|
|
|
$opRun = OperationRun::query()
|
|
->where('managed_environment_id', $restoreRun->managed_environment_id)
|
|
->where('type', 'restore.execute')
|
|
->latest('id')
|
|
->first();
|
|
|
|
expect($opRun)->not->toBeNull();
|
|
expect($opRun?->status)->toBe('queued');
|
|
|
|
$restoreRun->update([
|
|
'status' => RestoreRunStatus::Completed->value,
|
|
'metadata' => [
|
|
'total' => 3,
|
|
'succeeded' => 1,
|
|
'failed' => 1,
|
|
'skipped' => 1,
|
|
],
|
|
]);
|
|
|
|
$opRun->refresh();
|
|
|
|
expect($opRun->status)->toBe('completed');
|
|
expect($opRun->outcome)->toBe('succeeded');
|
|
expect($opRun->summary_counts)->toMatchArray([
|
|
'total' => 3,
|
|
'succeeded' => 1,
|
|
'failed' => 1,
|
|
'skipped' => 1,
|
|
]);
|
|
expect($opRun->completed_at)->not->toBeNull();
|
|
});
|
|
|
|
it('maps cancelled restore runs to failed outcome (cancelled is reserved)', function () {
|
|
$restoreRun = RestoreRun::factory()->create([
|
|
'status' => RestoreRunStatus::Queued->value,
|
|
]);
|
|
|
|
$opRun = OperationRun::query()
|
|
->where('managed_environment_id', $restoreRun->managed_environment_id)
|
|
->where('type', 'restore.execute')
|
|
->latest('id')
|
|
->first();
|
|
|
|
expect($opRun)->not->toBeNull();
|
|
|
|
$restoreRun->update(['status' => RestoreRunStatus::Cancelled->value]);
|
|
|
|
$opRun->refresh();
|
|
|
|
expect($opRun->status)->toBe('completed');
|
|
expect($opRun->outcome)->toBe('failed');
|
|
expect($opRun->failure_summary)->toBeArray();
|
|
expect($opRun->failure_summary[0]['code'] ?? null)->toBe('restore.cancelled');
|
|
});
|