more tests and make classes final

This commit is contained in:
Dennis Eichhorn 2021-10-21 22:16:06 +02:00
parent 27f06255af
commit 3b9d18cf3e
16 changed files with 497 additions and 234 deletions

View File

@ -32,7 +32,7 @@ class Calendar
* @var int
* @since 1.0.0
*/
private int $id = 0;
protected int $id = 0;
/**
* Name.
@ -64,7 +64,7 @@ class Calendar
* @var \DateTime
* @since 1.0.0
*/
private \DateTime $date;
public \DateTime $date;
/**
* Events.
@ -153,30 +153,6 @@ class Calendar
return $this->events[$id] ?? new NullEvent();
}
/**
* Get current date
*
* @return \DateTime
*
* @since 1.0.0
*/
public function getDate() : \DateTime
{
return $this->date;
}
/**
* Set current date
*
* @param \DateTime $date Current date
*
* @since 1.0.0
*/
public function setDate(\DateTime $date) : void
{
$this->date = $date;
}
/**
* Get event by date
*
@ -186,11 +162,11 @@ class Calendar
*
* @since 1.0.0
*/
public function getEventByDate(\DateTime $date) : array
public function getEventsOnDate(\DateTime $date) : array
{
$events = [];
foreach ($this->events as $event) {
if ($event->createdAt->format('Y-m-d') === $date->format('Y-m-d')) {
if ($event->schedule->start->format('Y-m-d') === $date->format('Y-m-d')) {
$events[] = $event;
}
}
@ -210,7 +186,7 @@ class Calendar
public function hasEventOnDate(\DateTime $date) : bool
{
foreach ($this->events as $event) {
if ($event->createdAt->format('Y-m-d') === $date->format('Y-m-d')) {
if ($event->schedule->start->format('Y-m-d') === $date->format('Y-m-d')) {
return true;
}
}

View File

@ -36,7 +36,7 @@ class Event
* @var int
* @since 1.0.0
*/
private int $id = 0;
protected int $id = 0;
/**
* Name.
@ -96,7 +96,7 @@ class Event
* @var Schedule
* @since 1.0.0
*/
private Schedule $schedule;
public Schedule $schedule;
/**
* Location of the event.
@ -104,7 +104,7 @@ class Event
* @var Location
* @since 1.0.0
*/
private Location $location;
public Location $location;
/**
* Calendar
@ -112,7 +112,7 @@ class Event
* @var int
* @since 1.0.0
*/
private $calendar = null;
public int $calendar;
/**
* People.
@ -141,6 +141,7 @@ class Event
$this->createdAt = new \DateTimeImmutable('now');
$this->location = new Location();
$this->schedule = new Schedule();
$this->calendar = 0;
}
/**
@ -236,37 +237,17 @@ class Event
}
/**
* Set location
* Set event type.
*
* @param Location $location Event location
* @param int $type Event type
*
* @return void
*
* @since 1.0.0
*/
public function setLocation(Location $location) : void
public function setType(int $type = EventType::SINGLE) : void
{
$this->location = $location;
}
/**
* @return Location
*
* @since 1.0.0
*/
public function getLocation() : Location
{
return $this->location;
}
/**
* @return int
*
* @since 1.0.0
*/
public function getCalendar() : int
{
return $this->calendar;
$this->type = $type;
}
/**
@ -279,6 +260,20 @@ class Event
return $this->type;
}
/**
* Set event status.
*
* @param int $status Event status
*
* @return void
*
* @since 1.0.0
*/
public function setStatus(int $status = EventStatus::ACTIVE) : void
{
$this->status = $status;
}
/**
* @return int
*
@ -289,26 +284,6 @@ class Event
return $this->status;
}
/**
* @param int $calendar Calendar
*
* @since 1.0.0
*/
public function setCalendar(int $calendar) : void
{
$this->calendar = $calendar;
}
/**
* @return Schedule
*
* @since 1.0.0
*/
public function getSchedule() : Schedule
{
return $this->schedule;
}
/**
* Adding new tag.
*

View File

@ -27,4 +27,6 @@ use phpOMS\Stdlib\Base\Enum;
abstract class EventStatus extends Enum
{
public const ACTIVE = 1;
public const INACTIVE = 2;
}

View File

@ -24,4 +24,16 @@ namespace Modules\Calendar\Models;
*/
final class NullCalendar extends Calendar
{
/**
* Constructor
*
* @param int $id Model id
*
* @since 1.0.0
*/
public function __construct(int $id = 0)
{
$this->id = $id;
parent::__construct();
}
}

View File

@ -24,4 +24,16 @@ namespace Modules\Calendar\Models;
*/
final class NullEvent extends Event
{
/**
* Constructor
*
* @param int $id Model id
*
* @since 1.0.0
*/
public function __construct(int $id = 0)
{
$this->id = $id;
parent::__construct();
}
}

View File

@ -24,4 +24,16 @@ namespace Modules\Calendar\Models;
*/
final class NullSchedule extends Schedule
{
/**
* Constructor
*
* @param int $id Model id
*
* @since 1.0.0
*/
public function __construct(int $id = 0)
{
$this->id = $id;
parent::__construct();
}
}

View File

@ -90,7 +90,7 @@ class Schedule
* @var int
* @since 1.0.0
*/
private int $recurrenceFactor = 0;
public int $recurrenceFactor = 0;
/**
* Start.
@ -98,7 +98,7 @@ class Schedule
* @var \DateTime
* @since 1.0.0
*/
private \DateTime $start;
public \DateTime $start;
/**
* Duration.
@ -106,7 +106,7 @@ class Schedule
* @var int
* @since 1.0.0
*/
private int $duration = 3600;
public int $duration = 3600;
/**
* End.
@ -114,7 +114,7 @@ class Schedule
* @var \DateTime
* @since 1.0.0
*/
private \DateTime $end;
public \DateTime $end;
/**
* Created at.
@ -295,104 +295,4 @@ class Schedule
{
return $this->freqInterval;
}
/**
* @return int
*
* @since 1.0.0
*/
public function getRecurrenceFactor() : int
{
return $this->recurrenceFactor;
}
/**
* @param int $recurrence Recurrence
*
* @return $this
*
* @since 1.0.0
*/
public function setRecurrenceFactor(int $recurrence) : self
{
$this->recurrenceFactor = $recurrence;
return $this;
}
/**
* @return \DateTime
*
* @since 1.0.0
*/
public function getStart() : \DateTime
{
return $this->start;
}
/**
* @param \DateTime $start Schedule start
*
* @return $this
*
* @since 1.0.0
*/
public function setStart(\DateTime $start) : self
{
$this->start = $start;
return $this;
}
/**
* @return int
*
* @since 1.0.0
*/
public function getDuration() : int
{
return $this->duration;
}
/**
* @param int $duration Duration
*
* @return $this
*
* @since 1.0.0
*/
public function setDuration(int $duration)
{
if ($duration < 1) {
throw new \InvalidArgumentException((string) $duration);
}
$this->duration = $duration;
return $this;
}
/**
* @return \DateTime
*
* @since 1.0.0
*/
public function getEnd() : \DateTime
{
return $this->end;
}
/**
* @param \DateTime $end Schedule end
*
* @return $this
*
* @since 1.0.0
*/
public function setEnd(\DateTime $end)
{
$this->end = $end;
return $this;
}
}

View File

@ -28,7 +28,7 @@ class CalendarMapperTest extends \PHPUnit\Framework\TestCase
* @covers Modules\Calendar\Models\CalendarMapper
* @group module
*/
public function testCRUD() : void
public function testCR() : void
{
$calendar = new Calendar();
@ -39,14 +39,14 @@ class CalendarMapperTest extends \PHPUnit\Framework\TestCase
$calendarEvent1->name = 'Running test';
$calendarEvent1->description = 'Desc1';
$calendarEvent1->setCreatedBy(new NullAccount(1));
$calendarEvent1->getSchedule()->createdBy = new NullAccount(1);
$calendarEvent1->schedule->createdBy = new NullAccount(1);
$calendar->addEvent($calendarEvent1);
$calendarEvent2 = new Event();
$calendarEvent2->name = 'Running test2';
$calendarEvent2->description = 'Desc2';
$calendarEvent2->setCreatedBy(new NullAccount(1));
$calendarEvent2->getSchedule()->createdBy = new NullAccount(1);
$calendarEvent2->schedule->createdBy = new NullAccount(1);
$calendar->addEvent($calendarEvent2);
$id = CalendarMapper::create($calendar);

View File

@ -22,55 +22,120 @@ use Modules\Calendar\Models\Event;
*/
class CalendarTest extends \PHPUnit\Framework\TestCase
{
private Calendar $calendar;
/**
* {@inheritdoc}
*/
protected function setUp() : void
{
$this->calendar = new Calendar();
}
/**
* @covers Modules\Calendar\Models\Calendar
* @group module
*/
public function testDefault() : void
{
$calendar = new Calendar();
self::assertEquals(0, $calendar->getId());
self::assertEquals('', $calendar->name);
self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $calendar->createdAt->format('Y-m-d'));
self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $calendar->getDate()->format('Y-m-d'));
self::assertEquals('', $calendar->description);
self::assertEquals([], $calendar->getEvents());
self::assertInstanceOf('\Modules\Calendar\Models\NullEvent', $calendar->getEvent(0));
self::assertFalse($calendar->hasEventOnDate(new \DateTime('now')));
self::assertEquals([], $calendar->getEventByDate(new \DateTime('now')));
self::assertEquals(0, $this->calendar->getId());
self::assertEquals('', $this->calendar->name);
self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $this->calendar->createdAt->format('Y-m-d'));
self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $this->calendar->date->format('Y-m-d'));
self::assertEquals('', $this->calendar->description);
self::assertEquals([], $this->calendar->getEvents());
self::assertInstanceOf('\Modules\Calendar\Models\NullEvent', $this->calendar->getEvent(0));
self::assertFalse($this->calendar->hasEventOnDate(new \DateTime('now')));
self::assertEquals([], $this->calendar->getEventsOnDate(new \DateTime('now')));
}
/**
* @covers Modules\Calendar\Models\Calendar
* @group module
*/
public function testSetGet() : void
public function testDateInputOutput() : void
{
$calendar = new Calendar();
$this->calendar->date = new \DateTime('2000-05-05');
self::assertEquals('2000-05-05', $this->calendar->date->format('Y-m-d'));
}
$calendar->setDate($date = new \DateTime('2000-05-05'));
self::assertEquals($date->format('Y-m-d'), $calendar->getDate()->format('Y-m-d'));
/**
* @covers Modules\Calendar\Models\Calendar
* @group module
*/
public function testTitleInputOutput() : void
{
$this->calendar->name = 'Title';
self::assertEquals('Title', $this->calendar->name);
}
$calendar->name = 'Title';
self::assertEquals('Title', $calendar->name);
/**
* @covers Modules\Calendar\Models\Calendar
* @group module
*/
public function testDescriptionInputOutput() : void
{
$this->calendar->description = 'Description';
self::assertEquals('Description', $this->calendar->description);
}
$calendar->description = 'Description';
self::assertEquals('Description', $calendar->description);
/**
* @covers Modules\Calendar\Models\Calendar
* @group module
*/
public function testEventInputOutput() : void
{
$id = [];
$id[] = $this->calendar->addEvent(new Event());
self::assertEquals(0, $this->calendar->getEvents()[0]->getId());
self::assertEquals(0, $this->calendar->getEvent(0)->getId());
self::assertInstanceOf('\Modules\Calendar\Models\Event', $this->calendar->getEvent(1));
}
/**
* @covers Modules\Calendar\Models\Calendar
* @group module
*/
public function testEventRemove() : void
{
$id = [];
$id[] = $calendar->addEvent(new Event());
$id[] = $calendar->addEvent(new Event());
$success = $calendar->removeEvent(99);
$id[] = $this->calendar->addEvent(new Event());
$id[] = $this->calendar->addEvent(new Event());
$success = $this->calendar->removeEvent(99);
self::assertFalse($success);
$success = $calendar->removeEvent($id[1]);
$success = $this->calendar->removeEvent($id[1]);
self::assertTrue($success);
}
self::assertEquals(0, $calendar->getEvents()[0]->getId());
self::assertEquals(0, $calendar->getEvent(0)->getId());
/**
* @covers Modules\Calendar\Models\Calendar
* @group module
*/
public function testHasEventOnDate() : void
{
$event = new Event();
$event->schedule->start = new \DateTime('2005-10-09');
self::assertInstanceOf('\Modules\Calendar\Models\Event', $calendar->getEvent(1));
$this->calendar->addEvent($event);
self::assertFalse($this->calendar->hasEventOnDate(new \DateTime('2005-10-10')));
self::assertTrue($this->calendar->hasEventOnDate(new \DateTime('2005-10-09')));
}
/**
* @covers Modules\Calendar\Models\Calendar
* @group module
*/
public function testGetEventsOnDate() : void
{
$event = new Event();
$event->name = 'Test';
$event->schedule->start = new \DateTime('2005-10-09');
$this->calendar->addEvent($event);
self::assertEquals([], $this->calendar->getEventsOnDate(new \DateTime('2005-10-10')));
self::assertEquals([$event], $this->calendar->getEventsOnDate(new \DateTime('2005-10-09')));
}
}

