File indexing completed on 2024-05-12 05:17:11
0001 /* 0002 SPDX-FileCopyrightText: 2013 Christian Mollekopf <mollekopf@kolabsys.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include <QTest> 0008 0009 #include "kimap/session.h" 0010 #include "kimap/setmetadatajob.h" 0011 #include "kimaptest/fakeserver.h" 0012 0013 #include <QTest> 0014 0015 using MAP = QMap<QByteArray, QByteArray>; 0016 Q_DECLARE_METATYPE(MAP) 0017 0018 class SetMetadataJobTest : public QObject 0019 { 0020 Q_OBJECT 0021 0022 private Q_SLOTS: 0023 0024 void metadata_data() 0025 { 0026 QTest::addColumn<QList<QByteArray>>("scenario"); 0027 QTest::addColumn<QString>("mailbox"); 0028 QTest::addColumn<QMap<QByteArray, QByteArray>>("annotations"); 0029 0030 { 0031 QList<QByteArray> scenario; 0032 scenario << FakeServer::preauth() << R"(C: A000001 SETMETADATA "Folder1" ("/public/comment" "comment2" "/shared/comment" "Shared comment"))" 0033 << "S: A000001 OK SETMETADATA complete"; 0034 QMap<QByteArray, QByteArray> annotations; 0035 annotations.insert("/public/comment", "comment2"); 0036 annotations.insert("/shared/comment", "Shared comment"); 0037 QTest::newRow("normal") << scenario << "Folder1" << annotations; 0038 } 0039 { 0040 QList<QByteArray> scenario; 0041 scenario << FakeServer::preauth() 0042 << "C: A000001 SETMETADATA \"Folder1\" (\"/public/comment\" {8}\r\ncomment2 \"/shared/comment\" {14}\r\nShared\ncomment)" 0043 << "S: A000001 OK SETMETADATA complete"; 0044 QMap<QByteArray, QByteArray> annotations; 0045 annotations.insert("/shared/comment", "Shared\ncomment"); 0046 annotations.insert("/public/comment", "comment2"); 0047 QTest::newRow("newline") << scenario << "Folder1" << annotations; 0048 } 0049 { 0050 QList<QByteArray> scenario; 0051 scenario << FakeServer::preauth() << R"(C: A000001 SETMETADATA "Folder1" ("/shared/comment" NIL))" 0052 << "S: A000001 OK SETMETADATA complete"; 0053 QMap<QByteArray, QByteArray> annotations; 0054 annotations.insert("/shared/comment", ""); 0055 QTest::newRow("newline") << scenario << "Folder1" << annotations; 0056 } 0057 { 0058 QList<QByteArray> scenario; 0059 scenario << FakeServer::preauth() << "C: A000001 SETMETADATA \"Folder1\" (\"/public/comment\" {12}\r\ncomment\ntest \"/shared/comment\" {3}\r\nNIL)" 0060 << "S: A000001 OK SETMETADATA complete"; 0061 QMap<QByteArray, QByteArray> annotations; 0062 annotations.insert("/shared/comment", ""); 0063 annotations.insert("/public/comment", "comment\ntest"); 0064 QTest::newRow("newline2") << scenario << "Folder1" << annotations; 0065 } 0066 { 0067 QList<QByteArray> scenario; 0068 scenario << FakeServer::preauth() << "C: A000001 SETMETADATA \"Folder1\" (\"/public/comment\" {3}\r\nNIL \"/shared/comment\" {12}\r\ncomment\ntest)" 0069 << "S: A000001 OK SETMETADATA complete"; 0070 QMap<QByteArray, QByteArray> annotations; 0071 annotations.insert("/shared/comment", "comment\ntest"); 0072 annotations.insert("/public/comment", ""); 0073 QTest::newRow("newline2") << scenario << "Folder1" << annotations; 0074 } 0075 } 0076 0077 void metadata() 0078 { 0079 QFETCH(QList<QByteArray>, scenario); 0080 QFETCH(QString, mailbox); 0081 QFETCH(MAP, annotations); 0082 0083 FakeServer fakeServer; 0084 fakeServer.setScenario(scenario); 0085 fakeServer.startAndWait(); 0086 0087 KIMAP::Session session(QStringLiteral("127.0.0.1"), 5989); 0088 0089 auto setMetadataJob = new KIMAP::SetMetaDataJob(&session); 0090 setMetadataJob->setServerCapability(KIMAP::MetaDataJobBase::Metadata); 0091 setMetadataJob->setMailBox(mailbox); 0092 const auto keys = annotations.keys(); 0093 for (const QByteArray &entry : keys) { 0094 setMetadataJob->addMetaData(entry, annotations[entry]); 0095 } 0096 0097 QVERIFY(setMetadataJob->exec()); 0098 0099 fakeServer.quit(); 0100 } 0101 0102 void annotatemore_data() 0103 { 0104 QTest::addColumn<QList<QByteArray>>("scenario"); 0105 QTest::addColumn<QString>("mailbox"); 0106 QTest::addColumn<QMap<QByteArray, QByteArray>>("annotations"); 0107 QTest::addColumn<bool>("legacyMode"); 0108 0109 { 0110 QList<QByteArray> scenario; 0111 scenario << FakeServer::preauth() << R"(C: A000001 SETANNOTATION "Folder1" "/comment" ("value.shared" "Shared comment"))" 0112 << "S: A000001 OK annotations changed"; 0113 0114 QMap<QByteArray, QByteArray> annotations; 0115 annotations.insert("/comment", "Shared comment"); 0116 QTest::newRow("normal") << scenario << "Folder1" << annotations << false; 0117 QTest::newRow("legacy") << scenario << "Folder1" << annotations << true; 0118 } 0119 } 0120 0121 void annotatemore() 0122 { 0123 QFETCH(QList<QByteArray>, scenario); 0124 QFETCH(QString, mailbox); 0125 QFETCH(MAP, annotations); 0126 QFETCH(bool, legacyMode); 0127 0128 FakeServer fakeServer; 0129 fakeServer.setScenario(scenario); 0130 fakeServer.startAndWait(); 0131 0132 KIMAP::Session session(QStringLiteral("127.0.0.1"), 5989); 0133 0134 auto setMetadataJob = new KIMAP::SetMetaDataJob(&session); 0135 setMetadataJob->setServerCapability(KIMAP::MetaDataJobBase::Annotatemore); 0136 setMetadataJob->setMailBox(mailbox); 0137 const auto keys = annotations.keys(); 0138 for (const QByteArray &entry : keys) { 0139 if (legacyMode) { 0140 setMetadataJob->setEntry(entry); 0141 setMetadataJob->addMetaData("value.shared", annotations[entry]); 0142 } else { 0143 setMetadataJob->addMetaData(QByteArray("/shared") + entry, annotations[entry]); 0144 } 0145 } 0146 0147 QVERIFY(setMetadataJob->exec()); 0148 0149 fakeServer.quit(); 0150 } 0151 }; 0152 0153 QTEST_GUILESS_MAIN(SetMetadataJobTest) 0154 0155 #include "setmetadatajobtest.moc"