<?php
declare(strict_types=1);

namespace common\tests\unit\components\EmailsRenderer;

use common\components\EmailsRenderer\Api;
use common\components\EmailsRenderer\Component;
use common\components\EmailsRenderer\Request\TemplateRequest;
use common\tests\unit\TestCase;

class ComponentTest extends TestCase {

    /**
     * @var Api|\PHPUnit\Framework\MockObject\MockObject
     */
    private $api;

    /**
     * @var Component
     */
    private $component;

    protected function setUp(): void {
        parent::setUp();

        $this->api = $this->createMock(Api::class);
        $componentParams = [
            'api' => $this->api,
            'serviceUrl' => 'http://emails-renderer',
            'basePath' => '/images/emails-templates',
        ];
        $this->component = new class($componentParams) extends Component {
            public $api;

            protected function getApi(): Api {
                return $this->api;
            }
        };
    }

    public function testRender() {
        $expectedRequest = new TemplateRequest('mock-name', 'mock-locale', [
            'find-me' => 'please',
            'assetsHost' => 'http://localhost/images/emails-templates',
        ]);

        $this->api->expects($this->once())->method('getTemplate')->with($expectedRequest)->willReturn('mock-template');

        $result = $this->component->render('mock-name', 'mock-locale', ['find-me' => 'please']);
        $this->assertSame('mock-template', $result);
    }

}