diff --git a/src/akonadi/akonadidatasourcequeries.h b/src/akonadi/akonadidatasourcequeries.h --- a/src/akonadi/akonadidatasourcequeries.h +++ b/src/akonadi/akonadidatasourcequeries.h @@ -41,7 +41,8 @@ typedef Domain::QueryResultProvider DataSourceProvider; typedef Domain::QueryResult DataSourceResult; - DataSourceQueries(const StorageInterface::Ptr &storage, + DataSourceQueries(const StorageInterface::FetchContentTypes &contentTypes, + const StorageInterface::Ptr &storage, const SerializerInterface::Ptr &serializer, const MonitorInterface::Ptr &monitor); @@ -59,6 +60,7 @@ CollectionInputQuery::PredicateFunction createFetchPredicate(const Collection &root) const; CollectionInputQuery::PredicateFunction createSearchPredicate(const Collection &root) const; + StorageInterface::FetchContentTypes m_contentTypes; SerializerInterface::Ptr m_serializer; LiveQueryHelpers::Ptr m_helpers; LiveQueryIntegrator::Ptr m_integrator; diff --git a/src/akonadi/akonadidatasourcequeries.cpp b/src/akonadi/akonadidatasourcequeries.cpp --- a/src/akonadi/akonadidatasourcequeries.cpp +++ b/src/akonadi/akonadidatasourcequeries.cpp @@ -26,10 +26,11 @@ using namespace Akonadi; -DataSourceQueries::DataSourceQueries(const StorageInterface::Ptr &storage, +DataSourceQueries::DataSourceQueries(const StorageInterface::FetchContentTypes &contentTypes, const StorageInterface::Ptr &storage, const SerializerInterface::Ptr &serializer, const MonitorInterface::Ptr &monitor) - : m_serializer(serializer), + : m_contentTypes(contentTypes), + m_serializer(serializer), m_helpers(new LiveQueryHelpers(serializer, storage)), m_integrator(new LiveQueryIntegrator(serializer, monitor)) { @@ -61,7 +62,7 @@ DataSourceQueries::DataSourceResult::Ptr DataSourceQueries::findTopLevel() const { - auto fetch = m_helpers->fetchCollections(Collection::root(), StorageInterface::Tasks | StorageInterface::Notes); + auto fetch = m_helpers->fetchCollections(Collection::root(), m_contentTypes); auto predicate = createFetchPredicate(Collection::root()); m_integrator->bind(m_findTopLevel, fetch, predicate); return m_findTopLevel->result(); @@ -71,7 +72,7 @@ { Collection root = m_serializer->createCollectionFromDataSource(source); auto &query = m_findChildren[root.id()]; - auto fetch = m_helpers->fetchCollections(root, StorageInterface::Tasks | StorageInterface::Notes); + auto fetch = m_helpers->fetchCollections(root, m_contentTypes); auto predicate = createFetchPredicate(root); m_integrator->bind(query, fetch, predicate); return query->result(); @@ -97,7 +98,7 @@ DataSourceQueries::DataSourceResult::Ptr DataSourceQueries::findSearchTopLevel() const { - auto fetch = m_helpers->searchCollections(Collection::root(), &m_searchTerm, Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes); + auto fetch = m_helpers->searchCollections(Collection::root(), &m_searchTerm, m_contentTypes); auto predicate = createSearchPredicate(Collection::root()); m_integrator->bind(m_findSearchTopLevel, fetch, predicate); return m_findSearchTopLevel->result(); @@ -107,7 +108,7 @@ { Collection root = m_serializer->createCollectionFromDataSource(source); auto &query = m_findSearchChildren[root.id()]; - auto fetch = m_helpers->searchCollections(root, &m_searchTerm, Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes); + auto fetch = m_helpers->searchCollections(root, &m_searchTerm, m_contentTypes); auto predicate = createSearchPredicate(root); m_integrator->bind(query, fetch, predicate); return query->result(); diff --git a/src/renku/app/dependencies.cpp b/src/renku/app/dependencies.cpp --- a/src/renku/app/dependencies.cpp +++ b/src/renku/app/dependencies.cpp @@ -66,10 +66,12 @@ Akonadi::ContextRepository(Akonadi::StorageInterface*, Akonadi::SerializerInterface*)>(); - deps.add(); + deps.add([] (Utils::DependencyManager *deps) { + return new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Notes, + deps->create(), + deps->create(), + deps->create()); + }); deps.add(); - deps.add(); + deps.add([] (Utils::DependencyManager *deps) { + return new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks, + deps->create(), + deps->create(), + deps->create()); + }); deps.add queries(new Akonadi::DataSourceQueries( Akonadi::StorageInterface::Ptr(data.createStorage()), - Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), - Akonadi::MonitorInterface::Ptr(data.createMonitor()))); + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), + Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), + Akonadi::MonitorInterface::Ptr(data.createMonitor()))); Domain::QueryResult::Ptr result = queryFunction(queries.data()); result->data(); @@ -130,7 +131,8 @@ data.createCollection(GenCollection().withId(43).withName("43Note").withRootAsParent().withNoteContent()); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -180,7 +182,8 @@ data.createCollection(GenCollection().withId(47).withName("47Note").withParent(45).withNoteContent()); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -213,7 +216,8 @@ QFETCH(Akonadi::StorageInterface::FetchContentType, contentType); QFETCH(QueryFunction, queryFunction); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), Akonadi::MonitorInterface::Ptr(data.createMonitor()))) ; @@ -255,9 +259,10 @@ // One child collection with notes data.createCollection(GenCollection().withId(47).withName("47Note").withParent(46).withNoteContent()); - QScopedPointer queries(new Akonadi::DataSourceQueries( Akonadi::StorageInterface::Ptr(data.createStorage()), - Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), - Akonadi::MonitorInterface::Ptr(data.createMonitor()))); + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), + Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), + Akonadi::MonitorInterface::Ptr(data.createMonitor()))); Domain::QueryResult::Ptr result = queryFunction(queries.data()); TestHelpers::waitForEmptyJobQueue(); @@ -303,9 +308,10 @@ // One child collcetion with notes data.createCollection(GenCollection().withId(47).withName("47Note").withParent(46).withNoteContent()); - QScopedPointer queries(new Akonadi::DataSourceQueries( Akonadi::StorageInterface::Ptr(data.createStorage()), - Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), - Akonadi::MonitorInterface::Ptr(data.createMonitor()))); + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), + Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), + Akonadi::MonitorInterface::Ptr(data.createMonitor()))); Domain::QueryResult::Ptr result = queryFunction(queries.data()); // Even though the pointer didn't change it's convenient to user if we call @@ -338,6 +344,24 @@ } } + void shouldLookInAllReportedForTopLevelSources_data() + { + QTest::addColumn("contentTypes"); + QTest::addColumn("expectedNames"); + + auto expectedNames = QStringList(); + expectedNames << "42Task" << "44Note"; + QTest::newRow("tasks and notes") << int(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes) << expectedNames; + + expectedNames.clear(); + expectedNames << "42Task"; + QTest::newRow("tasks") << int(Akonadi::StorageInterface::Tasks) << expectedNames; + + expectedNames.clear(); + expectedNames << "44Note"; + QTest::newRow("notes") << int(Akonadi::StorageInterface::Notes) << expectedNames; + } + void shouldLookInAllReportedForTopLevelSources() { // GIVEN @@ -354,7 +378,9 @@ data.createCollection(GenCollection().withId(45).withName("45NoteChild").withParent(44).withNoteContent()); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QFETCH(int, contentTypes); + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::FetchContentTypes(contentTypes), + Akonadi::StorageInterface::Ptr(data.createStorage()), Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -366,16 +392,24 @@ QVERIFY(result->data().isEmpty()); TestHelpers::waitForEmptyJobQueue(); - QCOMPARE(result->data().at(0)->name(), QString("42Task")); - QCOMPARE(result->data().at(1)->name(), QString("44Note")); + auto actualNames = QStringList(); + std::transform(result->data().constBegin(), result->data().constEnd(), + std::back_inserter(actualNames), + [] (const Domain::DataSource::Ptr &source) { return source->name(); }); + actualNames.sort(); + + QFETCH(QStringList, expectedNames); + expectedNames.sort(); + QCOMPARE(actualNames, expectedNames); } void shouldReactToCollectionAddsForTopLevelSources() { // GIVEN AkonadiFakeData data; - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -404,9 +438,10 @@ data.createCollection(GenCollection().withId(44).withName("43TaskChild").withParent(42).withTaskContent()); data.createCollection(GenCollection().withId(45).withName("43NoteChild").withParent(43).withNoteContent()); - QScopedPointer queries(new Akonadi::DataSourceQueries( Akonadi::StorageInterface::Ptr(data.createStorage()), - Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), - Akonadi::MonitorInterface::Ptr(data.createMonitor()))); + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), + Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), + Akonadi::MonitorInterface::Ptr(data.createMonitor()))); Domain::QueryResult::Ptr result = queries->findTopLevel(); TestHelpers::waitForEmptyJobQueue(); @@ -430,9 +465,10 @@ data.createCollection(GenCollection().withId(43).withName("43Note").withRootAsParent().withNoteContent()); data.createCollection(GenCollection().withId(44).withName("44NoteChild").withParent(43).withNoteContent()); - QScopedPointer queries(new Akonadi::DataSourceQueries( Akonadi::StorageInterface::Ptr(data.createStorage()), - Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), - Akonadi::MonitorInterface::Ptr(data.createMonitor()))); + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), + Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), + Akonadi::MonitorInterface::Ptr(data.createMonitor()))); Domain::QueryResult::Ptr result = queries->findTopLevel(); @@ -465,7 +501,8 @@ data.createCollection(GenCollection().withId(43).withName("43Note").withRootAsParent().withNoteContent()); data.createCollection(GenCollection().withId(44).withName("44NoteChild").withParent(43).withNoteContent()); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -515,7 +552,8 @@ data.createCollection(GenCollection().withId(42).withRootAsParent().withTaskContent()); data.createCollection(GenCollection().withId(43).withRootAsParent().withNoteContent()); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), Akonadi::MonitorInterface::Ptr(data.createMonitor()))); QFETCH(int, colErrorCode); @@ -538,6 +576,24 @@ QCOMPARE(result->data().size(), 0); } + void shouldLookInAllReportedForChildSources_data() + { + QTest::addColumn("contentTypes"); + QTest::addColumn("expectedNames"); + + auto expectedNames = QStringList(); + expectedNames << "43TaskFirstChild" << "45NoteSecondChild"; + QTest::newRow("tasks and notes") << int(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes) << expectedNames; + + expectedNames.clear(); + expectedNames << "43TaskFirstChild"; + QTest::newRow("tasks") << int(Akonadi::StorageInterface::Tasks) << expectedNames; + + expectedNames.clear(); + expectedNames << "45NoteSecondChild"; + QTest::newRow("notes") << int(Akonadi::StorageInterface::Notes) << expectedNames; + } + void shouldLookInAllReportedForChildSources() { // GIVEN @@ -554,7 +610,9 @@ Domain::DataSource::Ptr topLevelDataSource = serializer->createDataSourceFromCollection(data.collection(42), Akonadi::SerializerInterface::BaseName); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QFETCH(int, contentTypes); + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::FetchContentTypes(contentTypes), + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -566,9 +624,15 @@ QVERIFY(result->data().isEmpty()); TestHelpers::waitForEmptyJobQueue(); - QCOMPARE(result->data().size(), 2); - QCOMPARE(result->data().at(0)->name(), QString("43TaskFirstChild")); - QCOMPARE(result->data().at(1)->name(), QString("45NoteSecondChild")); + auto actualNames = QStringList(); + std::transform(result->data().constBegin(), result->data().constEnd(), + std::back_inserter(actualNames), + [] (const Domain::DataSource::Ptr &source) { return source->name(); }); + actualNames.sort(); + + QFETCH(QStringList, expectedNames); + expectedNames.sort(); + QCOMPARE(actualNames, expectedNames); } void shouldReactToCollectionAddsForChildSources() @@ -583,7 +647,8 @@ auto serializer = Akonadi::Serializer::Ptr(new Akonadi::Serializer); Domain::DataSource::Ptr topLevelDataSource = serializer->createDataSourceFromCollection(data.collection(42), Akonadi::SerializerInterface::BaseName); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -615,7 +680,8 @@ auto serializer = Akonadi::Serializer::Ptr(new Akonadi::Serializer); Domain::DataSource::Ptr topLevelDataSource = serializer->createDataSourceFromCollection(data.collection(42), Akonadi::SerializerInterface::BaseName); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -645,7 +711,8 @@ auto serializer = Akonadi::Serializer::Ptr(new Akonadi::Serializer); Domain::DataSource::Ptr topLevelDataSource = serializer->createDataSourceFromCollection(data.collection(42), Akonadi::SerializerInterface::BaseName); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -682,7 +749,8 @@ auto serializer = Akonadi::Serializer::Ptr(new Akonadi::Serializer); Domain::DataSource::Ptr topLevelDataSource = serializer->createDataSourceFromCollection(data.collection(42), Akonadi::SerializerInterface::BaseName); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -745,7 +813,8 @@ AkonadiFakeStorageBehavior::FetchBehavior(colFetchBehavior)); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -760,6 +829,34 @@ QCOMPARE(result->data().size(), 0); } + void shouldLookInAllReportedForSearchTopLevelSources_data() + { + QTest::addColumn("contentTypes"); + QTest::addColumn("expectedColNames"); + QTest::addColumn("expectedTitiNames"); + + auto expectedColNames = QStringList(); + auto expectedTitiNames = QStringList(); + expectedColNames << "TaskToto" << "NoteCol"; + expectedTitiNames << "NoteTiti" << "TaskTiti"; + QTest::newRow("tasks and notes") << int(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes) + << expectedColNames << expectedTitiNames; + + expectedColNames.clear(); + expectedTitiNames.clear(); + expectedColNames << "TaskToto"; + expectedTitiNames << "TaskTiti"; + QTest::newRow("tasks") << int(Akonadi::StorageInterface::Tasks) + << expectedColNames << expectedTitiNames; + + expectedColNames.clear(); + expectedTitiNames.clear(); + expectedColNames << "NoteCol"; + expectedTitiNames << "NoteTiti"; + QTest::newRow("notes") << int(Akonadi::StorageInterface::Notes) + << expectedColNames << expectedTitiNames; + } + void shouldLookInAllReportedForSearchTopLevelSources() { // GIVEN @@ -778,9 +875,11 @@ QString searchTerm("Col"); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries( Akonadi::StorageInterface::Ptr(data.createStorage()), - Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), - Akonadi::MonitorInterface::Ptr(data.createMonitor()))); + QFETCH(int, contentTypes); + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::FetchContentTypes(contentTypes), + Akonadi::StorageInterface::Ptr(data.createStorage()), + Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), + Akonadi::MonitorInterface::Ptr(data.createMonitor()))); queries->setSearchTerm(searchTerm); Domain::QueryResult::Ptr result = queries->findSearchTopLevel(); @@ -791,20 +890,32 @@ QVERIFY(result->data().isEmpty()); TestHelpers::waitForEmptyJobQueue(); - QCOMPARE(result->data().size(), 2); - QCOMPARE(result->data().at(0)->name(), QString("TaskToto")); - QCOMPARE(result->data().at(1)->name(), QString("NoteCol")); + auto actualNames = QStringList(); + std::transform(result->data().constBegin(), result->data().constEnd(), + std::back_inserter(actualNames), + [] (const Domain::DataSource::Ptr &source) { return source->name(); }); + actualNames.sort(); + + QFETCH(QStringList, expectedColNames); + expectedColNames.sort(); + QCOMPARE(actualNames, expectedColNames); // WHEN QString searchTerm2("Titi"); queries->setSearchTerm(searchTerm2); // THEN TestHelpers::waitForEmptyJobQueue(); - QCOMPARE(result->data().size(), 2); - QCOMPARE(result->data().at(0)->name(), QString("NoteTiti")); - QCOMPARE(result->data().at(1)->name(), QString("TaskTiti")); + actualNames.clear(); + std::transform(result->data().constBegin(), result->data().constEnd(), + std::back_inserter(actualNames), + [] (const Domain::DataSource::Ptr &source) { return source->name(); }); + actualNames.sort(); + + QFETCH(QStringList, expectedTitiNames); + expectedTitiNames.sort(); + QCOMPARE(actualNames, expectedTitiNames); } void shouldReactToCollectionAddsForSearchTopLevelSources() @@ -814,7 +925,8 @@ QString searchTerm("col"); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), Akonadi::MonitorInterface::Ptr(data.createMonitor()))); queries->setSearchTerm(searchTerm); @@ -841,7 +953,8 @@ QString searchTerm("Toto"); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), Akonadi::MonitorInterface::Ptr(data.createMonitor()))); queries->setSearchTerm(searchTerm); @@ -872,9 +985,10 @@ QString searchTerm("Col"); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries( Akonadi::StorageInterface::Ptr(data.createStorage()), - Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), - Akonadi::MonitorInterface::Ptr(data.createMonitor()))); + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), + Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), + Akonadi::MonitorInterface::Ptr(data.createMonitor()))); queries->setSearchTerm(searchTerm); Domain::QueryResult::Ptr result = queries->findSearchTopLevel(); bool replaceHandlerCalled = false; @@ -934,7 +1048,8 @@ auto serializer = Akonadi::Serializer::Ptr(new Akonadi::Serializer); auto monitor = Akonadi::MonitorInterface::Ptr(data.createMonitor()); - QScopedPointer queries(new Akonadi::DataSourceQueries(storage, + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + storage, serializer, monitor)); @@ -966,7 +1081,8 @@ data.createCollection(GenCollection().withId(42).withRootAsParent().withName("parent")); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -979,6 +1095,33 @@ QCOMPARE(Utils::JobHandler::jobCount(), 0); } + void shouldLookInAllReportedForSearchChildSources_data() + { + QTest::addColumn("contentTypes"); + QTest::addColumn("expectedColNames"); + QTest::addColumn("expectedTotoNames"); + + auto expectedColNames = QStringList(); + auto expectedTotoNames = QStringList(); + expectedColNames << "NoteCol1"; + expectedTotoNames << "TaskToto"; + QTest::newRow("tasks and notes") << int(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes) + << expectedColNames << expectedTotoNames; + + expectedColNames.clear(); + expectedTotoNames.clear(); + expectedColNames << "NoteCol1"; + expectedTotoNames << "TaskToto"; + QTest::newRow("tasks") << int(Akonadi::StorageInterface::Tasks) + << expectedColNames << expectedTotoNames; + + expectedColNames.clear(); + expectedTotoNames.clear(); + expectedColNames << "NoteCol1"; + QTest::newRow("notes") << int(Akonadi::StorageInterface::Notes) + << expectedColNames << expectedTotoNames; + } + void shouldLookInAllReportedForSearchChildSources() { // GIVEN @@ -1002,7 +1145,9 @@ Domain::DataSource::Ptr parentSource = serializer->createDataSourceFromCollection(data.collection(42), Akonadi::SerializerInterface::BaseName); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QFETCH(int, contentTypes); + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::FetchContentTypes(contentTypes), + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -1015,17 +1160,32 @@ QVERIFY(result->data().isEmpty()); TestHelpers::waitForEmptyJobQueue(); - QCOMPARE(result->data().size(), 1); - QCOMPARE(result->data().at(0)->name(), QString("NoteCol1")); + auto actualNames = QStringList(); + std::transform(result->data().constBegin(), result->data().constEnd(), + std::back_inserter(actualNames), + [] (const Domain::DataSource::Ptr &source) { return source->name(); }); + actualNames.sort(); + + QFETCH(QStringList, expectedColNames); + expectedColNames.sort(); + QCOMPARE(actualNames, expectedColNames); // WHEN QString searchTerm2("toto"); queries->setSearchTerm(searchTerm2); // THEN TestHelpers::waitForEmptyJobQueue(); - QCOMPARE(result->data().size(), 1); - QCOMPARE(result->data().at(0)->name(), QString("TaskToto")); + + actualNames.clear(); + std::transform(result->data().constBegin(), result->data().constEnd(), + std::back_inserter(actualNames), + [] (const Domain::DataSource::Ptr &source) { return source->name(); }); + actualNames.sort(); + + QFETCH(QStringList, expectedTotoNames); + expectedTotoNames.sort(); + QCOMPARE(actualNames, expectedTotoNames); } void shouldReactToCollectionAddsForSearchChildSources() @@ -1042,7 +1202,8 @@ auto serializer = Akonadi::Serializer::Ptr(new Akonadi::Serializer); Domain::DataSource::Ptr parentSource = serializer->createDataSourceFromCollection(data.collection(42), Akonadi::SerializerInterface::BaseName); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -1076,7 +1237,8 @@ auto serializer = Akonadi::Serializer::Ptr(new Akonadi::Serializer); Domain::DataSource::Ptr parentSource = serializer->createDataSourceFromCollection(data.collection(42), Akonadi::SerializerInterface::BaseName); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -1111,7 +1273,8 @@ Domain::DataSource::Ptr parentSource = serializer->createDataSourceFromCollection(data.collection(42), Akonadi::SerializerInterface::BaseName); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor()))); queries->setSearchTerm(searchTerm); @@ -1179,7 +1342,8 @@ data.storageBehavior().setFetchCollectionsBehavior(data.collection(42).id(), AkonadiFakeStorageBehavior::FetchBehavior(colFetchBehavior)); - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor()))); @@ -1207,7 +1371,8 @@ Domain::DataSource::Ptr parentSource = serializer->createDataSourceFromCollection(data.collection(42), Akonadi::SerializerInterface::BaseName); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes, + Akonadi::StorageInterface::Ptr(data.createStorage()), serializer, Akonadi::MonitorInterface::Ptr(data.createMonitor())));