<?php

declare(strict_types=1);

namespace Seka\Portal\Modul\Statistiky\Tests\Unit\Entities\Zaznam;

use DateTimeImmutable;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\DTOs\ZaznamDTO;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Enums\DruhSubjektuZaznamuEnum;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\Subjekt;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\UdajePreTypZaznamuPouzivatel;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhu;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaHodnotenia;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaKategorieVozidla;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaStavu;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolSObratom;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Zaznam;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ZaznamFactory;
use Seka\Portal\Modul\Statistiky\Tests\TestCase;

/**
 * Class ZaznamFactoryTest
 *
 * @package Seka\Portal\Modul\Statistiky\Tests\Unit\Entities\Zaznam
 */
class ZaznamFactoryTest extends TestCase
{
    /**
     *
     */
    public function testMake()
    {
        $zaznamDTO = ZaznamDTO::from([
                'subjekt' => new Subjekt(DruhSubjektuZaznamuEnum::POUZIVATEL, 'tester'),
                'kodPracoviska' => '0000',
                'datum' => new DateTimeImmutable(),
                'udaje' => new UdajePreTypZaznamuPouzivatel(
                    ZoznamPoctuKontrolSObratom::createFromArray([]),
                    ZoznamPoctuKontrolPodlaDruhu::createFromArray([]),
                    ZoznamPoctuKontrolPodlaStavu::createFromArray([]),
                    ZoznamPoctuKontrolPodlaHodnotenia::createFromArray([]),
                    ZoznamPoctuKontrolPodlaKategorieVozidla::createFromArray([]),
                    ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla::createFromArray([])
                )]
        );

        $factory = new ZaznamFactory();
        $zaznam = $factory->make($zaznamDTO);

        self::assertInstanceOf(ZaznamFactory::class, $factory);
        self::assertInstanceOf(Zaznam::class, $zaznam);
    }
}
