<?php

declare(strict_types=1);

namespace Seka\Portal\Modul\Statistiky\Tests\Unit\Services\Analyzators\Validators;

use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Enums\DruhEmisnejKontrolyEnum;
use Seka\Portal\Modul\Statistiky\Services\Analyzators\Validators\LexicalKontrolaDruh;
use Seka\Portal\Modul\Statistiky\Tests\TestCase;

/**
 * Class LexicalKontrolaDruhTest
 *
 * @package Seka\Portal\Modul\Statistiky\Tests\Unit\Services\Analyzators\Validators
 */
class LexicalKontrolaDruhTest extends TestCase
{
    /**
     *
     */
    public function testValidateCorrectKontrolaDruh()
    {
        $validator = new LexicalKontrolaDruh();

        self::assertTrue($validator->validate(DruhEmisnejKontrolyEnum::PRAVIDELNA->value));
    }

    /**
     *
     */
    public function testValidateIncorrectKontrolaDruh()
    {
        $validator = new LexicalKontrolaDruh();

        self::assertFalse($validator->validate('INCORRECT'));
    }

    /**
     *
     */
    public function testValidateEmptyKontrolaDruh()
    {
        $validator = new LexicalKontrolaDruh();

        self::assertFalse($validator->validate(''));
    }

    /**
     *
     */
    public function testGetErrorMsgWithError()
    {
        $incorrectKontrolaDruh = 'INCORRECT';
        $validator = new LexicalKontrolaDruh();
        $validator->validate($incorrectKontrolaDruh);
        $message = sprintf('povolene hodnoty: %s, %s', collect(DruhEmisnejKontrolyEnum::cases())->map(fn(DruhEmisnejKontrolyEnum $case) => $case->value)->implode(','), $incorrectKontrolaDruh);
        $actualMessage = $validator->getErrorMsg($incorrectKontrolaDruh);

        self::assertEquals($message, $actualMessage);
        self::assertIsString($actualMessage);
    }
}
