/** * testAddAlarm * * @see 0008230: added alarm to event on iOS 6.1 -> description removed */ public function testAddAlarm() { $syncrotonFolder = $this->testCreateFolder(); $event = ActiveSync_TestCase::getTestEvent(); $event->summary = 'testtermin'; $event->description = 'some text'; $event->dtstart = new Tinebase_DateTime('2013-10-22 16:00:00'); $event->dtend = new Tinebase_DateTime('2013-10-22 17:00:00'); $event = Calendar_Controller_Event::getInstance()->create($event); $xml = new SimpleXMLElement(' <ApplicationData> <Timezone xmlns="uri:Calendar">xP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAMAAAAAAAAAxP///w==</Timezone> <AllDayEvent xmlns="uri:Calendar">0</AllDayEvent> <BusyStatus xmlns="uri:Calendar">2</BusyStatus> <DtStamp xmlns="uri:Calendar">20131021T142015Z</DtStamp> <EndTime xmlns="uri:Calendar">20131022T170000Z</EndTime> <Reminder xmlns="uri:Calendar">60</Reminder> <Sensitivity xmlns="uri:Calendar">0</Sensitivity> <Subject xmlns="uri:Calendar">testtermin</Subject> <StartTime xmlns="uri:Calendar">20131022T160000Z</StartTime> <UID xmlns="uri:Calendar">' . $event->uid . '</UID> <MeetingStatus xmlns="uri:Calendar">1</MeetingStatus> <Attendees xmlns="uri:Calendar"> <Attendee> <Name>' . Tinebase_Core::getUser()->accountDisplayName . '</Name> <Email>' . Tinebase_Core::getUser()->accountEmailAddress . '</Email> <AttendeeType>1</AttendeeType> </Attendee> </Attendees> </ApplicationData> '); $syncrotonEvent = new Syncroton_Model_Event($xml); $controller = Syncroton_Data_Factory::factory($this->_class, $this->_getDevice(Syncroton_Model_Device::TYPE_IPHONE), $event->creation_time); $serverId = $controller->updateEntry($syncrotonFolder->serverId, $event->getId(), $syncrotonEvent); $updatedEvent = Calendar_Controller_Event::getInstance()->get($serverId); $this->assertEquals(1, count($updatedEvent->alarms)); $this->assertEquals($event->description, $updatedEvent->description, 'description mismatch: ' . print_r($updatedEvent->toArray(), true)); }
/** * test sync of existing events folder */ public function testPingForEvents() { $personalContainer = Tinebase_Container::getInstance()->getPersonalContainer(Tinebase_Core::getUser(), 'Calendar', Tinebase_Core::getUser(), Tinebase_Model_Grants::GRANT_EDIT)->getFirstRecord(); // first do a foldersync $doc = new DOMDocument(); $doc->loadXML('<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE AirSync PUBLIC "-//AIRSYNC//DTD AirSync//EN" "http://www.microsoft.com/"> <FolderSync xmlns="uri:FolderHierarchy"><SyncKey>0</SyncKey></FolderSync>'); $folderSync = new Syncroton_Command_FolderSync($doc, $this->_device, $this->_device->policykey); $folderSync->handle(); $folderSync->getResponse(); // request initial synckey $doc = new DOMDocument(); $doc->loadXML('<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE AirSync PUBLIC "-//AIRSYNC//DTD AirSync//EN" "http://www.microsoft.com/"> <Sync xmlns="uri:AirSync" xmlns:AirSyncBase="uri:AirSyncBase"><Collections><Collection><Class>Calendar</Class><SyncKey>0</SyncKey><CollectionId>' . $personalContainer->getId() . '</CollectionId><DeletesAsMoves/><GetChanges/><WindowSize>100</WindowSize><Options><FilterType>4</FilterType><AirSyncBase:BodyPreference><AirSyncBase:Type>1</AirSyncBase:Type><AirSyncBase:TruncationSize>5120</AirSyncBase:TruncationSize></AirSyncBase:BodyPreference><Conflict>1</Conflict></Options></Collection></Collections></Sync>'); $sync = new Syncroton_Command_Sync($doc, $this->_device, $this->_device->policykey); $sync->handle(); $syncDoc = $sync->getResponse(); #$syncDoc->formatOutput = true; echo $syncDoc->saveXML(); // now do the first sync $doc = new DOMDocument(); $doc->loadXML('<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE AirSync PUBLIC "-//AIRSYNC//DTD AirSync//EN" "http://www.microsoft.com/"> <Sync xmlns="uri:AirSync" xmlns:AirSyncBase="uri:AirSyncBase"><Collections><Collection><Class>Calendar</Class><SyncKey>1</SyncKey><CollectionId>' . $personalContainer->getId() . '</CollectionId><DeletesAsMoves/><GetChanges/><WindowSize>100</WindowSize><Options><FilterType>4</FilterType><AirSyncBase:BodyPreference><AirSyncBase:Type>1</AirSyncBase:Type><AirSyncBase:TruncationSize>5120</AirSyncBase:TruncationSize></AirSyncBase:BodyPreference><Conflict>1</Conflict></Options></Collection></Collections></Sync>'); $sync = new Syncroton_Command_Sync($doc, $this->_device, $this->_device->policykey); $sync->handle(); $syncDoc = $sync->getResponse(); #$syncDoc->formatOutput = true; echo $syncDoc->saveXML(); sleep(1); // add a test event $event = ActiveSync_TestCase::getTestEvent($personalContainer); $event = Calendar_Controller_Event::getInstance()->create($event); // and now we can start the ping request $doc = new DOMDocument(); $doc->loadXML('<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE AirSync PUBLIC "-//AIRSYNC//DTD AirSync//EN" "http://www.microsoft.com/"> <Ping xmlns="uri:Ping"><HeartBeatInterval>10</HeartBeatInterval><Folders><Folder><Id>' . $personalContainer->getId() . '</Id><Class>Calendar</Class></Folder></Folders></Ping>'); $ping = new Syncroton_Command_Ping($doc, $this->_device, null); $ping->handle(); $responseDoc = $ping->getResponse(); #$responseDoc->formatOutput = true; echo $responseDoc->saveXML(); $xpath = new DomXPath($responseDoc); $xpath->registerNamespace('Ping', 'uri:Ping'); $nodes = $xpath->query('//Ping:Ping/Ping:Status'); $this->assertEquals(1, $nodes->length, $responseDoc->saveXML()); $this->assertEquals(Syncroton_Command_Ping::STATUS_CHANGES_FOUND, $nodes->item(0)->nodeValue, $responseDoc->saveXML()); $nodes = $xpath->query('//Ping:Ping/Ping:Folders/Ping:Folder'); $this->assertEquals(1, $nodes->length, $responseDoc->saveXML()); $this->assertEquals($personalContainer->getId(), $nodes->item(0)->nodeValue, $responseDoc->saveXML()); }