1 /*
2 SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7 #include "localfoldersrequestjobtest.h"
8
9 #include "collectionpathresolver.h"
10
11 #include <QSignalSpy>
12
13 #include <QDebug>
14
15 #include "../src/specialmailcollectionstesting_p.h"
16 #include "specialcollectionattribute.h"
17 #include "specialcollections.h"
18 #include <Akonadi/AgentInstance>
19 #include <Akonadi/AgentManager>
20 #include <Akonadi/CollectionCreateJob>
21 #include <Akonadi/CollectionDeleteJob>
22 #include <Akonadi/CollectionFetchJob>
23 #include <Akonadi/CollectionModifyJob>
24 #include <QStandardPaths>
25 #include <akonadi/qtest_akonadi.h>
26 #include <control.h>
27 #include <specialmailcollections.h>
28 #include <specialmailcollectionsrequestjob.h>
29
30 using namespace Akonadi;
31
initTestCase()32 void LocalFoldersRequestJobTest::initTestCase()
33 {
34 qRegisterMetaType<Akonadi::AgentInstance>();
35
36 QVERIFY(Control::start());
37 QTest::qWait(1000);
38
39 SpecialMailCollections *smc = SpecialMailCollections::self();
40 SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
41 Q_ASSERT(smc);
42 Q_ASSERT(smct);
43 Q_UNUSED(smc)
44
45 // No one has created the default resource. LF has no folders.
46 QCOMPARE(smct->_t_knownResourceCount(), 0);
47 QCOMPARE(smct->_t_knownFolderCount(), 0);
48 }
49
testRequestWithNoDefaultResourceExisting()50 void LocalFoldersRequestJobTest::testRequestWithNoDefaultResourceExisting()
51 {
52 SpecialMailCollections *smc = SpecialMailCollections::self();
53 SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
54 Q_ASSERT(smc);
55 Q_ASSERT(smct);
56 QSignalSpy spy(smc, &SpecialMailCollections::collectionsChanged);
57 QSignalSpy defSpy(smc, &SpecialMailCollections::defaultCollectionsChanged);
58 QVERIFY(spy.isValid());
59 QVERIFY(defSpy.isValid());
60
61 // Initially the default maildir does not exist.
62 QVERIFY(!QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/local-mail")));
63
64 // Request some default folders.
65 {
66 SpecialMailCollectionsRequestJob *rjob = new SpecialMailCollectionsRequestJob(this);
67 rjob->requestDefaultCollection(SpecialMailCollections::Outbox);
68 rjob->requestDefaultCollection(SpecialMailCollections::Drafts);
69 AKVERIFYEXEC(rjob);
70 QCOMPARE(spy.count(), 1);
71 QCOMPARE(defSpy.count(), 1);
72 QCOMPARE(smct->_t_knownResourceCount(), 1);
73 QCOMPARE(smct->_t_knownFolderCount(), 3); // Outbox, Drafts, and Root.
74 QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
75 QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Drafts));
76 QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Root));
77 }
78
79 // The maildir should exist now.
80 QVERIFY(QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/local-mail")));
81 }
82
testRequestWithDefaultResourceAlreadyExisting()83 void LocalFoldersRequestJobTest::testRequestWithDefaultResourceAlreadyExisting()
84 {
85 SpecialMailCollections *smc = SpecialMailCollections::self();
86 SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
87 Q_ASSERT(smc);
88 Q_ASSERT(smct);
89 QSignalSpy spy(smc, &SpecialMailCollections::collectionsChanged);
90 QSignalSpy defSpy(smc, &SpecialMailCollections::defaultCollectionsChanged);
91 QVERIFY(spy.isValid());
92 QVERIFY(defSpy.isValid());
93
94 // Prerequisites (from testRequestWithNoDefaultResourceExisting()).
95 QVERIFY(QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/local-mail")));
96 QVERIFY(!smc->hasDefaultCollection(SpecialMailCollections::Inbox));
97 QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
98 const Collection oldOutbox = smc->defaultCollection(SpecialMailCollections::Outbox);
99
100 // Request some default folders.
101 {
102 SpecialMailCollectionsRequestJob *rjob = new SpecialMailCollectionsRequestJob(this);
103 rjob->requestDefaultCollection(SpecialMailCollections::Outbox); // Exists previously.
104 rjob->requestDefaultCollection(SpecialMailCollections::Inbox); // Must be created.
105 AKVERIFYEXEC(rjob);
106 QCOMPARE(spy.count(), 1);
107 QCOMPARE(defSpy.count(), 1);
108 QCOMPARE(smct->_t_knownResourceCount(), 1);
109 QCOMPARE(smct->_t_knownFolderCount(), 4); // Inbox, Outbox, Drafts, and Root.
110 QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Inbox));
111 QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
112 QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Drafts));
113 QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Root));
114 }
115
116 // This should be untouched.
117 QCOMPARE(smc->defaultCollection(SpecialMailCollections::Outbox), oldOutbox);
118 }
119
testMixedRequest()120 void LocalFoldersRequestJobTest::testMixedRequest()
121 {
122 SpecialMailCollections *smc = SpecialMailCollections::self();
123 SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
124 Q_ASSERT(smc);
125 Q_ASSERT(smct);
126 QSignalSpy spy(smc, &SpecialMailCollections::collectionsChanged);
127 QSignalSpy defSpy(smc, &SpecialMailCollections::defaultCollectionsChanged);
128 QVERIFY(spy.isValid());
129 QVERIFY(defSpy.isValid());
130
131 // Get our knut collection.
132 Collection res1;
133 {
134 CollectionPathResolver *resolver = new CollectionPathResolver(QStringLiteral("res1"), this);
135 QVERIFY(resolver->exec());
136 res1 = Collection(resolver->collection());
137 CollectionFetchJob *fjob = new CollectionFetchJob(res1, CollectionFetchJob::Base, this);
138 AKVERIFYEXEC(fjob);
139 Q_ASSERT(fjob->collections().count() == 1);
140 res1 = fjob->collections().first();
141 QVERIFY(res1.isValid());
142 QVERIFY(!res1.resource().isEmpty());
143 }
144
145 // Create a LocalFolder in the knut resource.
146 Collection knutOutbox;
147 {
148 knutOutbox.setName(QLatin1String("my_outbox"));
149 knutOutbox.setParentCollection(res1);
150 qDebug() << res1;
151 knutOutbox.addAttribute(new SpecialCollectionAttribute("outbox"));
152 CollectionCreateJob *cjob = new CollectionCreateJob(knutOutbox, this);
153 AKVERIFYEXEC(cjob);
154 knutOutbox = cjob->collection();
155 }
156
157 // Prerequisites (from the above two functions).
158 QVERIFY(QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/local-mail")));
159 QVERIFY(!smc->hasDefaultCollection(SpecialMailCollections::SentMail));
160 QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
161 const Collection oldOutbox = smc->defaultCollection(SpecialMailCollections::Outbox);
162
163 // Request some folders, both in our default resource and in the knut resource.
164 {
165 SpecialMailCollectionsRequestJob *rjob = new SpecialMailCollectionsRequestJob(this);
166 rjob->requestDefaultCollection(SpecialMailCollections::Outbox); // Exists previously.
167 rjob->requestDefaultCollection(SpecialMailCollections::SentMail); // Must be created.
168 rjob->requestCollection(SpecialMailCollections::Outbox,
169 AgentManager::self()->instance(res1.resource())); // Exists previously, but unregistered with LF.
170 rjob->requestCollection(SpecialMailCollections::SentMail, AgentManager::self()->instance(res1.resource())); // Must be created.
171 AKVERIFYEXEC(rjob);
172 QCOMPARE(spy.count(), 2); // Default resource and knut resource.
173 QCOMPARE(defSpy.count(), 1);
174 QCOMPARE(smct->_t_knownResourceCount(), 2);
175 QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
176 QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::SentMail));
177 QVERIFY(smc->hasCollection(SpecialMailCollections::Outbox, AgentManager::self()->instance(res1.resource())));
178 QVERIFY(smc->hasCollection(SpecialMailCollections::SentMail, AgentManager::self()->instance(res1.resource())));
179 }
180
181 // These should be untouched.
182 QCOMPARE(smc->defaultCollection(SpecialMailCollections::Outbox), oldOutbox);
183 QCOMPARE(smc->collection(SpecialMailCollections::Outbox, AgentManager::self()->instance(res1.resource())), knutOutbox);
184 }
185
186 QTEST_AKONADIMAIN(LocalFoldersRequestJobTest)
187