'tenant-1', 'name' => 'Tenant One', 'metadata' => [], ]); $tenant->makeCurrent(); $policy = Policy::create([ 'tenant_id' => $tenant->id, 'external_id' => 'policy-1', 'policy_type' => 'deviceConfiguration', 'display_name' => 'Device Config Policy', 'platform' => 'windows', ]); PolicyVersion::create([ 'tenant_id' => $tenant->id, 'policy_id' => $policy->id, 'version_number' => 1, 'policy_type' => $policy->policy_type, 'platform' => $policy->platform, 'captured_at' => now()->subDay(), 'snapshot' => [ 'foo' => 'current', ], 'metadata' => [], 'assignments' => [], 'scope_tags' => [ 'ids' => ['tag-2'], 'names' => ['Tag Two'], ], ]); $backupSet = BackupSet::create([ 'tenant_id' => $tenant->id, 'name' => 'Backup', 'status' => 'completed', 'item_count' => 1, ]); BackupItem::create([ 'tenant_id' => $tenant->id, 'backup_set_id' => $backupSet->id, 'policy_id' => $policy->id, 'policy_identifier' => $policy->external_id, 'policy_type' => $policy->policy_type, 'platform' => $policy->platform, 'captured_at' => now(), 'payload' => [ 'foo' => 'backup', ], 'assignments' => [[ 'target' => [ '@odata.type' => '#microsoft.graph.groupAssignmentTarget', 'groupId' => 'group-1', ], 'intent' => 'apply', ]], 'metadata' => [ 'scope_tag_ids' => ['tag-1'], 'scope_tag_names' => ['Tag One'], ], ]); $user = User::factory()->create(); $this->actingAs($user); $component = Livewire::test(CreateRestoreRun::class) ->fillForm([ 'backup_set_id' => $backupSet->id, ]) ->goToNextWizardStep() ->goToNextWizardStep() ->goToNextWizardStep() ->callFormComponentAction('preview_diffs', 'run_restore_preview'); $summary = $component->get('data.preview_summary'); $diffs = $component->get('data.preview_diffs'); expect($summary)->toBeArray(); expect($summary['policies_total'] ?? null)->toBe(1); expect($summary['policies_changed'] ?? null)->toBe(1); expect($summary['assignments_changed'] ?? null)->toBe(1); expect($summary['scope_tags_changed'] ?? null)->toBe(1); expect($diffs)->toBeArray(); expect($diffs)->not->toBeEmpty(); $first = $diffs[0] ?? []; expect($first)->toBeArray(); expect($first['action'] ?? null)->toBe('update'); expect($first['assignments_changed'] ?? null)->toBeTrue(); expect($first['scope_tags_changed'] ?? null)->toBeTrue(); expect($first['diff']['summary']['changed'] ?? null)->toBe(1); $component ->goToNextWizardStep() ->call('create') ->assertHasNoFormErrors(); $run = RestoreRun::query()->latest('id')->first(); expect($run)->not->toBeNull(); expect($run->metadata)->toHaveKeys([ 'preview_summary', 'preview_diffs', 'preview_ran_at', ]); expect($run->metadata['preview_summary']['policies_changed'] ?? null)->toBe(1); });