Example #1
0
 public function testName()
 {
     $withoutName = new Calendar();
     $this->assertSame('', $withoutName->getName());
     $withName = new Calendar('test name');
     $this->assertSame('test name', $withName->getName());
 }
Example #2
0
 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]);
 }
Example #3
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';
     }
 }
Example #4
0
 /**
  * @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;
 }
Example #5
0
 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);
 }
Example #7
0
 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);
         }
     }
 }
Example #8
0
 /**
  * Set calendar
  * @param Calendar $calendar
  * @return self
  */
 public function setCalendar(Calendar $calendar)
 {
     $this->calendar = $calendar;
     $this->calendar->eventAdded($this);
     return $this;
 }
Example #9
0
 /**
  * Returns calendar
  * @return self
  */
 public function setCalendar(Calendar $calendar)
 {
     $this->calendar = $calendar;
     $calendar->userCalendarAdded($this);
     return $this;
 }