public function testName() { $withoutName = new Calendar(); $this->assertSame('', $withoutName->getName()); $withName = new Calendar('test name'); $this->assertSame('test name', $withName->getName()); }
public function testCalendarRelation() { $calendar = new Calendar(); $event = $this->createEvent(); $this->assertCount(0, $calendar->getEvents()); $this->assertNull($event->getCalendar()); $event->setCalendar($calendar); $this->assertSame($calendar, $event->getCalendar()); $this->assertSame($event, $calendar->getEvents()[0]); }
/** * Compute filename, use given name if any, or fallback on calendar name * @param CalendarModel $mdoel * @param \Application\Model\Calendar $calendar */ private function buildFilename(CalendarModel $mdoel, \Application\Model\Calendar $calendar) { $this->filename = $mdoel->getVariable('filename'); if (!$this->filename) { $this->filename = $calendar->getName(); } if (!preg_match('/\\.ics$/', $this->filename)) { $this->filename .= '.ics'; } }
/** * @param string $filename * @param string $expectedName * @return Event[] */ private function import($filename, $expectedName) { $entityManagerMock = $this->getMock(\Doctrine\ORM\EntityManager::class, ['persist', 'flush'], [], '', false); $importer = new Importer(); $importer->setEntityManager($entityManagerMock); $calendar = new Calendar(); $calendar->setUrl(realpath($filename)); $this->assertEmpty($calendar->getEvents()); $importer->import($calendar); $this->assertSame($expectedName, $calendar->getName()); // Sort events $events = $calendar->getEvents()->toArray(); usort($events, function ($event1, $event2) { return $event1->compare($event2); }); return $events; }
public function testUserRelation() { $userCalendar = new UserCalendar(); $user = new User(); $calendar = new Calendar(); $this->assertCount(0, $user->getUserCalendars(), 'collection is initialized on creation'); $this->assertCount(0, $calendar->getUserCalendars(), 'collection is initialized on creation'); $this->assertCount(0, $calendar->getUsers(), 'collection is initialized on creation'); $userCalendar->setUser($user); $userCalendar->setCalendar($calendar); $this->assertCount(1, $user->getUserCalendars(), 'user must be notified when userCalendar is added'); $this->assertSame($userCalendar, $user->getUserCalendars()->first(), 'original userCalendar can be retrieved from user'); $this->assertCount(1, $calendar->getUserCalendars(), 'calendar must be notified when userCalendar is added'); $this->assertSame($userCalendar, $calendar->getUserCalendars()->first(), 'original userCalendar can be retrieved from calendar'); $this->assertCount(1, $calendar->getUsers(), 'the user must now be the only one directly accessible'); $this->assertSame($user, $calendar->getUsers()->first(), 'the user must be directly accessible'); }
public function testStuff() { $entityManagerMock = $this->getMock(\Doctrine\ORM\EntityManager::class, ['persist', 'flush'], [], '', false); $importer = new Importer(); $importer->setEntityManager($entityManagerMock); $calendar = new Calendar(); $calendar->setUrl('tests/data/calendar.ics'); $importer->import($calendar); $place = new Place(['fr' => 'The Rock, Zamzibar']); $place->setLocation(new \CrEOF\Spatial\PHP\Types\Geography\Point(39.519313, -6.152079)); $calendar->setPlace($place); $renderer = new CalendarRenderer(); $viewModel = new CalendarModel($calendar); $actual = $renderer->render($viewModel); // Log actual result for easier comparison when debugging @mkdir('logs/tests'); file_put_contents('logs/tests/export.ics', $actual); $expected = file_get_contents('tests/data/export.ics'); $this->assertSame($expected, $actual); }
private function importEvents(Calendar $calendar, VCalendar $document) { // Prepare by deleting all existing events foreach ($calendar->getEvents() as $event) { $this->getEntityManager()->remove($event); } $calendar->getEvents()->clear(); // Abort if there is no events at all if (!$document->VEVENT) { return; } // First, import only originals, because we want to save RRULE before it is destroyed when expanding $originals = []; foreach ($document->VEVENT as $vevent) { if (!$vevent->__get('RECURRENCE-ID')) { $event = $this->importEvent($calendar, $vevent); $originals[$event->getUid()] = $event; } } // Expand repetitions 2 month in the past and 1 year in the future $now = Utility::getNow(); $start = $now->sub(new \DateInterval('P2M')); $end = $now->add(new \DateInterval('P1Y')); // Then we expand recurent rules $expandedDocument = $document->expand($start, $end); // Abort if there is no repetitions at all if (!$expandedDocument->VEVENT) { return; } // Finally re-import, but this time only the recurrent things foreach ($expandedDocument->VEVENT as $vevent) { $original = $this->findOriginal($originals, $vevent); if ($original) { $repetition = $this->importEvent($calendar, $vevent); $repetition->setOriginal($original); } } }
/** * Set calendar * @param Calendar $calendar * @return self */ public function setCalendar(Calendar $calendar) { $this->calendar = $calendar; $this->calendar->eventAdded($this); return $this; }
/** * Returns calendar * @return self */ public function setCalendar(Calendar $calendar) { $this->calendar = $calendar; $calendar->userCalendarAdded($this); return $this; }