<?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 WorkshopTest extends UnitTestCase
{
    /**
     * @var \Medienreaktor\Courses\Domain\Model\Workshop|MockObject|AccessibleObjectInterface
     */
    protected $subject;

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

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

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

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

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

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

    /**
     * @test
     */
    public function getHighlightReturnsInitialValueForBool(): void
    {
        self::assertFalse($this->subject->getHighlight());
    }

    /**
     * @test
     */
    public function setHighlightForBoolSetsHighlight(): void
    {
        $this->subject->setHighlight(true);

        self::assertEquals(true, $this->subject->_get('highlight'));
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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