Changeset View
Changeset View
Standalone View
Standalone View
tests/querytest.cpp
Show First 20 Lines • Show All 53 Lines • ▼ Show 20 Line(s) | 32 | private slots: | |||
---|---|---|---|---|---|
54 | void testSerialization() | 54 | void testSerialization() | ||
55 | { | 55 | { | ||
56 | 56 | | |||
57 | auto type = QByteArray("type"); | 57 | auto type = QByteArray("type"); | ||
58 | auto sort = QByteArray("sort"); | 58 | auto sort = QByteArray("sort"); | ||
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); | ||
66 | query.setType(type); | 66 | query.setType(type); | ||
67 | query.setSortProperty(sort); | 67 | query.setSortProperty(sort); | ||
68 | 68 | | |||
69 | QByteArray data; | 69 | QByteArray data; | ||
70 | { | 70 | { | ||
▲ Show 20 Lines • Show All 1541 Lines • ▼ Show 20 Line(s) | 1611 | { | |||
1612 | Sink::Query query; | 1612 | Sink::Query query; | ||
1613 | query.resourceFilter("sink.dummy.instance1"); | 1613 | query.resourceFilter("sink.dummy.instance1"); | ||
1614 | query.filter<Mail::Date>(QueryBase::Comparator(QVariantList{QDateTime::fromString("2018-05-22T13:49:41Z", Qt::ISODate), QDateTime::fromString("2118-05-30T13:49:41Z", Qt::ISODate)}, QueryBase::Comparator::Within)); | 1614 | query.filter<Mail::Date>(QueryBase::Comparator(QVariantList{QDateTime::fromString("2018-05-22T13:49:41Z", Qt::ISODate), QDateTime::fromString("2118-05-30T13:49:41Z", Qt::ISODate)}, QueryBase::Comparator::Within)); | ||
1615 | auto model = Sink::Store::loadModel<Mail>(query); | 1615 | auto model = Sink::Store::loadModel<Mail>(query); | ||
1616 | QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); | 1616 | QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); | ||
1617 | QCOMPARE(model->rowCount(), 4); | 1617 | QCOMPARE(model->rowCount(), 4); | ||
1618 | } | 1618 | } | ||
1619 | } | 1619 | } | ||
1620 | | ||||
cmollekopf: You'll have to test the live query case (a running live query, to which events are added) as… | |||||
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 | | |||
1622 | QTEST_MAIN(QueryTest) | 1779 | QTEST_MAIN(QueryTest) | ||
1623 | #include "querytest.moc" | 1780 | #include "querytest.moc" |
You'll have to test the live query case (a running live query, to which events are added) as well. So far we never use the indexes in the incremental update case, but always filter directly on the properties (the assumption is that this is cheaper for small updates). I think your code handles the case though with the datastorequery changes.