// xestiacalendar_icalfreebusyload.h - Xestia Calendar iCalendar FreeBusy Component Unit Tests // // (c) 2016-2017 Xestia Software Development. // // This file is part of Xestia Calendar. // // Xestia Calendar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by the // Free Software Foundation, version 3 of the license. // // Xestia Calendar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with Xestia Calendar. If not, see #include "CalendarFreeBusy.h" #include class iCalendarFreeBusyLoadTests : public ::testing::Test { private: virtual void SetUp() { } virtual void TearDown() { } }; TEST_F(iCalendarFreeBusyLoadTests, DISABLED_BasicTests){ CalendarFreeBusyObject testFreeBusy; ASSERT_EQ(CALENDAROBJECTLOAD_MISSING, testFreeBusy.LoadFile("iCalendarFreeBusy-Missing.vcf")); ASSERT_EQ(CALENDAROBJECTLOAD_CANNOTOPEN, testFreeBusy.LoadFile("iCalendarFreeBusy-InvalidPermissions.vcf")); ASSERT_EQ(CALENDAROBJECTLOAD_OK, testFreeBusy.LoadFile("iCalendarFreeBusy-Load1.vcf")); } TEST_F(iCalendarFreeBusyLoadTests, ObjectDataTests){ CalendarFreeBusyObject testFreeBusy; ASSERT_EQ(CALENDAROBJECTLOAD_OK, testFreeBusy.LoadFile("iCalendarFreeBusy-Load2.vcf")); ASSERT_EQ(CALENDAROBJECTVALID_OK, testFreeBusy.ValidBaseObject()); // Tests for DTSTAMP. ASSERT_EQ("20160131T173000Z", testFreeBusy.dateTimeStampData); ASSERT_EQ("OTHER=PARAM", testFreeBusy.dateTimeStampTokens); // Tests for UID. ASSERT_EQ("b3a16392-ad86-4061-be53-c215af2306ff", testFreeBusy.uniqueID); ASSERT_EQ("UNIQUEPARAM=CERTAINLY;OKAY=MAYBENOT", testFreeBusy.uniqueIDTokens); // Tests for CONTACT. std::string contactData; std::string contactDataAltRep; std::string contactDataLanguage; std::string contactDataTokens; if (testFreeBusy.contactList.size() > 0){ contactData = testFreeBusy.contactList[0]; } if (testFreeBusy.contactList.size() > 0){ contactDataAltRep = testFreeBusy.contactListAltRep[0]; } if (testFreeBusy.contactList.size() > 0){ contactDataLanguage = testFreeBusy.contactListLanguage[0]; } if (testFreeBusy.contactList.size() > 0){ contactDataTokens = testFreeBusy.contactListTokens[0]; } ASSERT_EQ("Contact Person", contactData); ASSERT_EQ("null:nodata", contactDataAltRep); ASSERT_EQ("en-GB", contactDataLanguage); ASSERT_EQ("EXAMPLE=TOKEN", contactDataTokens); // Tests for DTSTART. ASSERT_EQ("20160131T103000Z", testFreeBusy.dateTimeStartData); ASSERT_EQ("DATE-TIME", testFreeBusy.dateTimeStartDataValue); ASSERT_EQ("Europe/Truro", testFreeBusy.dateTimeStartDataTimeZoneID); ASSERT_EQ("PARAMONE=YES;PARAMTWO=NO", testFreeBusy.dateTimeStartDataTokens); // Tests for DTEND. ASSERT_EQ("20160131T183000Z", testFreeBusy.dateTimeEndData); ASSERT_EQ("DATE-TIME", testFreeBusy.dateTimeEndDataValue); ASSERT_EQ("Europe/Truro", testFreeBusy.dateTimeEndDataTimeZoneID); ASSERT_EQ("PARAMFOUR=YES;PARAMTHREE=NO", testFreeBusy.dateTimeEndDataTokens); // Tests for ORGANIZER. ASSERT_EQ("mailto:organiser@example.com", testFreeBusy.organiserData); ASSERT_EQ("ExampleOrganiser", testFreeBusy.organiserDataCommonName); ASSERT_EQ("null:nodata", testFreeBusy.organiserDataDirectoryEntry); ASSERT_EQ("mailto:organiser.noreply@example.com", testFreeBusy.organiserDataSentByParam); ASSERT_EQ("kw", testFreeBusy.organiserDataLanguage); ASSERT_EQ("HAPPY=DAYS", testFreeBusy.organiserDataTokens); // Tests for URL. ASSERT_EQ("http://www.example.com/", testFreeBusy.urlData); ASSERT_EQ("EXTERNAL=YES", testFreeBusy.urlDataTokens); // Tests for ATTENDEE. First ATTENDEE property. std::string attendeeDataMember; std::string attendeeDataDelegatedFrom; std::string attendeeDataDelegatedTo; std::string attendeeDataRole; std::string attendeeDataRSVP; std::string attendeeDataDirectoryEntry; std::string attendeeDataSentBy; std::string attendeeDataCommonName; std::string attendeeDataCalendarUserType; std::string attendeeDataParticipationStatus; std::string attendeeDataLanguage; std::string attendeeDataTokens; std::string attendeeData; if (testFreeBusy.attendeeList.begin() != testFreeBusy.attendeeList.end()){ attendeeData = testFreeBusy.attendeeList[0]; } ASSERT_EQ("Attendee One", attendeeData); // Second ATTENDEE property. attendeeData.clear(); if (testFreeBusy.attendeeList.size() > 1){ attendeeData = testFreeBusy.attendeeList[1]; } if (testFreeBusy.attendeeList.size() > 1){ attendeeDataDelegatedFrom = testFreeBusy.attendeeListDelegatedFrom[1]; } if (testFreeBusy.attendeeList.size() > 1){ attendeeDataDelegatedTo = testFreeBusy.attendeeListDelegatedTo[1]; } if (testFreeBusy.attendeeList.size() > 1){ attendeeDataRole = testFreeBusy.attendeeListRole[1]; } if (testFreeBusy.attendeeList.size() > 1){ attendeeDataRSVP = testFreeBusy.attendeeListRSVP[1]; } ASSERT_EQ("Attendee Two", attendeeData); ASSERT_EQ("mailto:delegated.from@example.com", attendeeDataDelegatedFrom); ASSERT_EQ("mailto:delegated.to@example.com", attendeeDataDelegatedTo); ASSERT_EQ("CHAIR", attendeeDataRole); ASSERT_EQ("TRUE", attendeeDataRSVP); // Third ATTENDEE property. attendeeData.clear(); if (testFreeBusy.attendeeList.size() > 2){ attendeeData = testFreeBusy.attendeeList[2]; } if (testFreeBusy.attendeeList.size() > 2){ attendeeDataDirectoryEntry = testFreeBusy.attendeeListDirectoryEntry[2]; } if (testFreeBusy.attendeeList.size() > 2){ attendeeDataSentBy = testFreeBusy.attendeeListSentBy[2]; } if (testFreeBusy.attendeeList.size() > 2){ attendeeDataCommonName = testFreeBusy.attendeeListCommonName[2]; } if (testFreeBusy.attendeeList.size() > 2){ attendeeDataCalendarUserType = testFreeBusy.attendeeListCalendarUserType[2]; } if (testFreeBusy.attendeeList.size() > 2){ attendeeDataParticipationStatus = testFreeBusy.attendeeListParticipationStatus[2]; } if (testFreeBusy.attendeeList.size() > 2){ attendeeDataLanguage = testFreeBusy.attendeeListLanguage[2]; } if (testFreeBusy.attendeeList.size() > 2){ attendeeDataTokens = testFreeBusy.attendeeListTokens[2]; } ASSERT_EQ("Attendee Three", attendeeData); ASSERT_EQ("null:nodata", attendeeDataDirectoryEntry); ASSERT_EQ("mailto:sent.by@example.com", attendeeDataSentBy); ASSERT_EQ("Attendee The Third", attendeeDataCommonName); ASSERT_EQ("INDIVIDUAL", attendeeDataCalendarUserType); ASSERT_EQ("ACCEPTED", attendeeDataParticipationStatus); ASSERT_EQ("kw", attendeeDataLanguage); ASSERT_EQ("EXAMPLE=DATA", attendeeDataTokens); // Get the first COMMENT. std::string commentData; if (testFreeBusy.commentList.begin() != testFreeBusy.commentList.end()){ commentData = testFreeBusy.commentList[0]; } ASSERT_EQ("This is the first comment.", commentData); // Get the second COMMENT. commentData.clear(); std::string commentDataAltRep; std::string commentDataLanguage; if (testFreeBusy.commentList.size() > 1){ commentData = testFreeBusy.commentList[1]; } if (testFreeBusy.commentList.size() > 1){ commentDataAltRep = testFreeBusy.commentListAltRep[1]; } if (testFreeBusy.commentList.size() > 1){ commentDataLanguage = testFreeBusy.commentListLanguage[1]; } ASSERT_EQ("This is the second comment.", commentData); ASSERT_EQ("null:nodata", commentDataAltRep); ASSERT_EQ("en", commentDataLanguage); // Get the third COMMENT. commentData.clear(); std::string commentDataTokens; if (testFreeBusy.commentList.size() > 2){ commentData = testFreeBusy.commentList[2]; } if (testFreeBusy.commentList.size() > 2){ commentDataTokens = testFreeBusy.commentListTokens[2]; } ASSERT_EQ("This is the third comment.", commentData); ASSERT_EQ("ZEBRAS=YES", commentDataTokens); // Get the first FREEBUSY. std::string freeBusyData; if (testFreeBusy.freeBusyList.begin() != testFreeBusy.freeBusyList.end()){ freeBusyData = testFreeBusy.freeBusyList[0]; } ASSERT_EQ("20160202T210000Z/PT1H", freeBusyData); // Get the second FREEBUSY. freeBusyData.clear(); std::string freeBusyType; if (testFreeBusy.freeBusyList.size() > 1){ freeBusyData = testFreeBusy.freeBusyList[1]; } if (testFreeBusy.freeBusyListType.size() > 1){ freeBusyType = testFreeBusy.freeBusyListType[1]; } ASSERT_EQ("FREE", freeBusyType); ASSERT_EQ("20160202T220000Z/PT1H", freeBusyData); // Get the third FREEBUSY. freeBusyData.clear(); freeBusyType.clear(); std::string FreeBusyTokens; if (testFreeBusy.freeBusyList.size() > 2){ freeBusyData = testFreeBusy.freeBusyList[2]; } if (testFreeBusy.freeBusyListType.size() > 2){ freeBusyType = testFreeBusy.freeBusyListType[2]; } if (testFreeBusy.freeBusyListTokens.size() > 2){ FreeBusyTokens = testFreeBusy.freeBusyListTokens[2]; } ASSERT_EQ("BUSY-UNAVAILABLE", freeBusyType); ASSERT_EQ("20160202T230000Z/PT9H", freeBusyData); ASSERT_EQ("RESULT=ARGH;TEST=YES", FreeBusyTokens); // Get the first REQUEST-STATUS. std::string requestStatus; if (testFreeBusy.requestStatusData.begin() != testFreeBusy.requestStatusData.end()){ requestStatus = testFreeBusy.requestStatusData[0]; } ASSERT_EQ("2.0;Success", requestStatus); // Get the second REQUEST-STATUS. requestStatus.clear(); std::string requestLanguage; if (testFreeBusy.requestStatusData.size() > 1){ requestStatus = testFreeBusy.requestStatusData[1]; } if (testFreeBusy.requestStatusData.size() > 1){ requestLanguage = testFreeBusy.requestStatusLanguage[1]; } ASSERT_EQ("3.42;Really big irrecoverable error caused by the user", requestStatus); ASSERT_EQ("en", requestLanguage); // Get the third REQUEST-STATUS. requestStatus.clear(); std::string requestTokens; if (testFreeBusy.requestStatusData.size() > 2){ requestStatus = testFreeBusy.requestStatusData[2]; } if (testFreeBusy.requestStatusData.size() > 2){ requestTokens = testFreeBusy.requestStatusTokens[2]; } ASSERT_EQ("3.7;Invalid calendar user", requestStatus); ASSERT_EQ("USER=MISSING", requestTokens); // Get the first X-EXAMPLE1 token. std::string xTokenName; std::string xTokenData; if (testFreeBusy.xTokensData.size() != 0 ){ xTokenData = testFreeBusy.xTokensData[0]; } if (testFreeBusy.xTokensData.size() != 0){ xTokenName = testFreeBusy.xTokensDataTokens[0]; } ASSERT_EQ("Moo", xTokenData); ASSERT_EQ("X-EXAMPLE1", xTokenName); // Get the second X-EXAMPLE1 token. xTokenName.clear(); xTokenData.clear(); if (testFreeBusy.xTokensData.size() > 1){ xTokenData = testFreeBusy.xTokensData[1]; } if (testFreeBusy.xTokensData.size() > 1){ xTokenName = testFreeBusy.xTokensDataTokens[1]; } ASSERT_EQ("Meep", xTokenData); ASSERT_EQ("X-EXAMPLE1;ANIMAL=NOPE", xTokenName); // Get the third X-EXAMPLE1 token. xTokenName.clear(); xTokenData.clear(); if (testFreeBusy.xTokensData.size() > 2){ xTokenData = testFreeBusy.xTokensData[2]; } if (testFreeBusy.xTokensData.size() > 2){ xTokenName = testFreeBusy.xTokensDataTokens[2]; } ASSERT_EQ("Meow", xTokenData); ASSERT_EQ("X-EXAMPLE1;ANIMAL=CAT", xTokenName); // Get the first X-EXAMPLE2 token. xTokenName.clear(); xTokenData.clear(); if (testFreeBusy.xTokensData.size() > 3){ xTokenData = testFreeBusy.xTokensData[3]; } if (testFreeBusy.xTokensData.size() > 3){ xTokenName = testFreeBusy.xTokensDataTokens[3]; } ASSERT_EQ("Dish", xTokenData); ASSERT_EQ("X-EXAMPLE2", xTokenName); // Get the second X-EXAMPLE2 token. xTokenName.clear(); xTokenData.clear(); if (testFreeBusy.xTokensData.size() > 4){ xTokenData = testFreeBusy.xTokensData[4]; } if (testFreeBusy.xTokensData.size() > 4){ xTokenName = testFreeBusy.xTokensDataTokens[4]; } ASSERT_EQ("Fork", xTokenData); ASSERT_EQ("X-EXAMPLE2;OBJECT=KITCHEN", xTokenName); // Get the third X-EXAMPLE2 token. xTokenName.clear(); xTokenData.clear(); if (testFreeBusy.xTokensData.size() > 5){ xTokenData = testFreeBusy.xTokensData[5]; } if (testFreeBusy.xTokensData.size() > 5){ xTokenName = testFreeBusy.xTokensDataTokens[5]; } ASSERT_EQ("Table", xTokenData); ASSERT_EQ("X-EXAMPLE2;OBJECT=LIVINGROOM", xTokenName); // Get the X-STATUS token. xTokenName.clear(); xTokenData.clear(); if (testFreeBusy.xTokensData.size() > 6){ xTokenData = testFreeBusy.xTokensData[6]; } if (testFreeBusy.xTokensData.size() > 6){ xTokenName = testFreeBusy.xTokensDataTokens[6]; } ASSERT_EQ("Idle", xTokenData); ASSERT_EQ("X-STATUS;HOLIDAY=YES", xTokenName); // Get the X-TRANSPORT token. xTokenName.clear(); xTokenData.clear(); if (testFreeBusy.xTokensData.size() > 7){ xTokenData = testFreeBusy.xTokensData[7]; } if (testFreeBusy.xTokensData.size() > 7){ xTokenName = testFreeBusy.xTokensDataTokens[7]; } ASSERT_EQ("Private Hire", xTokenData); ASSERT_EQ("X-TRANSPORT;PUBLIC=NO", xTokenName); // Get the X-PHANTOM-STATUS token. xTokenName.clear(); xTokenData.clear(); if (testFreeBusy.xTokensData.size() > 8){ xTokenData = testFreeBusy.xTokensData[8]; } if (testFreeBusy.xTokensData.size() > 8){ xTokenName = testFreeBusy.xTokensDataTokens[8]; } ASSERT_EQ("None", xTokenData); ASSERT_EQ("X-PHANTOM-STATUS;HELP=NONE", xTokenName); }