summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorRémi Nicole <nicole@kolabsystems.com>2018-06-19 11:04:17 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-06-19 11:10:47 +0200
commit077e3cb30ace5f6ee20ee15e0d32d2bfb197fde0 (patch)
tree3cfdaf0912ef22dba71755b4332354d579f6e7cf /tests
parent1ff4456e5dc2b9a9dfa80047f9e5a4a9e1395cdf (diff)
downloadsink-077e3cb30ace5f6ee20ee15e0d32d2bfb197fde0.tar.gz
sink-077e3cb30ace5f6ee20ee15e0d32d2bfb197fde0.zip
Implement Overlap queries
Summary: Notes: - Introduces the concept of queries on multiple properties (which meant changing query's internals a bit) - Dates are stored as well as the "reference" in the index to allow quick filtering without fetching the whole entity - Buckets are weeks starting on Monday (guaranteed by the use of the Julian calendar) - Some size improvements are definitely possible (dates are padded numbers again, not using integer databases, Julian calendar starts at a very old date, etc.) Test Plan: Tested in querytest Reviewers: cmollekopf Reviewed By: cmollekopf Tags: #sink Differential Revision: https://phabricator.kde.org/D13477
Diffstat (limited to 'tests')
-rw-r--r--tests/querytest.cpp159
1 files changed, 158 insertions, 1 deletions
diff --git a/tests/querytest.cpp b/tests/querytest.cpp
index 36b6e90..b52ba96 100644
--- a/tests/querytest.cpp
+++ b/tests/querytest.cpp
@@ -59,7 +59,7 @@ private slots:
59 59
60 Sink::QueryBase::Filter filter; 60 Sink::QueryBase::Filter filter;
61 filter.ids << "id"; 61 filter.ids << "id";
62 filter.propertyFilter.insert("foo", QVariant::fromValue(QByteArray("bar"))); 62 filter.propertyFilter.insert({"foo"}, QVariant::fromValue(QByteArray("bar")));
63 63
64 Sink::Query query; 64 Sink::Query query;
65 query.setFilter(filter); 65 query.setFilter(filter);
@@ -1617,6 +1617,163 @@ private slots:
1617 QCOMPARE(model->rowCount(), 4); 1617 QCOMPARE(model->rowCount(), 4);
1618 } 1618 }
1619 } 1619 }
1620
1621 void eventsWithDates()
1622 {
1623 {
1624 Event event("sink.dummy.instance1");
1625 event.setExtractedStartTime(QDateTime::fromString("2018-05-23T12:00:00Z", Qt::ISODate));
1626 event.setExtractedEndTime(QDateTime::fromString("2018-05-23T13:00:00Z", Qt::ISODate));
1627 VERIFYEXEC(Sink::Store::create<Event>(event));
1628 }
1629 {
1630 Event event("sink.dummy.instance1");
1631 event.setExtractedStartTime(QDateTime::fromString("2018-05-23T13:00:00Z", Qt::ISODate));
1632 event.setExtractedEndTime(QDateTime::fromString("2018-05-23T14:00:00Z", Qt::ISODate));
1633 VERIFYEXEC(Sink::Store::create<Event>(event));
1634 }
1635 {
1636 Event event("sink.dummy.instance1");
1637 event.setExtractedStartTime(QDateTime::fromString("2018-05-23T14:00:00Z", Qt::ISODate));
1638 event.setExtractedEndTime(QDateTime::fromString("2018-05-23T15:00:00Z", Qt::ISODate));
1639 VERIFYEXEC(Sink::Store::create<Event>(event));
1640 }
1641 {
1642 Event event("sink.dummy.instance1");
1643 event.setExtractedStartTime(QDateTime::fromString("2018-05-23T12:00:00Z", Qt::ISODate));
1644 event.setExtractedEndTime(QDateTime::fromString("2018-05-23T14:00:00Z", Qt::ISODate));
1645 VERIFYEXEC(Sink::Store::create<Event>(event));
1646 }
1647 {
1648 Event event("sink.dummy.instance1");
1649 event.setExtractedStartTime(QDateTime::fromString("2018-05-24T12:00:00Z", Qt::ISODate));
1650 event.setExtractedEndTime(QDateTime::fromString("2018-05-24T14:00:00Z", Qt::ISODate));
1651 VERIFYEXEC(Sink::Store::create<Event>(event));
1652 }
1653 {
1654 Event event("sink.dummy.instance1");
1655 VERIFYEXEC(Sink::Store::create<Event>(event));
1656 }
1657
1658 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
1659 }
1660
1661 void testOverlap()
1662 {
1663 eventsWithDates();
1664
1665 {
1666 Sink::Query query;
1667 query.resourceFilter("sink.dummy.instance1");
1668 query.filter<Event::StartTime, Event::EndTime>(QueryBase::Comparator(
1669 QVariantList{ QDateTime::fromString("2018-05-22T12:00:00Z", Qt::ISODate),
1670 QDateTime::fromString("2018-05-30T13:00:00Z", Qt::ISODate) },
1671 QueryBase::Comparator::Overlap));
1672 auto model = Sink::Store::loadModel<Event>(query);
1673 QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool());
1674 QCOMPARE(model->rowCount(), 5);
1675 }
1676
1677 {
1678 Sink::Query query;
1679 query.resourceFilter("sink.dummy.instance1");
1680 query.filter<Event::StartTime, Event::EndTime>(QueryBase::Comparator(
1681 QVariantList{ QDateTime::fromString("2018-05-22T12:30:00Z", Qt::ISODate),
1682 QDateTime::fromString("2018-05-22T12:31:00Z", Qt::ISODate) },
1683 QueryBase::Comparator::Overlap));
1684 auto model = Sink::Store::loadModel<Event>(query);
1685 QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool());
1686 QCOMPARE(model->rowCount(), 0);
1687 }
1688
1689 {
1690 Sink::Query query;
1691 query.resourceFilter("sink.dummy.instance1");
1692 query.filter<Event::StartTime, Event::EndTime>(QueryBase::Comparator(
1693 QVariantList{ QDateTime::fromString("2018-05-24T10:00:00Z", Qt::ISODate),
1694 QDateTime::fromString("2018-05-24T11:00:00Z", Qt::ISODate) },
1695 QueryBase::Comparator::Overlap));
1696 auto model = Sink::Store::loadModel<Event>(query);
1697 QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool());
1698 QCOMPARE(model->rowCount(), 0);
1699 }
1700
1701 {
1702 Sink::Query query;
1703 query.resourceFilter("sink.dummy.instance1");
1704 query.filter<Event::StartTime, Event::EndTime>(QueryBase::Comparator(
1705 QVariantList{ QDateTime::fromString("2018-05-23T12:30:00Z", Qt::ISODate),
1706 QDateTime::fromString("2018-05-23T12:31:00Z", Qt::ISODate) },
1707 QueryBase::Comparator::Overlap));
1708 auto model = Sink::Store::loadModel<Event>(query);
1709 QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool());
1710 QCOMPARE(model->rowCount(), 2);
1711 }
1712
1713 {
1714 Sink::Query query;
1715 query.resourceFilter("sink.dummy.instance1");
1716 query.filter<Event::StartTime, Event::EndTime>(QueryBase::Comparator(
1717 QVariantList{ QDateTime::fromString("2018-05-22T12:30:00Z", Qt::ISODate),
1718 QDateTime::fromString("2018-05-23T12:00:00Z", Qt::ISODate) },
1719 QueryBase::Comparator::Overlap));
1720 auto model = Sink::Store::loadModel<Event>(query);
1721 QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool());
1722 QCOMPARE(model->rowCount(), 2);
1723 }
1724
1725 {
1726 Sink::Query query;
1727 query.resourceFilter("sink.dummy.instance1");
1728 query.filter<Event::StartTime, Event::EndTime>(QueryBase::Comparator(
1729 QVariantList{ QDateTime::fromString("2018-05-23T14:30:00Z", Qt::ISODate),
1730 QDateTime::fromString("2018-05-23T16:00:00Z", Qt::ISODate) },
1731 QueryBase::Comparator::Overlap));
1732 auto model = Sink::Store::loadModel<Event>(query);
1733 QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool());
1734 QCOMPARE(model->rowCount(), 1);
1735 }
1736
1737 }
1738
1739 void testOverlapLive()
1740 {
1741 eventsWithDates();
1742
1743 {
1744 Sink::Query query;
1745 query.resourceFilter("sink.dummy.instance1");
1746 query.setFlags(Query::LiveQuery);
1747 query.filter<Event::StartTime, Event::EndTime>(QueryBase::Comparator(
1748 QVariantList{ QDateTime::fromString("2018-05-22T12:00:00Z", Qt::ISODate),
1749 QDateTime::fromString("2018-05-30T13:00:00Z", Qt::ISODate) },
1750 QueryBase::Comparator::Overlap));
1751 auto model = Sink::Store::loadModel<Event>(query);
1752 QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool());
1753 QCOMPARE(model->rowCount(), 5);
1754
1755 Event event = Event::createEntity<Event>("sink.dummy.instance1");
1756 event.setExtractedStartTime(QDateTime::fromString("2018-05-23T12:00:00Z", Qt::ISODate));
1757 event.setExtractedEndTime(QDateTime::fromString("2018-05-23T13:00:00Z", Qt::ISODate));
1758 VERIFYEXEC(Sink::Store::create<Event>(event));
1759
1760 Event event2 = Event::createEntity<Event>("sink.dummy.instance1");
1761 event2.setExtractedStartTime(QDateTime::fromString("2018-05-33T12:00:00Z", Qt::ISODate));
1762 event2.setExtractedEndTime(QDateTime::fromString("2018-05-33T13:00:00Z", Qt::ISODate));
1763 VERIFYEXEC(Sink::Store::create<Event>(event2));
1764
1765 QTest::qWait(500);
1766 QCOMPARE(model->rowCount(), 6);
1767
1768 VERIFYEXEC(Sink::Store::remove<Event>(event));
1769 VERIFYEXEC(Sink::Store::remove<Event>(event2));
1770
1771 QTest::qWait(500);
1772 QCOMPARE(model->rowCount(), 5);
1773 }
1774
1775 }
1776
1620}; 1777};
1621 1778
1622QTEST_MAIN(QueryTest) 1779QTEST_MAIN(QueryTest)