1 // xestiacalendar_icalfreebusyload.h - Xestia Calendar iCalendar FreeBusy Component Unit Tests
3 // (c) 2016-2017 Xestia Software Development.
5 // This file is part of Xestia Calendar.
7 // Xestia Calendar is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by the
9 // Free Software Foundation, version 3 of the license.
11 // Xestia Calendar is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with Xestia Calendar. If not, see <http://www.gnu.org/licenses/>
19 #include "CalendarFreeBusy.h"
20 #include <gtest/gtest.h>
22 class iCalendarFreeBusyLoadTests : public ::testing::Test
29 virtual void TearDown()
34 TEST_F(iCalendarFreeBusyLoadTests, DISABLED_BasicTests){
36 CalendarFreeBusyObject testFreeBusy;
38 ASSERT_EQ(CALENDAROBJECTLOAD_MISSING, testFreeBusy.LoadFile("iCalendarFreeBusy-Missing.vcf"));
39 ASSERT_EQ(CALENDAROBJECTLOAD_CANNOTOPEN, testFreeBusy.LoadFile("iCalendarFreeBusy-InvalidPermissions.vcf"));
40 ASSERT_EQ(CALENDAROBJECTLOAD_OK, testFreeBusy.LoadFile("iCalendarFreeBusy-Load1.vcf"));
44 TEST_F(iCalendarFreeBusyLoadTests, ObjectDataTests){
46 CalendarFreeBusyObject testFreeBusy;
47 ASSERT_EQ(CALENDAROBJECTLOAD_OK, testFreeBusy.LoadFile("iCalendarFreeBusy-Load2.vcf"));
48 ASSERT_EQ(CALENDAROBJECTVALID_OK, testFreeBusy.ValidBaseObject());
52 ASSERT_EQ("20160131T173000Z", testFreeBusy.dateTimeStampData);
53 ASSERT_EQ("OTHER=PARAM", testFreeBusy.dateTimeStampTokens);
57 ASSERT_EQ("b3a16392-ad86-4061-be53-c215af2306ff", testFreeBusy.uniqueID);
58 ASSERT_EQ("UNIQUEPARAM=CERTAINLY;OKAY=MAYBENOT", testFreeBusy.uniqueIDTokens);
62 std::string contactData;
63 std::string contactDataAltRep;
64 std::string contactDataLanguage;
65 std::string contactDataTokens;
67 if (testFreeBusy.contactList.size() > 0){
69 contactData = testFreeBusy.contactList[0];
73 if (testFreeBusy.contactList.size() > 0){
75 contactDataAltRep = testFreeBusy.contactListAltRep[0];
79 if (testFreeBusy.contactList.size() > 0){
81 contactDataLanguage = testFreeBusy.contactListLanguage[0];
85 if (testFreeBusy.contactList.size() > 0){
87 contactDataTokens = testFreeBusy.contactListTokens[0];
91 ASSERT_EQ("Contact Person", contactData);
92 ASSERT_EQ("null:nodata", contactDataAltRep);
93 ASSERT_EQ("en-GB", contactDataLanguage);
94 ASSERT_EQ("EXAMPLE=TOKEN", contactDataTokens);
98 ASSERT_EQ("20160131T103000Z", testFreeBusy.dateTimeStartData);
99 ASSERT_EQ("DATE-TIME", testFreeBusy.dateTimeStartDataValue);
100 ASSERT_EQ("Europe/Truro", testFreeBusy.dateTimeStartDataTimeZoneID);
101 ASSERT_EQ("PARAMONE=YES;PARAMTWO=NO", testFreeBusy.dateTimeStartDataTokens);
105 ASSERT_EQ("20160131T183000Z", testFreeBusy.dateTimeEndData);
106 ASSERT_EQ("DATE-TIME", testFreeBusy.dateTimeEndDataValue);
107 ASSERT_EQ("Europe/Truro", testFreeBusy.dateTimeEndDataTimeZoneID);
108 ASSERT_EQ("PARAMFOUR=YES;PARAMTHREE=NO", testFreeBusy.dateTimeEndDataTokens);
110 // Tests for ORGANIZER.
112 ASSERT_EQ("mailto:organiser@example.com", testFreeBusy.organiserData);
113 ASSERT_EQ("ExampleOrganiser", testFreeBusy.organiserDataCommonName);
114 ASSERT_EQ("null:nodata", testFreeBusy.organiserDataDirectoryEntry);
115 ASSERT_EQ("mailto:organiser.noreply@example.com", testFreeBusy.organiserDataSentByParam);
116 ASSERT_EQ("kw", testFreeBusy.organiserDataLanguage);
117 ASSERT_EQ("HAPPY=DAYS", testFreeBusy.organiserDataTokens);
121 ASSERT_EQ("http://www.example.com/", testFreeBusy.urlData);
122 ASSERT_EQ("EXTERNAL=YES", testFreeBusy.urlDataTokens);
124 // Tests for ATTENDEE. First ATTENDEE property.
126 std::string attendeeDataMember;
127 std::string attendeeDataDelegatedFrom;
128 std::string attendeeDataDelegatedTo;
129 std::string attendeeDataRole;
130 std::string attendeeDataRSVP;
131 std::string attendeeDataDirectoryEntry;
132 std::string attendeeDataSentBy;
133 std::string attendeeDataCommonName;
134 std::string attendeeDataCalendarUserType;
135 std::string attendeeDataParticipationStatus;
136 std::string attendeeDataLanguage;
137 std::string attendeeDataTokens;
138 std::string attendeeData;
140 if (testFreeBusy.attendeeList.begin() != testFreeBusy.attendeeList.end()){
142 attendeeData = testFreeBusy.attendeeList[0];
146 ASSERT_EQ("Attendee One", attendeeData);
148 // Second ATTENDEE property.
150 attendeeData.clear();
152 if (testFreeBusy.attendeeList.size() > 1){
154 attendeeData = testFreeBusy.attendeeList[1];
158 if (testFreeBusy.attendeeList.size() > 1){
160 attendeeDataDelegatedFrom = testFreeBusy.attendeeListDelegatedFrom[1];
164 if (testFreeBusy.attendeeList.size() > 1){
166 attendeeDataDelegatedTo = testFreeBusy.attendeeListDelegatedTo[1];
170 if (testFreeBusy.attendeeList.size() > 1){
172 attendeeDataRole = testFreeBusy.attendeeListRole[1];
176 if (testFreeBusy.attendeeList.size() > 1){
178 attendeeDataRSVP = testFreeBusy.attendeeListRSVP[1];
182 ASSERT_EQ("Attendee Two", attendeeData);
183 ASSERT_EQ("mailto:delegated.from@example.com", attendeeDataDelegatedFrom);
184 ASSERT_EQ("mailto:delegated.to@example.com", attendeeDataDelegatedTo);
185 ASSERT_EQ("CHAIR", attendeeDataRole);
186 ASSERT_EQ("TRUE", attendeeDataRSVP);
188 // Third ATTENDEE property.
190 attendeeData.clear();
192 if (testFreeBusy.attendeeList.size() > 2){
194 attendeeData = testFreeBusy.attendeeList[2];
198 if (testFreeBusy.attendeeList.size() > 2){
200 attendeeDataDirectoryEntry = testFreeBusy.attendeeListDirectoryEntry[2];
204 if (testFreeBusy.attendeeList.size() > 2){
206 attendeeDataSentBy = testFreeBusy.attendeeListSentBy[2];
210 if (testFreeBusy.attendeeList.size() > 2){
212 attendeeDataCommonName = testFreeBusy.attendeeListCommonName[2];
216 if (testFreeBusy.attendeeList.size() > 2){
218 attendeeDataCalendarUserType = testFreeBusy.attendeeListCalendarUserType[2];
222 if (testFreeBusy.attendeeList.size() > 2){
224 attendeeDataParticipationStatus = testFreeBusy.attendeeListParticipationStatus[2];
228 if (testFreeBusy.attendeeList.size() > 2){
230 attendeeDataLanguage = testFreeBusy.attendeeListLanguage[2];
234 if (testFreeBusy.attendeeList.size() > 2){
236 attendeeDataTokens = testFreeBusy.attendeeListTokens[2];
240 ASSERT_EQ("Attendee Three", attendeeData);
241 ASSERT_EQ("null:nodata", attendeeDataDirectoryEntry);
242 ASSERT_EQ("mailto:sent.by@example.com", attendeeDataSentBy);
243 ASSERT_EQ("Attendee The Third", attendeeDataCommonName);
244 ASSERT_EQ("INDIVIDUAL", attendeeDataCalendarUserType);
245 ASSERT_EQ("ACCEPTED", attendeeDataParticipationStatus);
246 ASSERT_EQ("kw", attendeeDataLanguage);
247 ASSERT_EQ("EXAMPLE=DATA", attendeeDataTokens);
249 // Get the first COMMENT.
251 std::string commentData;
253 if (testFreeBusy.commentList.begin() != testFreeBusy.commentList.end()){
255 commentData = testFreeBusy.commentList[0];
259 ASSERT_EQ("This is the first comment.", commentData);
261 // Get the second COMMENT.
265 std::string commentDataAltRep;
266 std::string commentDataLanguage;
268 if (testFreeBusy.commentList.size() > 1){
270 commentData = testFreeBusy.commentList[1];
274 if (testFreeBusy.commentList.size() > 1){
276 commentDataAltRep = testFreeBusy.commentListAltRep[1];
280 if (testFreeBusy.commentList.size() > 1){
282 commentDataLanguage = testFreeBusy.commentListLanguage[1];
286 ASSERT_EQ("This is the second comment.", commentData);
287 ASSERT_EQ("null:nodata", commentDataAltRep);
288 ASSERT_EQ("en", commentDataLanguage);
290 // Get the third COMMENT.
294 std::string commentDataTokens;
296 if (testFreeBusy.commentList.size() > 2){
298 commentData = testFreeBusy.commentList[2];
302 if (testFreeBusy.commentList.size() > 2){
304 commentDataTokens = testFreeBusy.commentListTokens[2];
308 ASSERT_EQ("This is the third comment.", commentData);
309 ASSERT_EQ("ZEBRAS=YES", commentDataTokens);
311 // Get the first FREEBUSY.
313 std::string freeBusyData;
315 if (testFreeBusy.freeBusyList.begin() != testFreeBusy.freeBusyList.end()){
317 freeBusyData = testFreeBusy.freeBusyList[0];
321 ASSERT_EQ("20160202T210000Z/PT1H", freeBusyData);
323 // Get the second FREEBUSY.
325 freeBusyData.clear();
327 std::string freeBusyType;
329 if (testFreeBusy.freeBusyList.size() > 1){
331 freeBusyData = testFreeBusy.freeBusyList[1];
335 if (testFreeBusy.freeBusyListType.size() > 1){
337 freeBusyType = testFreeBusy.freeBusyListType[1];
341 ASSERT_EQ("FREE", freeBusyType);
342 ASSERT_EQ("20160202T220000Z/PT1H", freeBusyData);
344 // Get the third FREEBUSY.
346 freeBusyData.clear();
347 freeBusyType.clear();
349 std::string FreeBusyTokens;
351 if (testFreeBusy.freeBusyList.size() > 2){
353 freeBusyData = testFreeBusy.freeBusyList[2];
357 if (testFreeBusy.freeBusyListType.size() > 2){
359 freeBusyType = testFreeBusy.freeBusyListType[2];
363 if (testFreeBusy.freeBusyListTokens.size() > 2){
365 FreeBusyTokens = testFreeBusy.freeBusyListTokens[2];
369 ASSERT_EQ("BUSY-UNAVAILABLE", freeBusyType);
370 ASSERT_EQ("20160202T230000Z/PT9H", freeBusyData);
371 ASSERT_EQ("RESULT=ARGH;TEST=YES", FreeBusyTokens);
373 // Get the first REQUEST-STATUS.
375 std::string requestStatus;
377 if (testFreeBusy.requestStatusData.begin() != testFreeBusy.requestStatusData.end()){
379 requestStatus = testFreeBusy.requestStatusData[0];
383 ASSERT_EQ("2.0;Success", requestStatus);
385 // Get the second REQUEST-STATUS.
387 requestStatus.clear();
389 std::string requestLanguage;
391 if (testFreeBusy.requestStatusData.size() > 1){
393 requestStatus = testFreeBusy.requestStatusData[1];
397 if (testFreeBusy.requestStatusData.size() > 1){
399 requestLanguage = testFreeBusy.requestStatusLanguage[1];
403 ASSERT_EQ("3.42;Really big irrecoverable error caused by the user", requestStatus);
404 ASSERT_EQ("en", requestLanguage);
406 // Get the third REQUEST-STATUS.
408 requestStatus.clear();
410 std::string requestTokens;
412 if (testFreeBusy.requestStatusData.size() > 2){
414 requestStatus = testFreeBusy.requestStatusData[2];
418 if (testFreeBusy.requestStatusData.size() > 2){
420 requestTokens = testFreeBusy.requestStatusTokens[2];
424 ASSERT_EQ("3.7;Invalid calendar user", requestStatus);
425 ASSERT_EQ("USER=MISSING", requestTokens);
427 // Get the first X-EXAMPLE1 token.
429 std::string xTokenName;
430 std::string xTokenData;
432 if (testFreeBusy.xTokensData.size() != 0 ){
434 xTokenData = testFreeBusy.xTokensData[0];
438 if (testFreeBusy.xTokensData.size() != 0){
440 xTokenName = testFreeBusy.xTokensDataTokens[0];
444 ASSERT_EQ("Moo", xTokenData);
445 ASSERT_EQ("X-EXAMPLE1", xTokenName);
447 // Get the second X-EXAMPLE1 token.
452 if (testFreeBusy.xTokensData.size() > 1){
454 xTokenData = testFreeBusy.xTokensData[1];
458 if (testFreeBusy.xTokensData.size() > 1){
460 xTokenName = testFreeBusy.xTokensDataTokens[1];
464 ASSERT_EQ("Meep", xTokenData);
465 ASSERT_EQ("X-EXAMPLE1;ANIMAL=NOPE", xTokenName);
467 // Get the third X-EXAMPLE1 token.
472 if (testFreeBusy.xTokensData.size() > 2){
474 xTokenData = testFreeBusy.xTokensData[2];
478 if (testFreeBusy.xTokensData.size() > 2){
480 xTokenName = testFreeBusy.xTokensDataTokens[2];
484 ASSERT_EQ("Meow", xTokenData);
485 ASSERT_EQ("X-EXAMPLE1;ANIMAL=CAT", xTokenName);
487 // Get the first X-EXAMPLE2 token.
492 if (testFreeBusy.xTokensData.size() > 3){
494 xTokenData = testFreeBusy.xTokensData[3];
498 if (testFreeBusy.xTokensData.size() > 3){
500 xTokenName = testFreeBusy.xTokensDataTokens[3];
504 ASSERT_EQ("Dish", xTokenData);
505 ASSERT_EQ("X-EXAMPLE2", xTokenName);
507 // Get the second X-EXAMPLE2 token.
512 if (testFreeBusy.xTokensData.size() > 4){
514 xTokenData = testFreeBusy.xTokensData[4];
518 if (testFreeBusy.xTokensData.size() > 4){
520 xTokenName = testFreeBusy.xTokensDataTokens[4];
524 ASSERT_EQ("Fork", xTokenData);
525 ASSERT_EQ("X-EXAMPLE2;OBJECT=KITCHEN", xTokenName);
527 // Get the third X-EXAMPLE2 token.
532 if (testFreeBusy.xTokensData.size() > 5){
534 xTokenData = testFreeBusy.xTokensData[5];
538 if (testFreeBusy.xTokensData.size() > 5){
540 xTokenName = testFreeBusy.xTokensDataTokens[5];
544 ASSERT_EQ("Table", xTokenData);
545 ASSERT_EQ("X-EXAMPLE2;OBJECT=LIVINGROOM", xTokenName);
547 // Get the X-STATUS token.
552 if (testFreeBusy.xTokensData.size() > 6){
554 xTokenData = testFreeBusy.xTokensData[6];
558 if (testFreeBusy.xTokensData.size() > 6){
560 xTokenName = testFreeBusy.xTokensDataTokens[6];
564 ASSERT_EQ("Idle", xTokenData);
565 ASSERT_EQ("X-STATUS;HOLIDAY=YES", xTokenName);
567 // Get the X-TRANSPORT token.
572 if (testFreeBusy.xTokensData.size() > 7){
574 xTokenData = testFreeBusy.xTokensData[7];
578 if (testFreeBusy.xTokensData.size() > 7){
580 xTokenName = testFreeBusy.xTokensDataTokens[7];
584 ASSERT_EQ("Private Hire", xTokenData);
585 ASSERT_EQ("X-TRANSPORT;PUBLIC=NO", xTokenName);
587 // Get the X-PHANTOM-STATUS token.
592 if (testFreeBusy.xTokensData.size() > 8){
594 xTokenData = testFreeBusy.xTokensData[8];
598 if (testFreeBusy.xTokensData.size() > 8){
600 xTokenName = testFreeBusy.xTokensDataTokens[8];
604 ASSERT_EQ("None", xTokenData);
605 ASSERT_EQ("X-PHANTOM-STATUS;HELP=NONE", xTokenName);