<?php

declare(strict_types=1);

namespace Engelsystem\Test\Unit\Controllers;

use Engelsystem\Config\Config;
use Engelsystem\Controllers\DesignController;
use Engelsystem\Http\Response;
use Engelsystem\Test\Unit\TestCase;
use PHPUnit\Framework\MockObject\MockObject;

class DesignControllerTest extends TestCase
{
    protected function setUp(): void
    {
        parent::setUp();
        $this->mockRenderer();
        $this->mockTranslator();
    }

    /**
     * @covers \Engelsystem\Controllers\DesignController::__construct
     * @covers \Engelsystem\Controllers\DesignController::index
     */
    public function testIndex(): void
    {
        /** @var Response|MockObject $response */
        $response = $this->createMock(Response::class);
        $response->expects($this->once())
            ->method('withView')
            ->with('pages/design')
            ->willReturnCallback(function (string $view, array $data) use ($response) {
                $this->assertTrue(isset($data['demo_user']));
                $this->assertTrue(isset($data['demo_user_2']));
                $this->assertIsArray($data['themes']);

                return $response;
            });
        $config = new Config(['themes' => [42 => ['name' => 'Foo']]]);

        $controller = new DesignController($response, $config);
        $return = $controller->index();

        $this->assertEquals($response, $return);
    }
}