<?php

use App\Models\OperationRun;
use App\Models\ManagedEnvironment;
use App\Models\User;
use App\Services\OperationRunService;
use Illuminate\Foundation\Testing\RefreshDatabase;

uses(RefreshDatabase::class);
it('can complete an operation run as failed with a bounded failure summary', function () {
    $tenant = ManagedEnvironment::factory()->create();
    $user = User::factory()->create();

    $run = OperationRun::factory()->create([
        'managed_environment_id' => $tenant->getKey(),
        'user_id' => $user->getKey(),
        'initiator_name' => $user->name,
        'type' => 'policy.delete',
        'status' => 'running',
        'outcome' => 'pending',
        'summary_counts' => [],
        'failure_summary' => [],
    ]);

    /** @var OperationRunService $service */
    $service = app(OperationRunService::class);

    $service->updateRun(
        $run,
        status: 'completed',
        outcome: 'failed',
        failures: [[
            'code' => 'circuit_breaker',
            'message' => 'Threshold exceeded.',
        ]],
    );

    $run->refresh();
    expect($run->status)->toBe('completed');
    expect($run->outcome)->toBe('failed');
    expect($run->failure_summary)->not->toBeEmpty();
});
