<?php

namespace Tests\Unit\Attribut;

use PHPUnit\Framework\TestCase;
use Infinito\Attribut\CrudAttributInterface;
use Infinito\Attribut\CrudAttribut;
use Infinito\DBAL\Types\Meta\Right\CRUDType;
use Infinito\Exception\Type\InvalidChoiceTypeException;

/**
 * @author kevinfrantz
 */
class CrudAttributTest extends TestCase
{
    /**
     * @var CrudAttributInterface
     */
    protected $crudAttribut;

    public function setUp(): void
    {
        $this->crudAttribut = new class() implements CrudAttributInterface {
            use CrudAttribut;
        };
    }

    public function testConstructor(): void
    {
        $this->expectException(\TypeError::class);
        $this->crudAttribut->getCrud();
    }

    public function testAccessors(): void
    {
        foreach (CRUDType::getValues() as $enum) {
            $this->assertNull($this->crudAttribut->setCrud($enum));
            $this->assertEquals($enum, $this->crudAttribut->getCrud());
        }
        $this->expectException(InvalidChoiceTypeException::class);
        $this->crudAttribut->setCrud('NoneValidType');
    }
}