diff --git a/tests/units/akonadi/akonadidatasourcequeriestest.cpp b/tests/units/akonadi/akonadidatasourcequeriestest.cpp --- a/tests/units/akonadi/akonadidatasourcequeriestest.cpp +++ b/tests/units/akonadi/akonadidatasourcequeriestest.cpp @@ -499,72 +499,58 @@ void shouldNotCrashDuringFindTopLevelWhenFetchJobFailedOrEmpty_data() { - QTest::addColumn("collectionFetchJob"); + QTest::addColumn("colErrorCode"); + QTest::addColumn("colFetchBehavior"); QTest::addColumn("deleteQuery"); - // Two top level collections - Akonadi::Collection col1(42); - col1.setParentCollection(Akonadi::Collection::root()); - Akonadi::Collection col2(42); - col2.setParentCollection(Akonadi::Collection::root()); + QTest::newRow("No error with empty collection list") << int(KJob::NoError) << int(AkonadiFakeStorageBehavior::EmptyFetch) + << false; - Testlib::AkonadiFakeCollectionFetchJob *collectionFetchJob = new Testlib::AkonadiFakeCollectionFetchJob(this); - QTest::newRow("No error with empty collection list") << collectionFetchJob << false; + QTest::newRow("No error with empty collection list (+ query delete)") << int(KJob::NoError) << int(AkonadiFakeStorageBehavior::EmptyFetch) + << true; - collectionFetchJob = new Testlib::AkonadiFakeCollectionFetchJob(this); - collectionFetchJob->setExpectedError(KJob::KilledJobError); - QTest::newRow("Error with empty collection list") << collectionFetchJob << false; + QTest::newRow("Error with empty collection list") << int(KJob::KilledJobError) << int(AkonadiFakeStorageBehavior::EmptyFetch) + << false; - collectionFetchJob = new Testlib::AkonadiFakeCollectionFetchJob(this); - collectionFetchJob->setExpectedError(KJob::KilledJobError); - collectionFetchJob->setCollections(Akonadi::Collection::List() << col1 << col2); - QTest::newRow("Error with collection list") << collectionFetchJob << false; - - collectionFetchJob = new Testlib::AkonadiFakeCollectionFetchJob(this); - QTest::newRow("No error with empty collection list (+ query delete)") << collectionFetchJob << true; + QTest::newRow("Error with empty collection list (+ query delete)") << int(KJob::KilledJobError) << int(AkonadiFakeStorageBehavior::EmptyFetch) + << true; - collectionFetchJob = new Testlib::AkonadiFakeCollectionFetchJob(this); - collectionFetchJob->setExpectedError(KJob::KilledJobError); - QTest::newRow("Error with empty collection list (+ query delete)") << collectionFetchJob << true; + QTest::newRow("Error with collection list") << int(KJob::KilledJobError) << int(AkonadiFakeStorageBehavior::NormalFetch) + << false; - collectionFetchJob = new Testlib::AkonadiFakeCollectionFetchJob(this); - collectionFetchJob->setExpectedError(KJob::KilledJobError); - collectionFetchJob->setCollections(Akonadi::Collection::List() << col1 << col2); - QTest::newRow("Error with collection list (+ query delete)") << collectionFetchJob << true; + QTest::newRow("Error with collection list (+ query delete)") << int(KJob::KilledJobError) << int(AkonadiFakeStorageBehavior::NormalFetch) + << true; } void shouldNotCrashDuringFindTopLevelWhenFetchJobFailedOrEmpty() { // GIVEN - QFETCH(Testlib::AkonadiFakeCollectionFetchJob*, collectionFetchJob); - QFETCH(bool, deleteQuery); + AkonadiFakeData data; - // Storage mock returning the fetch jobs - Utils::MockObject storageMock; - storageMock(&Akonadi::StorageInterface::fetchCollections).when(Akonadi::Collection::root(), - Akonadi::StorageInterface::Recursive, - Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes) - .thenReturn(collectionFetchJob); + // Two top level collections + data.createCollection(GenCollection().withId(42).withRootAsParent().withTaskContent()); + data.createCollection(GenCollection().withId(43).withRootAsParent().withNoteContent()); - // Serializer mock - Utils::MockObject serializerMock; + QScopedPointer queries(new Akonadi::DataSourceQueries(Akonadi::StorageInterface::Ptr(data.createStorage()), + Akonadi::SerializerInterface::Ptr(new Akonadi::Serializer), + Akonadi::MonitorInterface::Ptr(data.createMonitor()))); + QFETCH(int, colErrorCode); + QFETCH(int, colFetchBehavior); + data.storageBehavior().setFetchCollectionsErrorCode(Akonadi::Collection::root().id(), colErrorCode); + data.storageBehavior().setFetchCollectionsBehavior(Akonadi::Collection::root().id(), + AkonadiFakeStorageBehavior::FetchBehavior(colFetchBehavior)); + + QFETCH(bool, deleteQuery); // WHEN - QScopedPointer queries(new Akonadi::DataSourceQueries(storageMock.getInstance(), - serializerMock.getInstance(), - Testlib::AkonadiFakeMonitor::Ptr::create())); Domain::QueryResult::Ptr result = queries->findTopLevel(); if (deleteQuery) delete queries.take(); // THEN QVERIFY(result->data().isEmpty()); - QTest::qWait(150); - QVERIFY(storageMock(&Akonadi::StorageInterface::fetchCollections).when(Akonadi::Collection::root(), - Akonadi::StorageInterface::Recursive, - Akonadi::StorageInterface::Tasks | Akonadi::StorageInterface::Notes) - .exactly(1)); + TestHelpers::waitForEmptyJobQueue(); QCOMPARE(result->data().size(), 0); }