/**
  * testXMozSnooze
  * 
  * @see 0007682: CalDav - Tine - Thunderbird - Palm Pre
  */
 public function testXMozSnooze()
 {
     $vcalendarStream = Calendar_Frontend_WebDAV_EventTest::getVCalendar(dirname(__FILE__) . '/../../../Import/files/lightning_snooze.ics');
     $converter = Tasks_Convert_Task_VCalendar_Factory::factory(Tasks_Convert_Task_VCalendar_Factory::CLIENT_THUNDERBIRD);
     $event = $converter->toTine20Model($vcalendarStream);
     $this->assertTrue(isset($event->attendee[0]->alarm_snooze_time));
     $this->assertEquals('2013-04-12 06:24:46', $event->attendee[0]->alarm_snooze_time->toString());
 }
 /**
  * testXMozAckExdate
  * 
  * @see 0009396: alarm_ack_time and alarm_snooze_time are not updated
  */
 public function testXMozAckExdate()
 {
     $vcalendarStream = Calendar_Frontend_WebDAV_EventTest::getVCalendar(dirname(__FILE__) . '/../../../Import/files/lightning_repeating_exdate_mozlastack.ics');
     $converter = Calendar_Convert_Event_VCalendar_Factory::factory(Calendar_Convert_Event_VCalendar_Factory::CLIENT_THUNDERBIRD);
     $event = $converter->toTine20Model($vcalendarStream);
     $this->assertEquals(1, count($event->alarms));
     $alarmOptions = Zend_Json::decode($event->alarms->getFirstRecord()->options);
     $alarmAckIndex = 'acknowledged-' . Tinebase_Core::getUser()->contact_id;
     $this->assertTrue(array_key_exists($alarmAckIndex, $alarmOptions), 'did not find index ' . $alarmAckIndex . ' in ' . print_r($alarmOptions, true));
     $this->assertEquals('2014-01-08 15:01:54', $alarmOptions[$alarmAckIndex]);
 }
 /**
  * save ics test event
  * 
  * @param string $filename
  * @param string $client
  * @return Calendar_Model_Event
  */
 protected function _saveIcsEvent($filename, $client = Calendar_Convert_Event_VCalendar_Factory::CLIENT_GENERIC)
 {
     $vcalendarStream = Calendar_Frontend_WebDAV_EventTest::getVCalendar(dirname(__FILE__) . '/../../../Import/files/' . $filename, 'r');
     $this->_converter = Calendar_Convert_Event_VCalendar_Factory::factory($client);
     $event = $this->_converter->toTine20Model($vcalendarStream);
     return Calendar_Controller_MSEventFacade::getInstance()->create($event);
 }
 /**
  * createRecurringCalDavEvent
  * 
  * @return Calendar_Frontend_WebDAV_Event
  */
 protected function _createRecurringCalDavEvent()
 {
     $_SERVER['HTTP_USER_AGENT'] = 'Mac_OS_X/10.9 (13A603) CalendarAgent/174';
     self::flushMailer();
     $vcalendar = Calendar_Frontend_WebDAV_EventTest::getVCalendar(dirname(__FILE__) . '/../Import/files/apple_ical_remind_part1.ics');
     $id = Tinebase_Record_Abstract::generateUID();
     $event = Calendar_Frontend_WebDAV_Event::create($this->_getTestCalendar(), "{$id}.ics", $vcalendar);
     return $event;
 }
 /**
  * testExternalInvitationRequestProcess
  */
 public function testExternalInvitationRequestProcess()
 {
     $ics = Calendar_Frontend_WebDAV_EventTest::getVCalendar(dirname(__FILE__) . '/files/invitation_request_external.ics');
     $ics = preg_replace('#DTSTART;VALUE=DATE-TIME;TZID=Europe/Berlin:20111121T130000#', 'DTSTART;VALUE=DATE-TIME;TZID=Europe/Berlin:' . Tinebase_DateTime::now()->addHour(1)->format('Ymd\\THis'), $ics);
     $ics = preg_replace('#DTEND;VALUE=DATE-TIME;TZID=Europe/Berlin:20111121T140000#', 'DTEND;VALUE=DATE-TIME;TZID=Europe/Berlin:' . Tinebase_DateTime::now()->addHour(2)->format('Ymd\\THis'), $ics);
     $iMIP = new Calendar_Model_iMIP(array('id' => Tinebase_Record_Abstract::generateUID(), 'ics' => $ics, 'method' => 'REQUEST', 'originator' => '*****@*****.**'));
     Calendar_Controller_EventNotificationsTests::flushMailer();
     $result = $this->_iMIPFrontendMock->process($iMIP, Calendar_Model_Attender::STATUS_ACCEPTED);
     $this->_iMIPFrontend->prepareComponent($iMIP);
     $this->_eventIdsToDelete[] = $iMIP->event->getId();
     // assert external organizer
     $this->assertEquals('*****@*****.**', $iMIP->event->organizer->email, 'wrong organizer');
     $this->assertTrue(empty($iMIP->event->organizer->account_id), 'organizer must not have an account');
     // assert attendee
     $ownAttendee = Calendar_Model_Attender::getOwnAttender($iMIP->event->attendee);
     $this->assertTrue(!!$ownAttendee, 'own attendee missing');
     $this->assertEquals(5, count($iMIP->event->attendee), 'all attendee must be keeped');
     $this->assertEquals(Calendar_Model_Attender::STATUS_ACCEPTED, $ownAttendee->status, 'must be ACCEPTED');
     // assert no status authkey for external attendee
     foreach ($iMIP->event->attendee as $attendee) {
         if (!$attendee->user_id->account_id) {
             $this->assertFalse(!!$attendee->user_id->status_authkey, 'authkey should be skipped');
         }
     }
     // assert REPLY message to organizer only
     $smtpConfig = Tinebase_Config::getInstance()->get(Tinebase_Config::SMTP);
     if (isset($smtpConfig->from) && !empty($smtpConfig->from)) {
         $messages = Calendar_Controller_EventNotificationsTests::getMessages();
         $this->assertEquals(1, count($messages), 'exactly one mail should be send');
         $this->assertTrue(in_array('*****@*****.**', $messages[0]->getRecipients()), 'organizer is not a receipient');
         $this->assertContains('accepted', $messages[0]->getSubject(), 'wrong subject');
         $this->assertContains('METHOD:REPLY', var_export($messages[0], TRUE), 'method missing');
         $this->assertContains('SEQUENCE:0', var_export($messages[0], TRUE), 'external sequence has not been keepted');
     }
 }