<?php

namespace League\Glide\Responses;

use Mockery;
use PHPUnit\Framework\TestCase;

class PsrResponseFactoryTest extends TestCase
{
    public function testCreateInstance()
    {
        $response = Mockery::mock('Psr\Http\Message\ResponseInterface');
        $streamCallback = function () {
        };

        $this->assertInstanceOf(
            'League\Glide\Responses\PsrResponseFactory',
            new PsrResponseFactory($response, $streamCallback)
        );
    }

    public function testCreate()
    {
        $response = Mockery::mock('Psr\Http\Message\ResponseInterface', function ($mock) {
            $mock->shouldReceive('withBody')->andReturn($mock)->once();
            $mock->shouldReceive('withHeader')->andReturn($mock)->times(4);
        });

        $streamCallback = function ($stream) {
            return $stream;
        };

        $cache = Mockery::mock('League\Flysystem\FilesystemInterface', function ($mock) {
            $mock->shouldReceive('getMimetype')->andReturn('image/jpeg');
            $mock->shouldReceive('getSize')->andReturn(0);
            $mock->shouldReceive('readStream')->andReturn(
                Mockery::mock('Psr\Http\Message\StreamInterface')
            );
        });

        $factory = new PsrResponseFactory($response, $streamCallback);

        $this->assertInstanceOf(
            'Psr\Http\Message\ResponseInterface',
            $factory->create($cache, 'image.jpg')
        );
    }
}
