<?php
declare(strict_types=1);

namespace ShlinkioTest\Shlink\Rest\Exception;

use Exception;
use PHPUnit\Framework\TestCase;
use Shlinkio\Shlink\Rest\Exception\AuthenticationException;
use Throwable;

class AuthenticationExceptionTest extends TestCase
{
    /**
     * @test
     * @dataProvider providePrev
     */
    public function expiredJWTCreatesExpectedException(?Throwable $prev): void
    {
        $e = AuthenticationException::expiredJWT($prev);

        $this->assertEquals($prev, $e->getPrevious());
        $this->assertEquals(-1, $e->getCode());
        $this->assertEquals('The token has expired.', $e->getMessage());
    }

    public function providePrev(): iterable
    {
        yield 'with previous exception' => [new Exception('Prev')];
        yield 'without previous exception' => [null];
    }
}