File indexing completed on 2024-05-12 05:17:11
0001 /* 0002 SPDX-FileCopyrightText: 2016 Daniel Vrátil <dvratil@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include <QTest> 0008 0009 #include "kimap/loginjob.h" 0010 #include "kimap/session.h" 0011 #include "kimap/statusjob.h" 0012 #include "kimaptest/fakeserver.h" 0013 0014 using StatusMap = QList<QPair<QByteArray, qint64>>; 0015 Q_DECLARE_METATYPE(StatusMap) 0016 0017 class StatusJobTest : public QObject 0018 { 0019 Q_OBJECT 0020 0021 private Q_SLOTS: 0022 0023 void testStatus_data() 0024 { 0025 QTest::addColumn<QList<QByteArray>>("scenario"); 0026 QTest::addColumn<QList<QByteArray>>("dataItems"); 0027 QTest::addColumn<StatusMap>("results"); 0028 0029 QList<QByteArray> scenario; 0030 QList<QByteArray> dataItems; 0031 StatusMap results; 0032 scenario << FakeServer::preauth() << "C: A000001 STATUS \"INBOX\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)" 0033 << "S: * STATUS \"INBOX\" (MESSAGES 294 RECENT 1 UIDNEXT 295 UIDVALIDITY 458587604 UNSEEN 181)" 0034 << "S: A000001 OK STATUS Completed"; 0035 dataItems = {"MESSAGES", "RECENT", "UIDNEXT", "UIDVALIDITY", "UNSEEN"}; 0036 results = {{"MESSAGES", 294}, {"RECENT", 1}, {"UIDNEXT", 295}, {"UIDVALIDITY", 458587604}, {"UNSEEN", 181}}; 0037 QTest::newRow("good") << scenario << dataItems << results; 0038 0039 scenario.clear(); 0040 results.clear(); 0041 scenario << FakeServer::preauth() << "C: A000001 STATUS \"INBOX\" (MESSAGES UIDNEXT HIGHESTMODSEQ)" 0042 << "S: * STATUS \"INBOX\" (MESSAGES 294 UIDNEXT 295)" 0043 << "S: A000001 OK STATUS Completed"; 0044 dataItems = {"MESSAGES", "UIDNEXT", "HIGHESTMODSEQ"}; 0045 results = {{"MESSAGES", 294}, {"UIDNEXT", 295}}; 0046 QTest::newRow("incomplete") << scenario << dataItems << results; 0047 0048 scenario.clear(); 0049 results.clear(); 0050 scenario << FakeServer::preauth() << "C: A000001 STATUS \"INBOX\" (HIGHESTMODSEQ)" 0051 << "S: * STATUS \"INBOX\" ()" 0052 << "S: A000001 OK STATUS Completed"; 0053 dataItems = {"HIGHESTMODSEQ"}; 0054 QTest::newRow("empty response") << scenario << dataItems << results; 0055 0056 scenario.clear(); 0057 results.clear(); 0058 scenario << FakeServer::preauth() << "C: A000001 STATUS \"INBOX\" (MESSAGES HIGHESTMODSEQ)" 0059 << "S: A000001 NO status failure"; 0060 dataItems = {"MESSAGES", "HIGHESTMODSEQ"}; 0061 results.clear(); 0062 QTest::newRow("no") << scenario << dataItems << results; 0063 0064 scenario.clear(); 0065 results.clear(); 0066 scenario << FakeServer::preauth() << "C: A000001 STATUS \"INBOX\" (UIDNEXT)" 0067 << "S: A000001 NO bad command"; 0068 dataItems = {"UIDNEXT"}; 0069 QTest::newRow("bad") << scenario << dataItems << results; 0070 } 0071 0072 void testStatus() 0073 { 0074 QFETCH(QList<QByteArray>, scenario); 0075 QFETCH(QList<QByteArray>, dataItems); 0076 QFETCH(StatusMap, results); 0077 0078 FakeServer fakeServer; 0079 fakeServer.setScenario(scenario); 0080 fakeServer.startAndWait(); 0081 0082 KIMAP::Session session(QStringLiteral("127.0.0.1"), 5989); 0083 auto job = new KIMAP::StatusJob(&session); 0084 job->setMailBox(QStringLiteral("INBOX")); 0085 job->setDataItems(dataItems); 0086 bool result = job->exec(); 0087 0088 QEXPECT_FAIL("bad", "Expected failure on BAD scenario", Continue); 0089 QEXPECT_FAIL("no", "Expected failure on NO scenario", Continue); 0090 QVERIFY(result); 0091 0092 if (result) { 0093 const StatusMap status = job->status(); 0094 QCOMPARE(status.count(), results.count()); 0095 for (int i = 0; i < results.count(); ++i) { 0096 QCOMPARE(results[i].first, status[i].first); 0097 QCOMPARE(results[i].second, status[i].second); 0098 } 0099 } 0100 0101 fakeServer.quit(); 0102 } 0103 }; 0104 0105 QTEST_GUILESS_MAIN(StatusJobTest) 0106 0107 #include "statusjobtest.moc"