View File

@ -34,8 +34,8 @@ class EventMapperTest extends \PHPUnit\Framework\TestCase
$calendarEvent1->name = 'Running test';
$calendarEvent1->description = 'Desc1';
$calendarEvent1->setCreatedBy(new NullAccount(1));
$calendarEvent1->getSchedule()->createdBy = new NullAccount(1);
$calendarEvent1->setCalendar(1);
$calendarEvent1->schedule->createdBy = new NullAccount(1);
$calendarEvent1->calendar = 1;
$id = EventMapper::create($calendarEvent1);
self::assertGreaterThan(0, $calendarEvent1->getId());

View File

@ -17,54 +17,153 @@ namespace Modules\Calendar\tests\Models;
use Modules\Admin\Models\Account;
use Modules\Admin\Models\NullAccount;
use Modules\Calendar\Models\Event;
use Modules\Calendar\Models\EventStatus;
use Modules\Calendar\Models\EventType;
use Modules\Tag\Models\Tag;
/**
* @internal
*/
class EventTest extends \PHPUnit\Framework\TestCase
{
private Event $event;
/**
* {@inheritdoc}
*/
protected function setUp() : void
{
$this->event = new Event();
}
/**
* @covers Modules\Calendar\Models\Event
* @group module
*/
public function testDefault() : void
{
$event = new Event();
self::assertEquals(0, $event->getId());
self::assertEquals(0, $event->getCreatedBy()->getId());
self::assertEquals('', $event->name);
self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $event->createdAt->format('Y-m-d'));
self::assertEquals('', $event->description);
self::assertEquals([], $event->getPeople());
self::assertInstanceOf('\Modules\Admin\Models\NullAccount', $event->getPerson(1));
self::assertInstanceOf('\phpOMS\Stdlib\Base\Location', $event->getLocation());
self::assertEquals(0, $this->event->getId());
self::assertEquals(0, $this->event->getCreatedBy()->getId());
self::assertEquals('', $this->event->name);
self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $this->event->createdAt->format('Y-m-d'));
self::assertEquals('', $this->event->description);
self::assertEquals([], $this->event->getPeople());
self::assertInstanceOf('\Modules\Admin\Models\NullAccount', $this->event->getPerson(1));
self::assertInstanceOf('\phpOMS\Stdlib\Base\Location', $this->event->location);
}
/**
* @covers Modules\Calendar\Models\Event
* @group module
*/
public function testSetGet() : void
public function testCreatedByInputOutput() : void
{
$event = new Event();
$this->event->setCreatedBy(new NullAccount(1));
self::assertEquals(1, $this->event->getCreatedBy()->getId());
}
$event->setCreatedBy(new NullAccount(1));
self::assertEquals(1, $event->getCreatedBy()->getId());
/**
* @covers Modules\Calendar\Models\Event
* @group module
*/
public function testCalendarInputOutput() : void
{
$this->event->calendar = 99;
self::assertEquals(99, $this->event->calendar);
}
$event->name = 'Name';
self::assertEquals('Name', $event->name);
/**
* @covers Modules\Calendar\Models\Event
* @group module
*/
public function testNameInputOutput() : void
{
$this->event->name = 'Name';
self::assertEquals('Name', $this->event->name);
}
$event->description = 'Description';
self::assertEquals('Description', $event->description);
/**
* @covers Modules\Calendar\Models\Event
* @group module
*/
public function testDescriptionInputOutput() : void
{
$this->event->description = 'Description';
self::assertEquals('Description', $this->event->description);
}
$event->addPerson(new Account());
$event->addPerson(new Account());
$success = $event->removePerson(99);
/**
* @covers Modules\Calendar\Models\Event
* @group module
*/
public function testPersonInputOutput() : void
{
$this->event->addPerson(new Account());
self::assertCount(1, $this->event->getPeople());
}
/**
* @covers Modules\Calendar\Models\Event
* @group module
*/
public function testPersonRemove() : void
{
$this->event->addPerson(new Account());
$this->event->addPerson(new Account());
$success = $this->event->removePerson(99);
self::assertFalse($success);
$success = $event->removePerson(0);
$success = $this->event->removePerson(0);
self::assertTrue($success);
}
/**
* @covers Modules\Calendar\Models\Event
* @group module
*/
public function testTypeInputOutput() : void
{
$this->event->setType(EventType::TEMPLATE);
self::assertEquals(EventType::TEMPLATE, $this->event->getType());
}
/**
* @covers Modules\Calendar\Models\Event
* @group module
*/
public function testStatusInputOutput() : void
{
$this->event->setStatus(EventStatus::INACTIVE);
self::assertEquals(EventStatus::INACTIVE, $this->event->getStatus());
}
/**
* @covers Modules\Calendar\Models\Event
* @group module
*/
public function testTagInputOutput() : void
{
$tag = new Tag();
$tag->setL11n('Tag');
$this->event->addTag($tag);
self::assertEquals($tag, $this->event->getTag(0));
self::assertCount(1, $this->event->getTags());
}
/**
* @covers Modules\Calendar\Models\Event
* @group module
*/
public function testTagRemove() : void
{
$tag = new Tag();
$tag->setL11n('Tag');
$this->event->addTag($tag);
self::assertTrue($this->event->removeTag(0));
self::assertCount(0, $this->event->getTags());
self::assertFalse($this->event->removeTag(0));
}
}

