From f400cee1d5896577c22626d0cf50478057989857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Nicole?= Date: Mon, 28 May 2018 10:08:49 +0200 Subject: Implement ranged queries Summary: Notes: - For now, only for QDateTime indexes - Invalid QDateTimes are stored in the index (subject to change) - Should be a drop-in replacement from ValueIndexes (except for `In` and `Contains` queries) Reviewers: cmollekopf Tags: #sink Differential Revision: https://phabricator.kde.org/D13105 --- tests/querytest.cpp | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) (limited to 'tests') diff --git a/tests/querytest.cpp b/tests/querytest.cpp index fa016a2..36b6e90 100644 --- a/tests/querytest.cpp +++ b/tests/querytest.cpp @@ -1510,6 +1510,113 @@ private slots: } } + void mailsWithDates() + { + { + Mail mail("sink.dummy.instance1"); + mail.setExtractedDate(QDateTime::fromString("2018-05-23T13:49:41Z", Qt::ISODate)); + mail.setExtractedMessageId("message1"); + VERIFYEXEC(Sink::Store::create(mail)); + } + { + Mail mail("sink.dummy.instance1"); + mail.setExtractedDate(QDateTime::fromString("2018-05-23T13:50:00Z", Qt::ISODate)); + mail.setExtractedMessageId("message2"); + VERIFYEXEC(Sink::Store::create(mail)); + } + { + Mail mail("sink.dummy.instance1"); + mail.setExtractedDate(QDateTime::fromString("2018-05-27T13:50:00Z", Qt::ISODate)); + mail.setExtractedMessageId("message3"); + VERIFYEXEC(Sink::Store::create(mail)); + } + { + Mail mail("sink.dummy.instance1"); + mail.setExtractedMessageId("message4"); + VERIFYEXEC(Sink::Store::create(mail)); + } + { + Mail mail("sink.dummy.instance1"); + mail.setExtractedDate(QDateTime::fromString("2078-05-23T13:49:41Z", Qt::ISODate)); + mail.setExtractedMessageId("message5"); + VERIFYEXEC(Sink::Store::create(mail)); + } + VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1")); + } + + void testMailDate() + { + mailsWithDates(); + + { + Sink::Query query; + query.resourceFilter("sink.dummy.instance1"); + query.filter(QDateTime::fromString("2018-05-23T13:49:41Z", Qt::ISODate)); + auto model = Sink::Store::loadModel(query); + QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); + QCOMPARE(model->rowCount(), 1); + } + + { + Sink::Query query; + query.resourceFilter("sink.dummy.instance1"); + query.filter(QDateTime::fromString("2018-05-27T13:49:41Z", Qt::ISODate)); + auto model = Sink::Store::loadModel(query); + QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); + QCOMPARE(model->rowCount(), 0); + } + + { + Sink::Query query; + query.resourceFilter("sink.dummy.instance1"); + query.filter(QDateTime::fromString("2018-05-27T13:50:00Z", Qt::ISODate)); + auto model = Sink::Store::loadModel(query); + QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); + QCOMPARE(model->rowCount(), 1); + } + + } + + void testMailRange() + { + mailsWithDates(); + + { + Sink::Query query; + query.resourceFilter("sink.dummy.instance1"); + query.filter(QueryBase::Comparator(QVariantList{QDateTime::fromString("2018-05-23T13:49:41Z", Qt::ISODate), QDateTime::fromString("2018-05-23T13:49:41Z", Qt::ISODate)}, QueryBase::Comparator::Within)); + auto model = Sink::Store::loadModel(query); + QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); + QCOMPARE(model->rowCount(), 1); + } + + { + Sink::Query query; + query.resourceFilter("sink.dummy.instance1"); + query.filter(QueryBase::Comparator(QVariantList{QDateTime::fromString("2018-05-22T13:49:41Z", Qt::ISODate), QDateTime::fromString("2018-05-25T13:49:41Z", Qt::ISODate)}, QueryBase::Comparator::Within)); + auto model = Sink::Store::loadModel(query); + QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); + QCOMPARE(model->rowCount(), 2); + } + + { + Sink::Query query; + query.resourceFilter("sink.dummy.instance1"); + query.filter(QueryBase::Comparator(QVariantList{QDateTime::fromString("2018-05-22T13:49:41Z", Qt::ISODate), QDateTime::fromString("2018-05-30T13:49:41Z", Qt::ISODate)}, QueryBase::Comparator::Within)); + auto model = Sink::Store::loadModel(query); + QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); + QCOMPARE(model->rowCount(), 3); + } + + { + Sink::Query query; + query.resourceFilter("sink.dummy.instance1"); + query.filter(QueryBase::Comparator(QVariantList{QDateTime::fromString("2018-05-22T13:49:41Z", Qt::ISODate), QDateTime::fromString("2118-05-30T13:49:41Z", Qt::ISODate)}, QueryBase::Comparator::Within)); + auto model = Sink::Store::loadModel(query); + QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); + QCOMPARE(model->rowCount(), 4); + } + } }; QTEST_MAIN(QueryTest) -- cgit v1.2.3