<?php

use App\Jobs\Concerns\BridgesFailedOperationRun;
use App\Jobs\RunBackupScheduleJob;

it('serializes without the legacy backup schedule run id field', function (): void {
    $job = new RunBackupScheduleJob(operationRun: null, backupScheduleId: 42);

    expect(serialize($job))->not->toContain('backupScheduleRunId');
});

it('can deserialize legacy payloads that still contain backupScheduleRunId', function (): void {
    $class = RunBackupScheduleJob::class;
    $payload = sprintf(
        'O:%d:"%s":3:{s:19:"backupScheduleRunId";i:0;s:12:"operationRun";N;s:16:"backupScheduleId";i:42;}',
        strlen($class),
        $class
    );

    $job = unserialize($payload, ['allowed_classes' => [RunBackupScheduleJob::class]]);

    expect($job)->toBeInstanceOf(RunBackupScheduleJob::class)
        ->and($job->backupScheduleId)->toBe(42);
});

it('declares the backup schedule lifecycle contract explicitly', function (): void {
    $job = new RunBackupScheduleJob(operationRun: null, backupScheduleId: 42);

    expect(class_uses_recursive($job))->not->toContain(BridgesFailedOperationRun::class)
        ->and($job->timeout)->toBe(300)
        ->and($job->failOnTimeout)->toBeTrue();
});
