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"