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"