<?php

namespace Wrm\Events\Tests\Unit\Domain\Model;

use PHPUnit\Framework\TestCase;
use Wrm\Events\Domain\Model\Date;

/**
 * @covers \Wrm\Events\Domain\Model\Date
 */
class DateTest extends TestCase
{
    /**
     * @test
     */
    public function canBeCreated(): void
    {
        $subject = new Date();

        self::assertInstanceOf(
            Date::class,
            $subject
        );
    }

    /**
     * @test
     */
    public function returnsThatItHasUsefulStartTime(): void
    {
        $subject = new Date();
        $subject->setStart(new \DateTime('2022-07-11T13:48:00'));

        self::assertTrue($subject->getHasUsefulStartTime());
    }

    /**
     * @test
     */
    public function returnsThatItDoesNotHaveUsefulStartTime(): void
    {
        $subject = new Date();
        $subject->setStart(new \DateTime('2022-07-11T00:00:00'));

        self::assertFalse($subject->getHasUsefulStartTime());
    }

    /**
     * @test
     */
    public function returnsThatItHasUsefulEndTime(): void
    {
        $subject = new Date();
        $subject->setEnd(new \DateTime('2022-07-11T00:00:00'));

        self::assertTrue($subject->getHasUsefulEndTime());
    }

    /**
     * @test
     */
    public function returnsThatItDoesNotHaveUsefulEndTime(): void
    {
        $subject = new Date();
        $subject->setEnd(new \DateTime('2022-07-11T23:59:00'));

        self::assertFalse($subject->getHasUsefulEndTime());
    }

    /**
     * @test
     */
    public function returnsThatItEndsOnSameDay(): void
    {
        $subject = new Date();
        $subject->setStart(new \DateTime('2022-07-11T14:00:00'));
        $subject->setEnd(new \DateTime('2022-07-11T22:00:00'));

        self::assertTrue($subject->getEndsOnSameDay());
    }

    /**
     * @test
     */
    public function returnsThatItDoesNotEndOnSameDay(): void
    {
        $subject = new Date();
        $subject->setStart(new \DateTime('2022-07-11T14:00:00'));
        $subject->setEnd(new \DateTime('2022-07-13T22:00:00'));

        self::assertFalse($subject->getEndsOnSameDay());
    }
}