From 285d122b21ac6749522bbbfcb65f05bbc77fd267 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philipp=20Sch=C3=BCle?=
Date: Mon, 15 Jan 2024 13:43:16 +0100
Subject: [PATCH] test(Calendar/Frontend/ActiveSync): change attendee status in
testConcurrentUpdateV2
---
.../Calendar/Frontend/ActiveSyncTest.php | 76 +++++++++++++------
1 file changed, 54 insertions(+), 22 deletions(-)
diff --git a/tests/tine20/Calendar/Frontend/ActiveSyncTest.php b/tests/tine20/Calendar/Frontend/ActiveSyncTest.php
index 792167ecd06..cf3bd98bdb0 100644
--- a/tests/tine20/Calendar/Frontend/ActiveSyncTest.php
+++ b/tests/tine20/Calendar/Frontend/ActiveSyncTest.php
@@ -850,7 +850,7 @@ public function testMeetingResponse($syncrotonFolder = null, $serverId = null, $
$meetingResponse = new Syncroton_Model_MeetingResponse($xml->Request[0]);
- $eventId = $controller->setAttendeeStatus($meetingResponse);
+ $controller->setAttendeeStatus($meetingResponse);
$tevent = Calendar_Controller_Event::getInstance()->get($serverId);
$ownAttendee = Calendar_Model_Attender::getOwnAttender($tevent->attendee);
@@ -935,18 +935,8 @@ public function testMeetingResponseWithExistingInstanceId()
$controller = Syncroton_Data_Factory::factory($this->_class, $this->_getDevice(Syncroton_Model_Device::TYPE_IPHONE), new Tinebase_DateTime(null, null, 'de_DE'));
- $XMLMeetingResponse = $this->_testXMLMeetingResponse;
-
- $thisYear = Tinebase_DateTime::now()->format('Y');
- $XMLMeetingResponse = str_replace('2012', $thisYear, $XMLMeetingResponse);
- $XMLMeetingResponse = str_replace('17', '' . $syncrotonFolder->serverId . '', $XMLMeetingResponse);
- $XMLMeetingResponse = str_replace('f0c79775b6b44be446f91187e24566aa1c5d06ab', '' . $serverId . '', $XMLMeetingResponse);
-
- $xml = new SimpleXMLElement($XMLMeetingResponse);
-
- $meetingResponse = new Syncroton_Model_MeetingResponse($xml->Request[0]);
-
- $eventId = $controller->setAttendeeStatus($meetingResponse);
+ $meetingResponse = $this->_getMeetingResponse($syncrotonFolder->serverId, $serverId);
+ $controller->setAttendeeStatus($meetingResponse);
$event = Calendar_Controller_MSEventFacade::getInstance()->get($serverId);
$instance = $event->exdate->filter('is_deleted', 0)->getFirstRecord();
@@ -954,6 +944,32 @@ public function testMeetingResponseWithExistingInstanceId()
$this->assertEquals(Calendar_Model_Attender::STATUS_TENTATIVE, $ownAttendee->status);
}
+
+ /**
+ * returns TENTATIVE meeting response to update with setAttendeeStatus
+ *
+ * @param string $collectionId
+ * @param string $serverId
+ * @param bool $removeInstanceId
+ * @return Syncroton_Model_MeetingResponse
+ * @throws Exception
+ */
+ protected function _getMeetingResponse(string $collectionId, string $serverId, bool $removeInstanceId = false): Syncroton_Model_MeetingResponse
+ {
+ $XMLMeetingResponse = $this->_testXMLMeetingResponse;
+
+ $thisYear = Tinebase_DateTime::now()->format('Y');
+ if ($removeInstanceId) {
+ $XMLMeetingResponse = str_replace('20121125T130000Z', '', $XMLMeetingResponse);
+ }
+ $XMLMeetingResponse = str_replace('2012', $thisYear, $XMLMeetingResponse);
+ $XMLMeetingResponse = str_replace('17', '' . $collectionId . '', $XMLMeetingResponse);
+ $XMLMeetingResponse = str_replace('f0c79775b6b44be446f91187e24566aa1c5d06ab', '' . $serverId . '', $XMLMeetingResponse);
+
+ $xml = new SimpleXMLElement($XMLMeetingResponse);
+
+ return new Syncroton_Model_MeetingResponse($xml->Request[0]);
+ }
public function testMeetingResponseWithNewInstanceId()
{
@@ -975,7 +991,7 @@ public function testMeetingResponseWithNewInstanceId()
$meetingResponse = new Syncroton_Model_MeetingResponse($xml->Request[0]);
- $eventId = $controller->setAttendeeStatus($meetingResponse);
+ $controller->setAttendeeStatus($meetingResponse);
$event = Calendar_Controller_MSEventFacade::getInstance()->get($serverId);
$event->exdate->sort('dtstart', 'DESC');
@@ -1576,7 +1592,7 @@ public function testPreserveDataOnCreateRecurException()
$syncTimestamp = Calendar_Controller_Event::getInstance()->get($serverId)->last_modified_time;
$controller = Syncroton_Data_Factory::factory($this->_class, $this->_getDevice(Syncroton_Model_Device::TYPE_IPHONE), $syncTimestamp);
- $serverId = $controller->updateEntry($syncrotonFolder->serverId, $serverId, $syncrotonEventtoUpdate);
+ $controller->updateEntry($syncrotonFolder->serverId, $serverId, $syncrotonEventtoUpdate);
$event = Calendar_Controller_Event::getInstance()->get($event->getId());
static::assertEquals(2, count($event->exdate), 'no exception created');
@@ -1629,14 +1645,14 @@ public function testAndroidNonOrganizerAttenderMeetingStatus()
* 3. Termin im Browser anpassen (Terminort + Teilnehmer ändern).
* 4. Termin im Handy anpassen(Summary etc.).
*/
- public function testConcurrentUpdateV2()
+ public function testConcurrentUpdateV2($testMeetingResponse = false)
{
$controller = Syncroton_Data_Factory::factory($this->_class, $this->_getDevice(Syncroton_Model_Device::TYPE_IPHONE), Tinebase_DateTime::now()->subDay(1));
$syncrotonFolder = $this->testCreateFolder();
$container = Tinebase_Container::getInstance()->getContainerById($syncrotonFolder->serverId);
- $event = ActiveSync_TestCase::getTestEvent($container);
+ $event = ActiveSync_TestCase::getTestEvent($container, addScleverAttendee: true);
$event = Calendar_Controller_Event::getInstance()->create($event);
$serverId = $event->getId();
@@ -1648,14 +1664,30 @@ public function testConcurrentUpdateV2()
$updatedEvent = Calendar_Controller_Event::getInstance()->update($event);
self::assertEquals($event->location, $updatedEvent->location);
- /* @var Syncroton_Model_Event $syncrotonEvent */
- $syncrotonEvent->subject = 'update on device';
- $controller->updateEntry($syncrotonFolder->serverId, $serverId, $syncrotonEvent);
+ if ($testMeetingResponse) {
+ $meetingResponse = $this->_getMeetingResponse($syncrotonFolder->serverId, $serverId, removeInstanceId: true);
+ $controller->setAttendeeStatus($meetingResponse);
+ } else {
+ /* @var Syncroton_Model_Event $syncrotonEvent */
+ $syncrotonEvent->subject = 'update on device';
+ $controller->updateEntry($syncrotonFolder->serverId, $serverId, $syncrotonEvent);
+ }
$updatedEvent = Calendar_Controller_Event::getInstance()->get($event->getId());
-
- self::assertEquals('update on device', $updatedEvent->summary);
self::assertEquals($event->location, $updatedEvent->location);
+
+ if ($testMeetingResponse) {
+ $attender = $updatedEvent->attendee->filter('user_id', Tinebase_Core::getUser()->contact_id)->getFirstRecord();
+ self::assertEquals(Calendar_Model_Attender::STATUS_TENTATIVE, $attender->status,
+ print_r($updatedEvent->toArray(), true));
+ } else {
+ self::assertEquals('update on device', $updatedEvent->summary);
+ }
+ }
+
+ public function testConcurrentUpdateMeetingResponse()
+ {
+ $this->testConcurrentUpdateV2(true);
}
}