<?php

declare(strict_types=1);

namespace Autogedal\AwbRetry\Test\Unit\Model\Queue;

use Autogedal\AwbRetry\Model\AwbErrorLogManager;
use Autogedal\AwbRetry\Model\Config;
use Autogedal\AwbRetry\Model\ErrorLog;
use Autogedal\AwbRetry\Model\Queue\RetryConsumer;
use Autogedal\AwbRetry\Model\Queue\RetryRequestPublisher;
use Autogedal\AwbRetry\Model\RetryProcessor;
use Autogedal\AwbRetry\Model\TransientFailureClassifier;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;

class RetryConsumerTest extends TestCase
{
    public function testStaleAutomaticMessageDoesNotReopenResolvedLog(): void
    {
        $log = $this->getMockBuilder(ErrorLog::class)->disableOriginalConstructor()->onlyMethods([])->getMock();
        $log->setData('status', 'resolved');
        $manager = $this->createMock(AwbErrorLogManager::class);
        $manager->expects(self::once())->method('loadById')->with(1)->willReturn($log);
        $manager->expects(self::never())->method('markProcessing');
        $manager->expects(self::never())->method('upsertFailure');
        $processor = $this->createMock(RetryProcessor::class);
        $processor->expects(self::never())->method('process');
        $publisher = $this->createMock(RetryRequestPublisher::class);
        $publisher->expects(self::never())->method('queue');
        $config = $this->createMock(Config::class);
        $config->method('getRetryDelayMs')->willReturn(0);

        $consumer = new RetryConsumer($processor, $manager, $publisher, $config,
            $this->createMock(TransientFailureClassifier::class), $this->createMock(LoggerInterface::class));
        $consumer->process('{"error_log_id":1,"retry_mode":"automatic"}');
    }
}
