actingAs($user); $tenant->makeCurrent(); Filament::setTenant($tenant, true); $schedule = BackupSchedule::query()->create([ 'tenant_id' => (int) $tenant->getKey(), 'name' => 'OpsUx Regression Schedule', 'is_enabled' => true, 'timezone' => 'UTC', 'frequency' => 'daily', 'time_of_day' => '10:00:00', 'days_of_week' => null, 'policy_types' => ['deviceConfiguration'], 'include_foundations' => true, 'retention_keep_last' => 30, 'next_run_at' => null, ]); /** @var OperationRunService $operationRuns */ $operationRuns = app(OperationRunService::class); $run = $operationRuns->ensureRun( tenant: $tenant, type: 'backup_schedule_run', inputs: ['backup_schedule_id' => (int) $schedule->getKey()], initiator: $user, ); app()->bind(PolicySyncService::class, fn (): PolicySyncService => new class extends PolicySyncService { public function __construct() {} public function syncPoliciesWithReport($tenant, ?array $supportedTypes = null): array { return ['synced' => [], 'failures' => []]; } }); $backupSet = BackupSet::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'status' => 'completed', 'item_count' => 0, ]); app()->bind(BackupService::class, fn (): BackupService => new class($backupSet) extends BackupService { public function __construct(private readonly BackupSet $backupSet) {} public function createBackupSet($tenant, $policyIds, ?string $actorEmail = null, ?string $actorName = null, ?string $name = null, bool $includeAssignments = false, bool $includeScopeTags = false, bool $includeFoundations = false): BackupSet { return $this->backupSet; } }); Cache::flush(); (new RunBackupScheduleJob(operationRun: $run, backupScheduleId: (int) $schedule->getKey()))->handle( app(PolicySyncService::class), app(BackupService::class), app(PolicyTypeResolver::class), app(ScheduleTimeService::class), app(AuditLogger::class), app(RunErrorMapper::class), ); $run->refresh(); expect($run->status)->toBe('completed'); expect($run->outcome)->toBe('succeeded'); expect($user->notifications()->count())->toBe(1); $this->assertDatabaseHas('notifications', [ 'notifiable_id' => $user->getKey(), 'notifiable_type' => $user->getMorphClass(), 'type' => OperationRunCompleted::class, ]); $this->assertDatabaseMissing('notifications', [ 'notifiable_id' => $user->getKey(), 'notifiable_type' => $user->getMorphClass(), 'type' => DatabaseNotification::class, ]); Bus::assertDispatched(ApplyBackupScheduleRetentionJob::class); })->group('ops-ux');