File indexing completed on 2024-05-12 05:17:11

0001 /*
0002    SPDX-FileCopyrightText: 2009 Kevin Ottens <ervin@kde.org>
0003 
0004    SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
0005    SPDX-FileContributor: Kevin Ottens <kevin@kdab.com>
0006 
0007    SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #include <QTest>
0011 
0012 #include "kimap/session.h"
0013 #include "kimap/storejob.h"
0014 #include "kimaptest/fakeserver.h"
0015 
0016 #include <QTest>
0017 
0018 class StoreJobTest : public QObject
0019 {
0020     Q_OBJECT
0021 
0022 private Q_SLOTS:
0023 
0024     void testStore_data()
0025     {
0026         QTest::addColumn<bool>("uidBased");
0027         QTest::addColumn<qint64>("id");
0028         QTest::addColumn<qint64>("uid");
0029         QTest::addColumn<QList<QByteArray>>("flags");
0030         QTest::addColumn<QList<QByteArray>>("scenario");
0031 
0032         QList<QByteArray> scenario;
0033         scenario << FakeServer::preauth() << "C: A000001 STORE 3 FLAGS (\\Seen \\Foo)"
0034                  << "S: * 3 FETCH (FLAGS (\\Seen \\Foo) UID 1096)"
0035                  << "S: A000001 OK STORE completed";
0036 
0037         QTest::newRow("not uid based") << false << qint64(3) << qint64(1096)
0038                                        << (QList<QByteArray>() << "\\Seen"
0039                                                                << "\\Foo")
0040                                        << scenario;
0041 
0042         scenario.clear();
0043         scenario << FakeServer::preauth() << "C: A000001 UID STORE 1096 FLAGS (\\Seen \\Foo)"
0044                  << "S: * 3 FETCH (FLAGS (\\Seen \\Foo) UID 1096)"
0045                  << "S: A000001 OK STORE completed";
0046 
0047         QTest::newRow("uid based") << true << qint64(3) << qint64(1096)
0048                                    << (QList<QByteArray>() << "\\Seen"
0049                                                            << "\\Foo")
0050                                    << scenario;
0051     }
0052 
0053     void testStore()
0054     {
0055         QFETCH(bool, uidBased);
0056         QFETCH(qint64, id);
0057         QFETCH(qint64, uid);
0058         QFETCH(QList<QByteArray>, flags);
0059         QFETCH(QList<QByteArray>, scenario);
0060 
0061         FakeServer fakeServer;
0062         fakeServer.setScenario(scenario);
0063         fakeServer.startAndWait();
0064 
0065         KIMAP::Session session(QStringLiteral("127.0.0.1"), 5989);
0066 
0067         auto job = new KIMAP::StoreJob(&session);
0068         job->setUidBased(uidBased);
0069         job->setSequenceSet(KIMAP::ImapSet(uidBased ? uid : id));
0070         job->setFlags(flags);
0071         job->setMode(KIMAP::StoreJob::SetFlags);
0072         bool result = job->exec();
0073         QVERIFY(result);
0074         if (uidBased) {
0075             QVERIFY(job->resultingFlags().contains(uid));
0076         } else {
0077             QVERIFY(job->resultingFlags().contains(id));
0078         }
0079 
0080         fakeServer.quit();
0081     }
0082 };
0083 
0084 QTEST_GUILESS_MAIN(StoreJobTest)
0085 
0086 #include "storejobtest.moc"