1 /*
2  * SPDX-FileCopyrightText: 2012 Christian Mollekopf <mollekopf@kolabsys.com>
3  *
4  * SPDX-License-Identifier: LGPL-3.0-or-later
5  */
6 
7 #include "kolabobjecttest.h"
8 
9 #include <QTest>
10 
11 #include "kolabformat/kolabobject.h"
12 #include <kolabformat/errorhandler.h>
13 
preserveLatin1()14 void KolabObjectTest::preserveLatin1()
15 {
16     KCalendarCore::Event::Ptr event(new KCalendarCore::Event());
17     event->setDtStart(QDateTime(QDate(2014, 1, 1), {}));
18     event->setAllDay(true);
19     const QString summary(QLatin1String("äöü%@$£é¤¼²°"));
20     event->setSummary(summary);
21     QCOMPARE(event->summary(), summary);
22     // std::cout << event->summary().toStdString() << std::endl;
23     KMime::Message::Ptr msg = Kolab::KolabObjectWriter::writeEvent(event);
24     //     qDebug() << msg->encodedContent();
25     KCalendarCore::Event::Ptr readEvent = Kolab::KolabObjectReader(msg).getEvent();
26     QVERIFY(readEvent);
27     //     std::cout << readEvent->summary().toStdString() << std::endl;
28     QCOMPARE(readEvent->summary(), summary);
29 }
30 
preserveUnicode()31 void KolabObjectTest::preserveUnicode()
32 {
33     KCalendarCore::Event::Ptr event(new KCalendarCore::Event());
34     event->setDtStart(QDateTime(QDate(2014, 1, 1), {}));
35     event->setAllDay(true);
36     QString summary(QStringLiteral("€Š�ـأبـ☺"));
37     event->setSummary(summary);
38     QCOMPARE(event->summary(), summary);
39     //     std::cout << event->summary().toStdString() << std::endl;
40     KMime::Message::Ptr msg = Kolab::KolabObjectWriter::writeEvent(event);
41     //     qDebug() << msg->encodedContent();
42     KCalendarCore::Event::Ptr readEvent = Kolab::KolabObjectReader(msg).getEvent();
43     QVERIFY(readEvent);
44     //     std::cout << readEvent->summary().toStdString() << std::endl;
45     QCOMPARE(readEvent->summary(), summary);
46 }
47 
dontCrashWithEmptyOrganizer()48 void KolabObjectTest::dontCrashWithEmptyOrganizer()
49 {
50     KCalendarCore::Event::Ptr event(new KCalendarCore::Event());
51     event->setDtStart(QDateTime(QDate(2012, 11, 11), {}));
52     event->setAllDay(true);
53     Kolab::KolabObjectWriter::writeEvent(event, Kolab::KolabV2);
54     QCOMPARE(Kolab::ErrorHandler::instance().error(), Kolab::ErrorHandler::Debug);
55     Kolab::KolabObjectWriter::writeEvent(event);
56     qDebug() << Kolab::ErrorHandler::instance().error();
57     QCOMPARE(Kolab::ErrorHandler::instance().error(), Kolab::ErrorHandler::Debug);
58 }
59 
dontCrashWithEmptyIncidence()60 void KolabObjectTest::dontCrashWithEmptyIncidence()
61 {
62     Kolab::KolabObjectWriter::writeEvent(KCalendarCore::Event::Ptr());
63     QCOMPARE(Kolab::ErrorHandler::instance().error(), Kolab::ErrorHandler::Critical);
64     Kolab::KolabObjectWriter::writeTodo(KCalendarCore::Todo::Ptr());
65     QCOMPARE(Kolab::ErrorHandler::instance().error(), Kolab::ErrorHandler::Critical);
66     Kolab::KolabObjectWriter::writeJournal(KCalendarCore::Journal::Ptr());
67     QCOMPARE(Kolab::ErrorHandler::instance().error(), Kolab::ErrorHandler::Critical);
68     Kolab::KolabObjectWriter::writeIncidence(KCalendarCore::Event::Ptr());
69     QCOMPARE(Kolab::ErrorHandler::instance().error(), Kolab::ErrorHandler::Critical);
70     Kolab::KolabObjectWriter::writeNote(KMime::Message::Ptr());
71     QCOMPARE(Kolab::ErrorHandler::instance().error(), Kolab::ErrorHandler::Critical);
72 }
73 
parseRelationMembers()74 void KolabObjectTest::parseRelationMembers()
75 {
76     {
77         QString memberString(QStringLiteral(
78             "imap:/user/jan.aachen%40lhm.klab.cc/INBOX/"
79             "20?message-id=%3Cf06aa3345a25005380b47547ad161d36%40lhm.klab.cc%3E&subject=Re%3A+test&date=Tue%2C+12+Aug+2014+20%3A42%3A59+%2B0200"));
80         Kolab::RelationMember member = Kolab::parseMemberUrl(memberString);
81 
82         QString result = Kolab::generateMemberUrl(member);
83         qDebug() << result;
84         result.replace(QLatin1String("%20"), QLatin1String("+"));
85         QEXPECT_FAIL("", "This is currently failing, probably a bug in the recent changes regarding the encoding.", Continue);
86         QCOMPARE(result, memberString);
87     }
88 
89     // user namespace by uid
90     {
91         Kolab::RelationMember member;
92         member.uid = 20;
93         member.mailbox = QList<QByteArray>() << "INBOX";
94         member.user = QStringLiteral("john.doe@example.org");
95         member.messageId = QStringLiteral("messageid");
96         member.date = QStringLiteral("date");
97         member.subject = QStringLiteral("subject");
98         QString url = Kolab::generateMemberUrl(member);
99         qDebug() << url;
100         Kolab::RelationMember result = Kolab::parseMemberUrl(url);
101         QCOMPARE(result.uid, member.uid);
102         QCOMPARE(result.mailbox, member.mailbox);
103         QEXPECT_FAIL("", "This is currently failing, probably a bug in the recent changes regarding the encoding.", Continue);
104         QCOMPARE(result.user, member.user);
105         QCOMPARE(result.messageId, member.messageId);
106         QCOMPARE(result.date, member.date);
107         QCOMPARE(result.subject, member.subject);
108     }
109 
110     // shared namespace by uid
111     {
112         Kolab::RelationMember member;
113         member.uid = 20;
114         member.mailbox = QList<QByteArray>() << "foo"
115                                              << "bar";
116         member.messageId = QStringLiteral("messageid");
117         member.date = QStringLiteral("date");
118         member.subject = QStringLiteral("subject");
119         QString url = Kolab::generateMemberUrl(member);
120         qDebug() << url;
121         Kolab::RelationMember result = Kolab::parseMemberUrl(url);
122         QCOMPARE(result.uid, member.uid);
123         QCOMPARE(result.mailbox, member.mailbox);
124         QVERIFY(result.user.isEmpty());
125         QCOMPARE(result.messageId, member.messageId);
126         QCOMPARE(result.date, member.date);
127         QCOMPARE(result.subject, member.subject);
128     }
129 
130     // by uuid/gid
131     {
132         Kolab::RelationMember member;
133         member.gid = QStringLiteral("fooobar");
134         QString url = Kolab::generateMemberUrl(member);
135         qDebug() << url;
136         Kolab::RelationMember result = Kolab::parseMemberUrl(url);
137         QCOMPARE(result.gid, member.gid);
138     }
139 
140     // chars to en/decode
141     {
142         Kolab::RelationMember member;
143         member.uid = 20;
144         member.mailbox = QList<QByteArray>() << "spaces in folders"
145                                              << "+^,:@";
146         member.user = QStringLiteral("john.doe:^@example.org");
147         member.messageId = QStringLiteral("messageid+^,:@");
148         member.date = QStringLiteral("date+^,:@");
149         member.subject = QStringLiteral("subject+^,:@");
150 
151         QString url = Kolab::generateMemberUrl(member);
152         qDebug() << url;
153         Kolab::RelationMember result = Kolab::parseMemberUrl(url);
154         QCOMPARE(result.uid, member.uid);
155         QEXPECT_FAIL("", "This is currently failing, probably a bug in the recent changes regarding the encoding.", Continue);
156         QCOMPARE(result.mailbox, member.mailbox);
157         QEXPECT_FAIL("", "This is currently failing, probably a bug in the recent changes regarding the encoding.", Continue);
158         QCOMPARE(result.user, member.user);
159         QCOMPARE(result.messageId, member.messageId);
160         QCOMPARE(result.date, member.date);
161         QCOMPARE(result.subject, member.subject);
162     }
163 }
164 
165 QTEST_MAIN(KolabObjectTest)
166