summaryrefslogtreecommitdiffstats
path: root/tests/clientapitest.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-10 12:05:39 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-10 12:05:39 +0100
commit10d19014fe2c9c02f2bc3e19732cbe340e316076 (patch)
tree94d8bfee0c97e4496a439bf33b0eb91471468597 /tests/clientapitest.cpp
parentfa1f58e8a83c6dc524ee0540f450065014e1a825 (diff)
downloadsink-10d19014fe2c9c02f2bc3e19732cbe340e316076.tar.gz
sink-10d19014fe2c9c02f2bc3e19732cbe340e316076.zip
A result model
The result model drives the data retrieval and provides the interace for consumers
Diffstat (limited to 'tests/clientapitest.cpp')
-rw-r--r--tests/clientapitest.cpp117
1 files changed, 94 insertions, 23 deletions
diff --git a/tests/clientapitest.cpp b/tests/clientapitest.cpp
index 665d29b..5bfad4b 100644
--- a/tests/clientapitest.cpp
+++ b/tests/clientapitest.cpp
@@ -6,28 +6,45 @@
6#include "facade.h" 6#include "facade.h"
7#include "synclistresult.h" 7#include "synclistresult.h"
8#include "resourceconfig.h" 8#include "resourceconfig.h"
9#include "modelresult.h"
10#include "resultprovider.h"
9 11
10class DummyResourceFacade : public Akonadi2::StoreFacade<Akonadi2::ApplicationDomain::Event> 12template <typename T>
13class DummyResourceFacade : public Akonadi2::StoreFacade<T>
11{ 14{
12public: 15public:
16 static std::shared_ptr<DummyResourceFacade<T> > registerFacade()
17 {
18 auto facade = std::make_shared<DummyResourceFacade<T> >();
19 Akonadi2::FacadeFactory::instance().registerFacade<T, DummyResourceFacade<T> >("dummyresource",
20 [facade](const QByteArray &instanceIdentifier) {
21 return facade;
22 }
23 );
24 return facade;
25 }
13 ~DummyResourceFacade(){}; 26 ~DummyResourceFacade(){};
14 KAsync::Job<void> create(const Akonadi2::ApplicationDomain::Event &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); }; 27 KAsync::Job<void> create(const T &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); };
15 KAsync::Job<void> modify(const Akonadi2::ApplicationDomain::Event &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); }; 28 KAsync::Job<void> modify(const T &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); };
16 KAsync::Job<void> remove(const Akonadi2::ApplicationDomain::Event &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); }; 29 KAsync::Job<void> remove(const T &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); };
17 KAsync::Job<void> load(const Akonadi2::Query &query, const QSharedPointer<Akonadi2::ResultProvider<Akonadi2::ApplicationDomain::Event::Ptr> > &resultProvider) Q_DECL_OVERRIDE 30 KAsync::Job<void> load(const Akonadi2::Query &query, const QSharedPointer<Akonadi2::ResultProvider<typename T::Ptr> > &resultProvider) Q_DECL_OVERRIDE
18 { 31 {
19 capturedResultProvider = resultProvider; 32 capturedResultProvider = resultProvider;
20 return KAsync::start<void>([this, resultProvider, query]() { 33 return KAsync::start<void>([this, resultProvider, query]() {
21 for (const auto &res : results) { 34 for (const auto &res : results) {
22 resultProvider->add(res); 35 qDebug() << "Parent filter " << query.propertyFilter.value("parent").toByteArray() << res->identifier();
36 if (!query.propertyFilter.contains("parent") || query.propertyFilter.value("parent").toByteArray() == res->getProperty("parent").toByteArray()) {
37 resultProvider->add(res);
38 }
23 } 39 }
24 }); 40 });
25 } 41 }
26 42
27 QList<Akonadi2::ApplicationDomain::Event::Ptr> results; 43 QList<typename T::Ptr> results;
28 QWeakPointer<Akonadi2::ResultProvider<Akonadi2::ApplicationDomain::Event::Ptr> > capturedResultProvider; 44 QWeakPointer<Akonadi2::ResultProvider<typename T::Ptr> > capturedResultProvider;
29}; 45};
30 46
47
31/** 48/**
32 * Test of the client api implementation. 49 * Test of the client api implementation.
33 * 50 *
@@ -38,17 +55,6 @@ class ClientAPITest : public QObject
38 Q_OBJECT 55 Q_OBJECT
39private Q_SLOTS: 56private Q_SLOTS:
40 57
41 static std::shared_ptr<DummyResourceFacade> registerDummyFacade()
42 {
43 auto facade = std::make_shared<DummyResourceFacade>();
44 Akonadi2::FacadeFactory::instance().registerFacade<Akonadi2::ApplicationDomain::Event, DummyResourceFacade>("dummyresource",
45 [facade](const QByteArray &instanceIdentifier) {
46 return facade;
47 }
48 );
49 return facade;
50 }
51
52 void initTestCase() 58 void initTestCase()
53 { 59 {
54 Akonadi2::FacadeFactory::instance().resetFactory(); 60 Akonadi2::FacadeFactory::instance().resetFactory();
@@ -57,8 +63,8 @@ private Q_SLOTS:
57 63
58 void testLoad() 64 void testLoad()
59 { 65 {
60 auto facade = registerDummyFacade(); 66 auto facade = DummyResourceFacade<Akonadi2::ApplicationDomain::Event>::registerFacade();
61 facade->results << QSharedPointer<Akonadi2::ApplicationDomain::Event>::create("resource", "id", 0, QSharedPointer<Akonadi2::ApplicationDomain::BufferAdaptor>()); 67 facade->results << QSharedPointer<Akonadi2::ApplicationDomain::Event>::create("resource", "id", 0, QSharedPointer<Akonadi2::ApplicationDomain::MemoryBufferAdaptor>::create());
62 ResourceConfig::addResource("dummyresource.instance1", "dummyresource"); 68 ResourceConfig::addResource("dummyresource.instance1", "dummyresource");
63 69
64 Akonadi2::Query query; 70 Akonadi2::Query query;
@@ -73,8 +79,8 @@ private Q_SLOTS:
73 //The query provider is supposed to delete itself 79 //The query provider is supposed to delete itself
74 void testQueryLifetime() 80 void testQueryLifetime()
75 { 81 {
76 auto facade = registerDummyFacade(); 82 auto facade = DummyResourceFacade<Akonadi2::ApplicationDomain::Event>::registerFacade();
77 facade->results << QSharedPointer<Akonadi2::ApplicationDomain::Event>::create("resource", "id", 0, QSharedPointer<Akonadi2::ApplicationDomain::BufferAdaptor>()); 83 facade->results << QSharedPointer<Akonadi2::ApplicationDomain::Event>::create("resource", "id", 0, QSharedPointer<Akonadi2::ApplicationDomain::MemoryBufferAdaptor>::create());
78 ResourceConfig::addResource("dummyresource.instance1", "dummyresource"); 84 ResourceConfig::addResource("dummyresource.instance1", "dummyresource");
79 85
80 Akonadi2::Query query; 86 Akonadi2::Query query;
@@ -119,6 +125,71 @@ private Q_SLOTS:
119 } 125 }
120 } 126 }
121 127
128 void testModelSingle()
129 {
130 auto facade = DummyResourceFacade<Akonadi2::ApplicationDomain::Folder>::registerFacade();
131 facade->results << QSharedPointer<Akonadi2::ApplicationDomain::Folder>::create("resource", "id", 0, QSharedPointer<Akonadi2::ApplicationDomain::MemoryBufferAdaptor>::create());
132 ResourceConfig::addResource("dummyresource.instance1", "dummyresource");
133
134 Akonadi2::Query query;
135 query.resources << "dummyresource.instance1";
136 query.liveQuery = false;
137
138 auto model = new ModelResult<Akonadi2::ApplicationDomain::Folder>(query, QList<QByteArray>() << "summary" << "uid");
139 model->fetchMore(QModelIndex());
140 QTRY_COMPARE(model->rowCount(), 1);
141 }
142
143 void testModelNested()
144 {
145 auto facade = DummyResourceFacade<Akonadi2::ApplicationDomain::Folder>::registerFacade();
146 auto folder = QSharedPointer<Akonadi2::ApplicationDomain::Folder>::create("resource", "id", 0, QSharedPointer<Akonadi2::ApplicationDomain::MemoryBufferAdaptor>::create());
147 auto subfolder = QSharedPointer<Akonadi2::ApplicationDomain::Folder>::create("resource", "subId", 0, QSharedPointer<Akonadi2::ApplicationDomain::MemoryBufferAdaptor>::create());
148 subfolder->setProperty("parent", "id");
149 facade->results << folder << subfolder;
150 ResourceConfig::addResource("dummyresource.instance1", "dummyresource");
151
152 //Test
153 Akonadi2::Query query;
154 query.resources << "dummyresource.instance1";
155 query.liveQuery = false;
156
157 auto model = new ModelResult<Akonadi2::ApplicationDomain::Folder>(query, QList<QByteArray>() << "summary" << "uid");
158 model->fetchMore(QModelIndex());
159 QTRY_COMPARE(model->rowCount(), 1);
160 model->fetchMore(model->index(0, 0));
161 QTRY_COMPARE(model->rowCount(model->index(0, 0)), 1);
162 }
163
164 // void testModelNestedLive()
165 // {
166 // auto facade = DummyResourceFacade<Akonadi2::ApplicationDomain::Folder>::registerFacade();
167 // auto folder = QSharedPointer<Akonadi2::ApplicationDomain::Folder>::create("resource", "id", 0, QSharedPointer<Akonadi2::ApplicationDomain::MemoryBufferAdaptor>::create());
168 // auto subfolder = QSharedPointer<Akonadi2::ApplicationDomain::Folder>::create("resource", "subId", 0, QSharedPointer<Akonadi2::ApplicationDomain::MemoryBufferAdaptor>::create());
169 // subfolder->setProperty("parent", "id");
170 // facade->results << folder << subfolder;
171 // ResourceConfig::addResource("dummyresource.instance1", "dummyresource");
172 //
173 // //Test
174 // Akonadi2::Query query;
175 // query.resources << "dummyresource.instance1";
176 // query.liveQuery = true
177 //
178 // auto model = new ModelResult<Akonadi2::ApplicationDomain::Folder>(query, QList<QByteArray>() << "summary" << "uid");
179 // model->fetchMore(QModelIndex());
180 // QTRY_COMPARE(model->rowCount(), 1);
181 // model->fetchMore(model->index(0, 0));
182 // QTRY_COMPARE(model->rowCount(model->index(0, 0)), 1);
183 //
184 // auto resultProvider = facade->capturedResultProvider.toStrongRef();
185 //
186 // //A modification can also be a move
187 // // resultProvider->modify();
188 //
189 // // resultProvider->remove();
190 // }
191
192
122}; 193};
123 194
124QTEST_MAIN(ClientAPITest) 195QTEST_MAIN(ClientAPITest)