<?php

declare(strict_types=1);

namespace Medienreaktor\Courses\Tests\Unit\Domain\Model;

use PHPUnit\Framework\MockObject\MockObject;
use TYPO3\TestingFramework\Core\AccessibleObjectInterface;
use TYPO3\TestingFramework\Core\Unit\UnitTestCase;

/**
 * Test case
 *
 * @author Matthias Schieber <matthias.schieber@medienreaktor.de>
 */
class SubjectTest extends UnitTestCase
{
    /**
     * @var \Medienreaktor\Courses\Domain\Model\Subject|MockObject|AccessibleObjectInterface
     */
    protected $subject;

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

        $this->subject = $this->getAccessibleMock(
            \Medienreaktor\Courses\Domain\Model\Subject::class,
            ['dummy']
        );
    }

    protected function tearDown(): void
    {
        parent::tearDown();
    }

    /**
     * @test
     */
    public function getTitleReturnsInitialValueForString(): void
    {
        self::assertSame(
            '',
            $this->subject->getTitle()
        );
    }

    /**
     * @test
     */
    public function setTitleForStringSetsTitle(): void
    {
        $this->subject->setTitle('Conceived at T3CON10');

        self::assertEquals('Conceived at T3CON10', $this->subject->_get('title'));
    }

    /**
     * @test
     */
    public function getSubjectIdReturnsInitialValueForInt(): void
    {
        self::assertSame(
            0,
            $this->subject->getSubjectId()
        );
    }

    /**
     * @test
     */
    public function setSubjectIdForIntSetsSubjectId(): void
    {
        $this->subject->setSubjectId(12);

        self::assertEquals(12, $this->subject->_get('subjectId'));
    }

    /**
     * @test
     */
    public function getIconReturnsInitialValueForFileReference(): void
    {
        self::assertEquals(
            null,
            $this->subject->getIcon()
        );
    }

    /**
     * @test
     */
    public function setIconForFileReferenceSetsIcon(): void
    {
        $fileReferenceFixture = new \TYPO3\CMS\Extbase\Domain\Model\FileReference();
        $this->subject->setIcon($fileReferenceFixture);

        self::assertEquals($fileReferenceFixture, $this->subject->_get('icon'));
    }

    /**
     * @test
     */
    public function getImageReturnsInitialValueForFileReference(): void
    {
        self::assertEquals(
            null,
            $this->subject->getImage()
        );
    }

    /**
     * @test
     */
    public function setImageForFileReferenceSetsImage(): void
    {
        $fileReferenceFixture = new \TYPO3\CMS\Extbase\Domain\Model\FileReference();
        $this->subject->setImage($fileReferenceFixture);

        self::assertEquals($fileReferenceFixture, $this->subject->_get('image'));
    }
}
