<?php

declare(strict_types=1);

namespace ShlinkioTest\Shlink\Rest\Middleware;

use Laminas\Diactoros\Response\EmptyResponse;
use Mezzio\Router\Middleware\ImplicitOptionsMiddleware;
use PHPUnit\Framework\TestCase;
use Psr\Http\Message\ResponseFactoryInterface;
use ReflectionObject;
use Shlinkio\Shlink\Rest\Middleware\EmptyResponseImplicitOptionsMiddlewareFactory;

class EmptyResponseImplicitOptionsMiddlewareFactoryTest extends TestCase
{
    private EmptyResponseImplicitOptionsMiddlewareFactory $factory;

    public function setUp(): void
    {
        $this->factory = new EmptyResponseImplicitOptionsMiddlewareFactory();
    }

    /** @test */
    public function serviceIsCreated(): void
    {
        $instance = ($this->factory)();
        self::assertInstanceOf(ImplicitOptionsMiddleware::class, $instance);
    }

    /** @test */
    public function responsePrototypeIsEmptyResponse(): void
    {
        $instance = ($this->factory)();

        $ref = new ReflectionObject($instance);
        $prop = $ref->getProperty('responseFactory');
        $prop->setAccessible(true);

        /** @var ResponseFactoryInterface $value */
        $value = $prop->getValue($instance);

        self::assertInstanceOf(EmptyResponse::class, $value->createResponse());
    }
}