View File

@ -0,0 +1,42 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Calendar\tests\Models;
use Modules\Calendar\Models\NullCalendar;
/**
* @internal
*/
final class Null extends \PHPUnit\Framework\TestCase
{
/**
* @covers Modules\Calendar\Models\NullCalendar
* @group framework
*/
public function testNull() : void
{
self::assertInstanceOf('\Modules\Calendar\Models\Calendar', new NullCalendar());
}
/**
* @covers Modules\Calendar\Models\NullCalendar
* @group framework
*/
public function testId() : void
{
$null = new NullCalendar(2);
self::assertEquals(2, $null->getId());
}
}

View File

@ -0,0 +1,42 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Calendar\tests\Models;
use Modules\Calendar\Models\NullCalendar;
/**
* @internal
*/
final class NullCalendarTest extends \PHPUnit\Framework\TestCase
{
/**
* @covers Modules\Calendar\Models\NullCalendar
* @group framework
*/
public function testNull() : void
{
self::assertInstanceOf('\Modules\Calendar\Models\Calendar', new NullCalendar());
}
/**
* @covers Modules\Calendar\Models\NullCalendar
* @group framework
*/
public function testId() : void
{
$null = new NullCalendar(2);
self::assertEquals(2, $null->getId());
}
}

View File

@ -0,0 +1,42 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Calendar\tests\Models;
use Modules\Calendar\Models\NullEvent;
/**
* @internal
*/
final class NullEventTest extends \PHPUnit\Framework\TestCase
{
/**
* @covers Modules\Calendar\Models\NullEvent
* @group framework
*/
public function testNull() : void
{
self::assertInstanceOf('\Modules\Calendar\Models\Event', new NullEvent());
}
/**
* @covers Modules\Calendar\Models\NullEvent
* @group framework
*/
public function testId() : void
{
$null = new NullEvent(2);
self::assertEquals(2, $null->getId());
}
}

View File

@ -0,0 +1,42 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Calendar\tests\Models;
use Modules\Calendar\Models\NullSchedule;
/**
* @internal
*/
final class Null extends \PHPUnit\Framework\TestCase
{
/**
* @covers Modules\Calendar\Models\NullSchedule
* @group framework
*/
public function testNull() : void
{
self::assertInstanceOf('\Modules\Calendar\Models\Schedule', new NullSchedule());
}
/**
* @covers Modules\Calendar\Models\NullSchedule
* @group framework
*/
public function testId() : void
{
$null = new NullSchedule(2);
self::assertEquals(2, $null->getId());
}
}

View File

@ -0,0 +1,42 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Calendar\tests\Models;
use Modules\Calendar\Models\NullSchedule;
/**
* @internal
*/
final class NullScheduleTest extends \PHPUnit\Framework\TestCase
{
/**
* @covers Modules\Calendar\Models\NullSchedule
* @group framework
*/
public function testNull() : void
{
self::assertInstanceOf('\Modules\Calendar\Models\Schedule', new NullSchedule());
}
/**
* @covers Modules\Calendar\Models\NullSchedule
* @group framework
*/
public function testId() : void
{
$null = new NullSchedule(2);
self::assertEquals(2, $null->getId());
}
}