}
+CalDAVServerResult CalDAV::EditEntry(string *CalendarEntryHREF, string *EntryData, string *EntryETag){
+
+ // Edit an entry in the calendar collection.
+
+ // Add an entry to the calendar collection.
+
+ CalDAVServerResult ServerResult;
+ CalDAVSendData EntryAddSendData;
+
+ // Build the calendar list address.
+
+ string EntryAddURLAddress = BuildServerAddress(&ConnectionData, (*CalendarEntryHREF));
+
+ EntryAddSendData.readptr = EntryData;
+ EntryAddSendData.sizeleft = EntryData->size();
+
+ string IfMatchHeader = "If-Match: \"";
+ IfMatchHeader.append(*EntryETag);
+ IfMatchHeader.append("\"");
+
struct curl_slist *CalendarRequestHeader = NULL;
CalendarRequestHeader = curl_slist_append(CalendarRequestHeader, "Content-Type: text/calendar; charset=utf-8");
+ CalendarRequestHeader = curl_slist_append(CalendarRequestHeader, IfMatchHeader.c_str());
curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, CalendarRequestHeader);
curl_easy_setopt(ConnectionHandle, CURLOPT_URL, EntryAddURLAddress.c_str());
ASSERT_EQ(CURLE_OK, ConnResult.Code);
}
+
+TEST(CalDAV, EditEntry){
+
+ // Check that EntryCalendarHREFProcessing is not blank.
+
+ ASSERT_NE("", EntryCalendarHREFProcessing);
+
+ CalDAVConnectionData ConnNormal;
+ string CurrentUserPrincipal;
+
+ bool ValidDataNormal = false;
+
+ // Attempt to read the caldavtest.auth file.
+
+ ProcessConnectionDataFileResult DataFileResult = ProcessConnectionDataFile("caldavtest.auth", &ConnNormal);
+ if (DataFileResult == PROCESSCONNECTIONDATAFILE_OK){
+ ValidDataNormal = true;
+ }
+
+ ASSERT_EQ(true, ValidDataNormal);
+
+ // Setup the connection.
+
+ CalDAV ServerConnection;
+
+ ServerConnection.SetupConnectionData(&ConnNormal);
+
+ // Verify the connection settings.
+
+ CalDAVStatus CalDAVStatus = ServerConnection.GetConnectionData();
+
+ ASSERT_EQ(CalDAVStatus.Hostname, ConnNormal.Hostname);
+ ASSERT_EQ(CalDAVStatus.Username, ConnNormal.Username);
+ ASSERT_EQ(CalDAVStatus.Port, ConnNormal.Port);
+ ASSERT_EQ(CalDAVStatus.Prefix, ConnNormal.Prefix);
+ ASSERT_EQ(CalDAVStatus.UseSSL, ConnNormal.UseSSL);
+
+ // Connect to the server.
+
+ CalDAVServerResult ConnResult = ServerConnection.Connect();
+
+ EXPECT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(200, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
+ // Check that the server supports CalDAV.
+
+ CalDAVServerSupport ConnSupport = ServerConnection.GetServerSupport();
+ ConnResult = ServerConnection.GetServerResult();
+
+ EXPECT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(200, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+ ASSERT_EQ(true, ConnSupport.BasicSupport);
+
+ // Get the list of calendars.
+
+ CalDAVCalendarList CalendarList = ServerConnection.GetCalendars();
+
+ // Check the response result from the server.
+
+ ConnResult = ServerConnection.GetServerResult();
+
+ EXPECT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(207, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
+ // Get the entry entity tag.
+
+ string ETagValue;
+
+ ConnResult = ServerConnection.GetEntryETag(&EntryCalendarHREFProcessing, &ETagValue);
+
+ EXPECT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(207, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
+ // Update the contact with new information.
+
+ string EditEntryData = "BEGIN:VCALENDAR\n"
+ "VERSION:2.0\n"
+ "PRODID:-//Xestia//Calendar Unit Testing//KW\n"
+ "BEGIN:VEVENT\n"
+ "UID:";
+ EditEntryData += EntryUUID;
+ EditEntryData += "\n"
+ "DTSTAMP:20160116T190200Z\n"
+ "DTSTART:20160116T190200Z\n"
+ "DTEND:20160116T190200Z\n"
+ "SUMMARY:Unit Test Event 1 which has to be a really long summary as we don't k\n"
+ " now if multiple line processing is going to work without it. I mean seriousl\n"
+ " y, how annoying can this potentially be?\n"
+ "END:VEVENT\n"
+ "END:VCALENDAR\n";
+
+ ConnResult = ServerConnection.EditEntry(&EntryCalendarHREFProcessing, &EditEntryData, &ETagValue);
+
+ EXPECT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(204, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
}