akondi-mime5/akonadi-mime5/autotests/localfoldersrequestjobtest.cpp

187 lines
8.0 KiB
C++
Raw Normal View History

2024-08-05 16:19:50 +02:00
/*
SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "localfoldersrequestjobtest.h"
#include "collectionpathresolver.h"
#include <QSignalSpy>
#include <QDebug>
#include "../src/specialmailcollectionstesting_p.h"
#include "specialcollectionattribute.h"
#include "specialcollections.h"
#include <Akonadi/AgentInstance>
#include <Akonadi/AgentManager>
#include <Akonadi/CollectionCreateJob>
#include <Akonadi/CollectionDeleteJob>
#include <Akonadi/CollectionFetchJob>
#include <Akonadi/CollectionModifyJob>
#include <QStandardPaths>
#include <akonadi/qtest_akonadi.h>
#include <control.h>
#include <specialmailcollections.h>
#include <specialmailcollectionsrequestjob.h>
using namespace Akonadi;
void LocalFoldersRequestJobTest::initTestCase()
{
qRegisterMetaType<Akonadi::AgentInstance>();
QVERIFY(Control::start());
QTest::qWait(1000);
SpecialMailCollections *smc = SpecialMailCollections::self();
SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
Q_ASSERT(smc);
Q_ASSERT(smct);
Q_UNUSED(smc)
// No one has created the default resource. LF has no folders.
QCOMPARE(smct->_t_knownResourceCount(), 0);
QCOMPARE(smct->_t_knownFolderCount(), 0);
}
void LocalFoldersRequestJobTest::testRequestWithNoDefaultResourceExisting()
{
SpecialMailCollections *smc = SpecialMailCollections::self();
SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
Q_ASSERT(smc);
Q_ASSERT(smct);
QSignalSpy spy(smc, &SpecialMailCollections::collectionsChanged);
QSignalSpy defSpy(smc, &SpecialMailCollections::defaultCollectionsChanged);
QVERIFY(spy.isValid());
QVERIFY(defSpy.isValid());
// Initially the default maildir does not exist.
QVERIFY(!QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/local-mail")));
// Request some default folders.
{
SpecialMailCollectionsRequestJob *rjob = new SpecialMailCollectionsRequestJob(this);
rjob->requestDefaultCollection(SpecialMailCollections::Outbox);
rjob->requestDefaultCollection(SpecialMailCollections::Drafts);
AKVERIFYEXEC(rjob);
QCOMPARE(spy.count(), 1);
QCOMPARE(defSpy.count(), 1);
QCOMPARE(smct->_t_knownResourceCount(), 1);
QCOMPARE(smct->_t_knownFolderCount(), 3); // Outbox, Drafts, and Root.
QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Drafts));
QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Root));
}
// The maildir should exist now.
QVERIFY(QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/local-mail")));
}
void LocalFoldersRequestJobTest::testRequestWithDefaultResourceAlreadyExisting()
{
SpecialMailCollections *smc = SpecialMailCollections::self();
SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
Q_ASSERT(smc);
Q_ASSERT(smct);
QSignalSpy spy(smc, &SpecialMailCollections::collectionsChanged);
QSignalSpy defSpy(smc, &SpecialMailCollections::defaultCollectionsChanged);
QVERIFY(spy.isValid());
QVERIFY(defSpy.isValid());
// Prerequisites (from testRequestWithNoDefaultResourceExisting()).
QVERIFY(QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/local-mail")));
QVERIFY(!smc->hasDefaultCollection(SpecialMailCollections::Inbox));
QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
const Collection oldOutbox = smc->defaultCollection(SpecialMailCollections::Outbox);
// Request some default folders.
{
SpecialMailCollectionsRequestJob *rjob = new SpecialMailCollectionsRequestJob(this);
rjob->requestDefaultCollection(SpecialMailCollections::Outbox); // Exists previously.
rjob->requestDefaultCollection(SpecialMailCollections::Inbox); // Must be created.
AKVERIFYEXEC(rjob);
QCOMPARE(spy.count(), 1);
QCOMPARE(defSpy.count(), 1);
QCOMPARE(smct->_t_knownResourceCount(), 1);
QCOMPARE(smct->_t_knownFolderCount(), 4); // Inbox, Outbox, Drafts, and Root.
QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Inbox));
QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Drafts));
QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Root));
}
// This should be untouched.
QCOMPARE(smc->defaultCollection(SpecialMailCollections::Outbox), oldOutbox);
}
void LocalFoldersRequestJobTest::testMixedRequest()
{
SpecialMailCollections *smc = SpecialMailCollections::self();
SpecialMailCollectionsTesting *smct = SpecialMailCollectionsTesting::_t_self();
Q_ASSERT(smc);
Q_ASSERT(smct);
QSignalSpy spy(smc, &SpecialMailCollections::collectionsChanged);
QSignalSpy defSpy(smc, &SpecialMailCollections::defaultCollectionsChanged);
QVERIFY(spy.isValid());
QVERIFY(defSpy.isValid());
// Get our knut collection.
Collection res1;
{
CollectionPathResolver *resolver = new CollectionPathResolver(QStringLiteral("res1"), this);
QVERIFY(resolver->exec());
res1 = Collection(resolver->collection());
CollectionFetchJob *fjob = new CollectionFetchJob(res1, CollectionFetchJob::Base, this);
AKVERIFYEXEC(fjob);
Q_ASSERT(fjob->collections().count() == 1);
res1 = fjob->collections().first();
QVERIFY(res1.isValid());
QVERIFY(!res1.resource().isEmpty());
}
// Create a LocalFolder in the knut resource.
Collection knutOutbox;
{
knutOutbox.setName(QLatin1String("my_outbox"));
knutOutbox.setParentCollection(res1);
qDebug() << res1;
knutOutbox.addAttribute(new SpecialCollectionAttribute("outbox"));
CollectionCreateJob *cjob = new CollectionCreateJob(knutOutbox, this);
AKVERIFYEXEC(cjob);
knutOutbox = cjob->collection();
}
// Prerequisites (from the above two functions).
QVERIFY(QFile::exists(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/local-mail")));
QVERIFY(!smc->hasDefaultCollection(SpecialMailCollections::SentMail));
QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
const Collection oldOutbox = smc->defaultCollection(SpecialMailCollections::Outbox);
// Request some folders, both in our default resource and in the knut resource.
{
SpecialMailCollectionsRequestJob *rjob = new SpecialMailCollectionsRequestJob(this);
rjob->requestDefaultCollection(SpecialMailCollections::Outbox); // Exists previously.
rjob->requestDefaultCollection(SpecialMailCollections::SentMail); // Must be created.
rjob->requestCollection(SpecialMailCollections::Outbox,
AgentManager::self()->instance(res1.resource())); // Exists previously, but unregistered with LF.
rjob->requestCollection(SpecialMailCollections::SentMail, AgentManager::self()->instance(res1.resource())); // Must be created.
AKVERIFYEXEC(rjob);
QCOMPARE(spy.count(), 2); // Default resource and knut resource.
QCOMPARE(defSpy.count(), 1);
QCOMPARE(smct->_t_knownResourceCount(), 2);
QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::Outbox));
QVERIFY(smc->hasDefaultCollection(SpecialMailCollections::SentMail));
QVERIFY(smc->hasCollection(SpecialMailCollections::Outbox, AgentManager::self()->instance(res1.resource())));
QVERIFY(smc->hasCollection(SpecialMailCollections::SentMail, AgentManager::self()->instance(res1.resource())));
}
// These should be untouched.
QCOMPARE(smc->defaultCollection(SpecialMailCollections::Outbox), oldOutbox);
QCOMPARE(smc->collection(SpecialMailCollections::Outbox, AgentManager::self()->instance(res1.resource())), knutOutbox);
}
QTEST_AKONADIMAIN(LocalFoldersRequestJobTest)