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

0001 /*
0002     SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "localfoldersrequestjobtest.h"
0008 
0009 #include "collectionpathresolver.h"
0010 
0011 #include <QSignalSpy>
0012 
0013 #include <QDebug>
0014 
0015 #include "../src/specialmailcollectionstesting_p.h"
0016 #include "specialcollectionattribute.h"
0017 #include "specialcollections.h"
0018 #include "specialmailcollections.h"
0019 #include "specialmailcollectionsrequestjob.h"
0020 #include <Akonadi/AgentInstance>
0021 #include <Akonadi/AgentManager>
0022 #include <Akonadi/CollectionCreateJob>
0023 #include <Akonadi/CollectionDeleteJob>
0024 #include <Akonadi/CollectionFetchJob>
0025 #include <Akonadi/CollectionModifyJob>
0026 #include <QStandardPaths>
0027 #include <akonadi/qtest_akonadi.h>
0028 #include <control.h>
0029 
0030 using namespace Akonadi;
0031 
0032 void LocalFoldersRequestJobTest::initTestCase()
0033 {
0034     qRegisterMetaType<Akonadi::AgentInstance>();
0035 
0036     QVERIFY(Control::start());
0037     QTest::qWait(1000);
0038 
0039     SpecialMailCollections *smc = SpecialMailCollections::self();
0040     SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
0041     Q_ASSERT(smc);
0042     Q_ASSERT(smct);
0043     Q_UNUSED(smc)
0044 
0045     // No one has created the default resource.  LF has no folders.
0046     QCOMPARE(smct->_t_knownResourceCount(), 0);
0047     QCOMPARE(smct->_t_knownFolderCount(), 0);
0048 }
0049 
0050 void LocalFoldersRequestJobTest::testRequestWithNoDefaultResourceExisting()
0051 {
0052     SpecialMailCollections *smc = SpecialMailCollections::self();
0053     SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
0054     Q_ASSERT(smc);
0055     Q_ASSERT(smct);
0056     QSignalSpy spy(smc, &SpecialMailCollections::collectionsChanged);
0057     QSignalSpy defSpy(smc, &SpecialMailCollections::defaultCollectionsChanged);
0058     QVERIFY(spy.isValid());
0059     QVERIFY(defSpy.isValid());
0060 
0061     // Initially the default maildir does not exist.
0062     QVERIFY(!QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1StringView("/local-mail")));
0063 
0064     // Request some default folders.
0065     {
0066         SpecialMailCollectionsRequestJob *rjob = new SpecialMailCollectionsRequestJob(this);
0067         rjob->requestDefaultCollection(SpecialMailCollections::Outbox);
0068         rjob->requestDefaultCollection(SpecialMailCollections::Drafts);
0069         AKVERIFYEXEC(rjob);
0070         QCOMPARE(spy.count(), 1);
0071         QCOMPARE(defSpy.count(), 1);
0072         QCOMPARE(smct->_t_knownResourceCount(), 1);
0073         QCOMPARE(smct->_t_knownFolderCount(), 3); // Outbox, Drafts, and Root.
0074         QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
0075         QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Drafts));
0076         QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Root));
0077     }
0078 
0079     // The maildir should exist now.
0080     QVERIFY(QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1StringView("/local-mail")));
0081 }
0082 
0083 void LocalFoldersRequestJobTest::testRequestWithDefaultResourceAlreadyExisting()
0084 {
0085     SpecialMailCollections *smc = SpecialMailCollections::self();
0086     SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
0087     Q_ASSERT(smc);
0088     Q_ASSERT(smct);
0089     QSignalSpy spy(smc, &SpecialMailCollections::collectionsChanged);
0090     QSignalSpy defSpy(smc, &SpecialMailCollections::defaultCollectionsChanged);
0091     QVERIFY(spy.isValid());
0092     QVERIFY(defSpy.isValid());
0093 
0094     // Prerequisites (from testRequestWithNoDefaultResourceExisting()).
0095     QVERIFY(QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1StringView("/local-mail")));
0096     QVERIFY(!smc->hasDefaultCollection(SpecialMailCollections::Inbox));
0097     QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
0098     const Collection oldOutbox = smc->defaultCollection(SpecialMailCollections::Outbox);
0099 
0100     // Request some default folders.
0101     {
0102         SpecialMailCollectionsRequestJob *rjob = new SpecialMailCollectionsRequestJob(this);
0103         rjob->requestDefaultCollection(SpecialMailCollections::Outbox); // Exists previously.
0104         rjob->requestDefaultCollection(SpecialMailCollections::Inbox); // Must be created.
0105         AKVERIFYEXEC(rjob);
0106         QCOMPARE(spy.count(), 1);
0107         QCOMPARE(defSpy.count(), 1);
0108         QCOMPARE(smct->_t_knownResourceCount(), 1);
0109         QCOMPARE(smct->_t_knownFolderCount(), 4); // Inbox, Outbox, Drafts, and Root.
0110         QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Inbox));
0111         QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
0112         QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Drafts));
0113         QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Root));
0114     }
0115 
0116     // This should be untouched.
0117     QCOMPARE(smc->defaultCollection(SpecialMailCollections::Outbox), oldOutbox);
0118 }
0119 
0120 void LocalFoldersRequestJobTest::testMixedRequest()
0121 {
0122     SpecialMailCollections *smc = SpecialMailCollections::self();
0123     SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
0124     Q_ASSERT(smc);
0125     Q_ASSERT(smct);
0126     QSignalSpy spy(smc, &SpecialMailCollections::collectionsChanged);
0127     QSignalSpy defSpy(smc, &SpecialMailCollections::defaultCollectionsChanged);
0128     QVERIFY(spy.isValid());
0129     QVERIFY(defSpy.isValid());
0130 
0131     // Get our knut collection.
0132     Collection res1;
0133     {
0134         CollectionPathResolver *resolver = new CollectionPathResolver(QStringLiteral("res1"), this);
0135         QVERIFY(resolver->exec());
0136         res1 = Collection(resolver->collection());
0137         CollectionFetchJob *fjob = new CollectionFetchJob(res1, CollectionFetchJob::Base, this);
0138         AKVERIFYEXEC(fjob);
0139         Q_ASSERT(fjob->collections().count() == 1);
0140         res1 = fjob->collections().first();
0141         QVERIFY(res1.isValid());
0142         QVERIFY(!res1.resource().isEmpty());
0143     }
0144 
0145     // Create a LocalFolder in the knut resource.
0146     Collection knutOutbox;
0147     {
0148         knutOutbox.setName(QLatin1StringView("my_outbox"));
0149         knutOutbox.setParentCollection(res1);
0150         qDebug() << res1;
0151         knutOutbox.addAttribute(new SpecialCollectionAttribute("outbox"));
0152         CollectionCreateJob *cjob = new CollectionCreateJob(knutOutbox, this);
0153         AKVERIFYEXEC(cjob);
0154         knutOutbox = cjob->collection();
0155     }
0156 
0157     // Prerequisites (from the above two functions).
0158     QVERIFY(QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1StringView("/local-mail")));
0159     QVERIFY(!smc->hasDefaultCollection(SpecialMailCollections::SentMail));
0160     QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
0161     const Collection oldOutbox = smc->defaultCollection(SpecialMailCollections::Outbox);
0162 
0163     // Request some folders, both in our default resource and in the knut resource.
0164     {
0165         SpecialMailCollectionsRequestJob *rjob = new SpecialMailCollectionsRequestJob(this);
0166         rjob->requestDefaultCollection(SpecialMailCollections::Outbox); // Exists previously.
0167         rjob->requestDefaultCollection(SpecialMailCollections::SentMail); // Must be created.
0168         rjob->requestCollection(SpecialMailCollections::Outbox,
0169                                 AgentManager::self()->instance(res1.resource())); // Exists previously, but unregistered with LF.
0170         rjob->requestCollection(SpecialMailCollections::SentMail, AgentManager::self()->instance(res1.resource())); // Must be created.
0171         AKVERIFYEXEC(rjob);
0172         QCOMPARE(spy.count(), 2); // Default resource and knut resource.
0173         QCOMPARE(defSpy.count(), 1);
0174         QCOMPARE(smct->_t_knownResourceCount(), 2);
0175         QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
0176         QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::SentMail));
0177         QVERIFY(smc->hasCollection(SpecialMailCollections::Outbox, AgentManager::self()->instance(res1.resource())));
0178         QVERIFY(smc->hasCollection(SpecialMailCollections::SentMail, AgentManager::self()->instance(res1.resource())));
0179     }
0180 
0181     // These should be untouched.
0182     QCOMPARE(smc->defaultCollection(SpecialMailCollections::Outbox), oldOutbox);
0183     QCOMPARE(smc->collection(SpecialMailCollections::Outbox, AgentManager::self()->instance(res1.resource())), knutOutbox);
0184 }
0185 
0186 QTEST_AKONADIMAIN(LocalFoldersRequestJobTest)
0187 
0188 #include "moc_localfoldersrequestjobtest.cpp"