File indexing completed on 2024-05-12 05:17:09
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/appendjob.h" 0010 #include "kimap/session.h" 0011 #include "kimaptest/fakeserver.h" 0012 0013 #include <QDateTime> 0014 #include <QTest> 0015 0016 class AppendJobTest : public QObject 0017 { 0018 Q_OBJECT 0019 0020 private Q_SLOTS: 0021 0022 void testAppend_data() 0023 { 0024 QTest::addColumn<QString>("mailbox"); 0025 QTest::addColumn<QList<QByteArray>>("scenario"); 0026 QTest::addColumn<QList<QByteArray>>("flags"); 0027 QTest::addColumn<QDateTime>("internaldate"); 0028 QTest::addColumn<QByteArray>("content"); 0029 QTest::addColumn<qint64>("uid"); 0030 0031 QList<QByteArray> flags; 0032 flags << QByteArray("\\Seen"); 0033 { 0034 QList<QByteArray> scenario; 0035 scenario << FakeServer::preauth() << "C: A000001 APPEND \"INBOX\" (\\Seen) {7}\r\ncontent" 0036 << "S: A000001 OK APPEND completed. [ APPENDUID 492 2671 ]"; 0037 QTest::newRow("good") << "INBOX" << scenario << flags << QDateTime() << QByteArray("content") << qint64(2671); 0038 } 0039 { 0040 QList<QByteArray> scenario; 0041 scenario << FakeServer::preauth() << "C: A000001 APPEND \"INBOX\" (\\Seen) \"26-Feb-2014 12:38:00 +0000\" {7}\r\ncontent" 0042 << "S: A000001 OK APPEND completed. [ APPENDUID 493 2672 ]"; 0043 QTest::newRow("good, with internalDate set") 0044 << "INBOX" << scenario << flags << QDateTime::fromString(QStringLiteral("2014-02-26T12:38:00Z"), Qt::ISODate) << QByteArray("content") 0045 << qint64(2672); 0046 } 0047 0048 { 0049 QList<QByteArray> scenario; 0050 scenario << FakeServer::preauth() << "C: A000001 APPEND \"INBOX\" (\\Seen) {7}\r\ncontent" 0051 << "S: BYE" 0052 << "X"; 0053 QTest::newRow("bad") << "INBOX" << scenario << flags << QDateTime() << QByteArray("content") << qint64(0); 0054 } 0055 { 0056 QList<QByteArray> scenario; 0057 scenario << FakeServer::preauth() << "C: A000001 APPEND \"INBOX\" (\\Seen) {7}\r\ncontent" 0058 << "S: " 0059 << "X"; 0060 QTest::newRow("Don't crash on empty response") << "INBOX" << scenario << flags << QDateTime() << QByteArray("content") << qint64(0); 0061 } 0062 } 0063 0064 void testAppend() 0065 { 0066 QFETCH(QString, mailbox); 0067 QFETCH(QList<QByteArray>, scenario); 0068 QFETCH(QList<QByteArray>, flags); 0069 QFETCH(QDateTime, internaldate); 0070 QFETCH(QByteArray, content); 0071 QFETCH(qint64, uid); 0072 0073 FakeServer fakeServer; 0074 fakeServer.setScenario(scenario); 0075 fakeServer.startAndWait(); 0076 KIMAP::Session session(QStringLiteral("127.0.0.1"), 5989); 0077 0078 auto job = new KIMAP::AppendJob(&session); 0079 job->setContent(content); 0080 job->setFlags(flags); 0081 job->setInternalDate(internaldate); 0082 job->setMailBox(mailbox); 0083 const bool result = job->exec(); 0084 QEXPECT_FAIL("bad", "Expected failure on connection abort", Continue); 0085 QEXPECT_FAIL("Don't crash on empty response", "Expected failure on connection abort", Continue); 0086 QVERIFY(result); 0087 QCOMPARE(job->uid(), uid); 0088 0089 fakeServer.quit(); 0090 } 0091 }; 0092 0093 QTEST_GUILESS_MAIN(AppendJobTest) 0094 0095 #include "appendjobtest.moc"