#include #include #include #include "clientapi.h" #include "facade.h" #include "synclistresult.h" #include "resourceconfig.h" class DummyResourceFacade : public Akonadi2::StoreFacade { public: ~DummyResourceFacade(){}; KAsync::Job create(const Akonadi2::ApplicationDomain::Event &domainObject) Q_DECL_OVERRIDE { return KAsync::null(); }; KAsync::Job modify(const Akonadi2::ApplicationDomain::Event &domainObject) Q_DECL_OVERRIDE { return KAsync::null(); }; KAsync::Job remove(const Akonadi2::ApplicationDomain::Event &domainObject) Q_DECL_OVERRIDE { return KAsync::null(); }; KAsync::Job load(const Akonadi2::Query &query, const QSharedPointer > &resultProvider) Q_DECL_OVERRIDE { capturedResultProvider = resultProvider; return KAsync::start([this, resultProvider, query]() { for (const auto &res : results) { resultProvider->add(res); } }); } QList results; QWeakPointer > capturedResultProvider; }; class ClientAPITest : public QObject { Q_OBJECT private Q_SLOTS: static std::shared_ptr registerDummyFacade() { auto facade = std::make_shared(); Akonadi2::FacadeFactory::instance().registerFacade("dummyresource", [facade](const QByteArray &instanceIdentifier) { return facade; } ); return facade; } void initTestCase() { Akonadi2::FacadeFactory::instance().resetFactory(); ResourceConfig::clear(); } void testLoad() { auto facade = registerDummyFacade(); facade->results << QSharedPointer::create("resource", "id", 0, QSharedPointer()); ResourceConfig::addResource("dummyresource.instance1", "dummyresource"); Akonadi2::Query query; query.resources << "dummyresource.instance1"; query.liveQuery = false; async::SyncListResult result(Akonadi2::Store::load(query)); result.exec(); QCOMPARE(result.size(), 1); } //The query provider is supposed to delete itself void testQueryLifetime() { auto facade = registerDummyFacade(); facade->results << QSharedPointer::create("resource", "id", 0, QSharedPointer()); ResourceConfig::addResource("dummyresource.instance1", "dummyresource"); Akonadi2::Query query; query.resources << "dummyresource.instance1"; query.liveQuery = true; { async::SyncListResult result(Akonadi2::Store::load(query)); result.exec(); QCOMPARE(result.size(), 1); } //It's running in a separate thread, so we have to wait for a moment until the query provider deletes itself. QTRY_VERIFY(!facade->capturedResultProvider); } void resourceManagement() { ResourceConfig::clear(); Akonadi2::FacadeFactory::instance().registerStaticFacades(); Akonadi2::ApplicationDomain::AkonadiResource res; res.setProperty("identifier", "dummyresource.identifier1"); res.setProperty("type", "dummyresource"); Akonadi2::Store::create(res).exec().waitForFinished(); { Akonadi2::Query query; query.propertyFilter.insert("type", "dummyresource"); async::SyncListResult result(Akonadi2::Store::load(query)); result.exec(); QCOMPARE(result.size(), 1); } Akonadi2::Store::remove(res).exec().waitForFinished(); { Akonadi2::Query query; query.propertyFilter.insert("type", "dummyresource"); async::SyncListResult result(Akonadi2::Store::load(query)); result.exec(); QCOMPARE(result.size(), 0); } } }; QTEST_MAIN(ClientAPITest) #include "clientapitest.moc"