diff --git a/Models/Calendar.php b/Models/Calendar.php index 02cc0cf..b44820f 100755 --- a/Models/Calendar.php +++ b/Models/Calendar.php @@ -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; } } diff --git a/Models/Event.php b/Models/Event.php index b1c7601..de11a0a 100755 --- a/Models/Event.php +++ b/Models/Event.php @@ -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. * diff --git a/Models/EventStatus.php b/Models/EventStatus.php index 54b43d2..9043261 100755 --- a/Models/EventStatus.php +++ b/Models/EventStatus.php @@ -27,4 +27,6 @@ use phpOMS\Stdlib\Base\Enum; abstract class EventStatus extends Enum { public const ACTIVE = 1; + + public const INACTIVE = 2; } diff --git a/Models/NullCalendar.php b/Models/NullCalendar.php index 82f1053..651fa35 100755 --- a/Models/NullCalendar.php +++ b/Models/NullCalendar.php @@ -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(); + } } diff --git a/Models/NullEvent.php b/Models/NullEvent.php index ecec4bf..3b9dd66 100755 --- a/Models/NullEvent.php +++ b/Models/NullEvent.php @@ -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(); + } } diff --git a/Models/NullSchedule.php b/Models/NullSchedule.php index 0b9e600..2cb4fc2 100755 --- a/Models/NullSchedule.php +++ b/Models/NullSchedule.php @@ -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(); + } } diff --git a/Models/Schedule.php b/Models/Schedule.php index 71a44d9..c667909 100755 --- a/Models/Schedule.php +++ b/Models/Schedule.php @@ -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; - } } diff --git a/tests/Models/CalendarMapperTest.php b/tests/Models/CalendarMapperTest.php index 0c511fb..46fb00f 100755 --- a/tests/Models/CalendarMapperTest.php +++ b/tests/Models/CalendarMapperTest.php @@ -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); diff --git a/tests/Models/CalendarTest.php b/tests/Models/CalendarTest.php index 87cf152..69204b3 100755 --- a/tests/Models/CalendarTest.php +++ b/tests/Models/CalendarTest.php @@ -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'))); } } diff --git a/tests/Models/EventMapperTest.php b/tests/Models/EventMapperTest.php index 43172e5..641d4ee 100755 --- a/tests/Models/EventMapperTest.php +++ b/tests/Models/EventMapperTest.php @@ -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()); diff --git a/tests/Models/EventTest.php b/tests/Models/EventTest.php index 53b48c3..d4c1d80 100755 --- a/tests/Models/EventTest.php +++ b/tests/Models/EventTest.php @@ -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)); + } } diff --git a/tests/Models/NullCalendar.php b/tests/Models/NullCalendar.php new file mode 100644 index 0000000..09df1e9 --- /dev/null +++ b/tests/Models/NullCalendar.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/NullCalendarTest.php b/tests/Models/NullCalendarTest.php new file mode 100644 index 0000000..c3183e5 --- /dev/null +++ b/tests/Models/NullCalendarTest.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/NullEventTest.php b/tests/Models/NullEventTest.php new file mode 100644 index 0000000..c9e9322 --- /dev/null +++ b/tests/Models/NullEventTest.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/NullSchedule.php b/tests/Models/NullSchedule.php new file mode 100644 index 0000000..5d3a0bb --- /dev/null +++ b/tests/Models/NullSchedule.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/NullScheduleTest.php b/tests/Models/NullScheduleTest.php new file mode 100644 index 0000000..47dfe01 --- /dev/null +++ b/tests/Models/NullScheduleTest.php @@ -0,0 +1,42 @@ +getId()); + } +}