summaryrefslogtreecommitdiffstats
path: root/tests/querytest.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2018-07-27 13:14:25 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-07-27 13:15:45 +0200
commit4f1684977aca3ea77a0246da77d34dfcb6416939 (patch)
tree2a06eff3e564515073e9657d0d8eb943bd4921b2 /tests/querytest.cpp
parent0a6229931ac90fa8914dbdafef51adf5ca92a206 (diff)
downloadsink-4f1684977aca3ea77a0246da77d34dfcb6416939.tar.gz
sink-4f1684977aca3ea77a0246da77d34dfcb6416939.zip
Better querytest
Diffstat (limited to 'tests/querytest.cpp')
-rw-r--r--tests/querytest.cpp119
1 files changed, 95 insertions, 24 deletions
diff --git a/tests/querytest.cpp b/tests/querytest.cpp
index 0b4bc7b..ea3d8c6 100644
--- a/tests/querytest.cpp
+++ b/tests/querytest.cpp
@@ -15,6 +15,7 @@
15#include "applicationdomaintype.h" 15#include "applicationdomaintype.h"
16#include "queryrunner.h" 16#include "queryrunner.h"
17#include "adaptorfactoryregistry.h" 17#include "adaptorfactoryregistry.h"
18#include "fulltextindex.h"
18 19
19#include <KMime/Message> 20#include <KMime/Message>
20 21
@@ -1510,30 +1511,47 @@ private slots:
1510 VERIFYEXEC(Sink::Store::removeDataFromDisk(QByteArray("sink.dummy.instance1"))); 1511 VERIFYEXEC(Sink::Store::removeDataFromDisk(QByteArray("sink.dummy.instance1")));
1511 } 1512 }
1512 1513
1513 void testMailFulltextSubject() 1514 void testMailFulltext()
1514 { 1515 {
1516 QByteArray id1;
1517 QByteArray id2;
1515 // Setup 1518 // Setup
1516 { 1519 {
1517 auto msg = KMime::Message::Ptr::create();
1518 msg->subject()->from7BitString("Subject To Search");
1519 msg->setBody("This is the searchable body.");
1520 msg->from()->from7BitString("\"The Sender\"<sender@example.org>");
1521 msg->assemble();
1522 { 1520 {
1523 Mail mail("sink.dummy.instance1"); 1521 auto msg = KMime::Message::Ptr::create();
1522 msg->subject()->from7BitString("Subject To Search");
1523 msg->setBody("This is the searchable body bar.");
1524 msg->from()->from7BitString("\"The Sender\"<sender@example.org>");
1525 msg->to()->from7BitString("\"Foo Bar\"<foo-bar@example.org>");
1526 msg->assemble();
1527
1528 // Mail mail("sink.dummy.instance1");
1529 auto mail = ApplicationDomainType::createEntity<Mail>("sink.dummy.instance1");
1524 mail.setExtractedMessageId("test1"); 1530 mail.setExtractedMessageId("test1");
1525 mail.setFolder("folder1"); 1531 mail.setFolder("folder1");
1526 mail.setMimeMessage(msg->encodedContent()); 1532 mail.setMimeMessage(msg->encodedContent());
1527 VERIFYEXEC(Sink::Store::create<Mail>(mail)); 1533 VERIFYEXEC(Sink::Store::create<Mail>(mail));
1534 id1 = mail.identifier();
1528 } 1535 }
1529 { 1536 {
1530 Mail mail("sink.dummy.instance1"); 1537 auto msg = KMime::Message::Ptr::create();
1538 msg->subject()->from7BitString("Stuff foo bar");
1539 msg->setBody("Body foo bar");
1540 msg->from()->from7BitString("\"Another Sender2\"<sender2@unique.com>");
1541 msg->assemble();
1542 auto mail = ApplicationDomainType::createEntity<Mail>("sink.dummy.instance1");
1531 mail.setExtractedMessageId("test2"); 1543 mail.setExtractedMessageId("test2");
1532 mail.setFolder("folder2"); 1544 mail.setFolder("folder2");
1533 mail.setExtractedSubject("Stuff"); 1545 mail.setMimeMessage(msg->encodedContent());
1534 VERIFYEXEC(Sink::Store::create<Mail>(mail)); 1546 VERIFYEXEC(Sink::Store::create<Mail>(mail));
1547 id2 = mail.identifier();
1535 } 1548 }
1536 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1")); 1549 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
1550 {
1551 FulltextIndex index("sink.dummy.instance1", Sink::Storage::DataStore::ReadOnly);
1552 qInfo() << QString("Found document 1 with terms: ") + index.getIndexContent(id1).terms.join(", ");
1553 qInfo() << QString("Found document 2 with terms: ") + index.getIndexContent(id2).terms.join(", ");
1554 }
1537 } 1555 }
1538 1556
1539 // Test 1557 // Test
@@ -1541,43 +1559,60 @@ private slots:
1541 Sink::Query query; 1559 Sink::Query query;
1542 query.resourceFilter("sink.dummy.instance1"); 1560 query.resourceFilter("sink.dummy.instance1");
1543 query.filter<Mail::Subject>(QueryBase::Comparator(QString("Subject To Search"), QueryBase::Comparator::Fulltext)); 1561 query.filter<Mail::Subject>(QueryBase::Comparator(QString("Subject To Search"), QueryBase::Comparator::Fulltext));
1544 auto model = Sink::Store::loadModel<Mail>(query); 1562 const auto list = Sink::Store::read<Mail>(query);
1545 QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); 1563 QCOMPARE(list.size(), 1);
1546 QCOMPARE(model->rowCount(), 1); 1564 QCOMPARE(list.first().identifier(), id1);
1565 }
1566 {
1567 Sink::Query query;
1568 query.resourceFilter("sink.dummy.instance1");
1569 query.filter<Mail::Subject>(QueryBase::Comparator(QString("Stuff foo bar"), QueryBase::Comparator::Fulltext));
1570 const auto list = Sink::Store::read<Mail>(query);
1571 QCOMPARE(list.size(), 2);
1547 } 1572 }
1548 { 1573 {
1549 Sink::Query query; 1574 Sink::Query query;
1550 query.resourceFilter("sink.dummy.instance1"); 1575 query.resourceFilter("sink.dummy.instance1");
1551 query.filter<Mail::Subject>(QueryBase::Comparator(QString("Subject"), QueryBase::Comparator::Fulltext)); 1576 query.filter<Mail::Subject>(QueryBase::Comparator(QString("Subject"), QueryBase::Comparator::Fulltext));
1552 QCOMPARE(Sink::Store::read<Mail>(query).size(), 1); 1577 const auto list = Sink::Store::read<Mail>(query);
1578 QCOMPARE(list.size(), 1);
1579 QCOMPARE(list.first().identifier(), id1);
1553 } 1580 }
1554 //Case-insensitive 1581 //Case-insensitive
1555 { 1582 {
1556 Sink::Query query; 1583 Sink::Query query;
1557 query.resourceFilter("sink.dummy.instance1"); 1584 query.resourceFilter("sink.dummy.instance1");
1558 query.filter<Mail::Subject>(QueryBase::Comparator(QString("Search"), QueryBase::Comparator::Fulltext)); 1585 query.filter<Mail::Subject>(QueryBase::Comparator(QString("Search"), QueryBase::Comparator::Fulltext));
1559 QCOMPARE(Sink::Store::read<Mail>(query).size(), 1); 1586 const auto list = Sink::Store::read<Mail>(query);
1587 QCOMPARE(list.size(), 1);
1588 QCOMPARE(list.first().identifier(), id1);
1560 } 1589 }
1561 //Case-insensitive 1590 //Case-insensitive
1562 { 1591 {
1563 Sink::Query query; 1592 Sink::Query query;
1564 query.resourceFilter("sink.dummy.instance1"); 1593 query.resourceFilter("sink.dummy.instance1");
1565 query.filter<Mail::Subject>(QueryBase::Comparator(QString("search"), QueryBase::Comparator::Fulltext)); 1594 query.filter<Mail::Subject>(QueryBase::Comparator(QString("search"), QueryBase::Comparator::Fulltext));
1566 QCOMPARE(Sink::Store::read<Mail>(query).size(), 1); 1595 const auto list = Sink::Store::read<Mail>(query);
1596 QCOMPARE(list.size(), 1);
1597 QCOMPARE(list.first().identifier(), id1);
1567 } 1598 }
1568 //Wildcard match 1599 //Partial match
1569 { 1600 {
1570 Sink::Query query; 1601 Sink::Query query;
1571 query.resourceFilter("sink.dummy.instance1"); 1602 query.resourceFilter("sink.dummy.instance1");
1572 query.filter<Mail::Subject>(QueryBase::Comparator(QString("sear*"), QueryBase::Comparator::Fulltext)); 1603 query.filter<Mail::Subject>(QueryBase::Comparator(QString("sear"), QueryBase::Comparator::Fulltext));
1573 QCOMPARE(Sink::Store::read<Mail>(query).size(), 1); 1604 const auto list = Sink::Store::read<Mail>(query);
1605 QCOMPARE(list.size(), 1);
1606 QCOMPARE(list.first().identifier(), id1);
1574 } 1607 }
1575 //Filter by body 1608 //Filter by body
1576 { 1609 {
1577 Sink::Query query; 1610 Sink::Query query;
1578 query.resourceFilter("sink.dummy.instance1"); 1611 query.resourceFilter("sink.dummy.instance1");
1579 query.filter<Mail::MimeMessage>(QueryBase::Comparator(QString("searchable"), QueryBase::Comparator::Fulltext)); 1612 query.filter<Mail::MimeMessage>(QueryBase::Comparator(QString("searchable"), QueryBase::Comparator::Fulltext));
1580 QCOMPARE(Sink::Store::read<Mail>(query).size(), 1); 1613 const auto list = Sink::Store::read<Mail>(query);
1614 QCOMPARE(list.size(), 1);
1615 QCOMPARE(list.first().identifier(), id1);
1581 } 1616 }
1582 //Filter by folder 1617 //Filter by folder
1583 { 1618 {
@@ -1585,7 +1620,9 @@ private slots:
1585 query.resourceFilter("sink.dummy.instance1"); 1620 query.resourceFilter("sink.dummy.instance1");
1586 query.filter<Mail::Subject>(QueryBase::Comparator(QString("Subject"), QueryBase::Comparator::Fulltext)); 1621 query.filter<Mail::Subject>(QueryBase::Comparator(QString("Subject"), QueryBase::Comparator::Fulltext));
1587 query.filter<Mail::Folder>("folder1"); 1622 query.filter<Mail::Folder>("folder1");
1588 QCOMPARE(Sink::Store::read<Mail>(query).size(), 1); 1623 const auto list = Sink::Store::read<Mail>(query);
1624 QCOMPARE(list.size(), 1);
1625 QCOMPARE(list.first().identifier(), id1);
1589 } 1626 }
1590 //Filter by folder 1627 //Filter by folder
1591 { 1628 {
@@ -1600,29 +1637,63 @@ private slots:
1600 Sink::Query query; 1637 Sink::Query query;
1601 query.resourceFilter("sink.dummy.instance1"); 1638 query.resourceFilter("sink.dummy.instance1");
1602 query.filter({}, Sink::QueryBase::Comparator(QString("sender"), Sink::QueryBase::Comparator::Fulltext)); 1639 query.filter({}, Sink::QueryBase::Comparator(QString("sender"), Sink::QueryBase::Comparator::Fulltext));
1603 QCOMPARE(Sink::Store::read<Mail>(query).size(), 1); 1640 const auto list = Sink::Store::read<Mail>(query);
1641 QCOMPARE(list.size(), 2);
1604 } 1642 }
1605 //Filter by sender 1643 //Filter by sender
1606 { 1644 {
1607 Sink::Query query; 1645 Sink::Query query;
1608 query.resourceFilter("sink.dummy.instance1"); 1646 query.resourceFilter("sink.dummy.instance1");
1609 query.filter({}, Sink::QueryBase::Comparator(QString("Sender"), Sink::QueryBase::Comparator::Fulltext)); 1647 query.filter({}, Sink::QueryBase::Comparator(QString("Sender"), Sink::QueryBase::Comparator::Fulltext));
1610 QCOMPARE(Sink::Store::read<Mail>(query).size(), 1); 1648 const auto list = Sink::Store::read<Mail>(query);
1649 QCOMPARE(list.size(), 2);
1611 } 1650 }
1612 //Filter by sender 1651 //Filter by sender
1613 { 1652 {
1614 Sink::Query query; 1653 Sink::Query query;
1615 query.resourceFilter("sink.dummy.instance1"); 1654 query.resourceFilter("sink.dummy.instance1");
1616 query.filter({}, Sink::QueryBase::Comparator(QString("sender@example"), Sink::QueryBase::Comparator::Fulltext)); 1655 query.filter({}, Sink::QueryBase::Comparator(QString("sender@example"), Sink::QueryBase::Comparator::Fulltext));
1617 QCOMPARE(Sink::Store::read<Mail>(query).size(), 1); 1656 const auto list = Sink::Store::read<Mail>(query);
1657 QCOMPARE(list.size(), 1);
1658 QCOMPARE(list.first().identifier(), id1);
1618 } 1659 }
1619 //Filter by sender 1660 //Filter by sender
1620 { 1661 {
1621 Sink::Query query; 1662 Sink::Query query;
1622 query.resourceFilter("sink.dummy.instance1"); 1663 query.resourceFilter("sink.dummy.instance1");
1623 query.filter({}, Sink::QueryBase::Comparator(QString("The Sender"), Sink::QueryBase::Comparator::Fulltext)); 1664 query.filter({}, Sink::QueryBase::Comparator(QString("The Sender"), Sink::QueryBase::Comparator::Fulltext));
1624 QCOMPARE(Sink::Store::read<Mail>(query).size(), 1); 1665 const auto list = Sink::Store::read<Mail>(query);
1666 QCOMPARE(list.size(), 2);
1667 }
1668
1669 //Filter by sender
1670 {
1671 Sink::Query query;
1672 query.resourceFilter("sink.dummy.instance1");
1673 query.filter({}, Sink::QueryBase::Comparator(QString("sender2@unique.com"), Sink::QueryBase::Comparator::Fulltext));
1674 const auto list = Sink::Store::read<Mail>(query);
1675 QCOMPARE(list.size(), 1);
1676 QCOMPARE(list.first().identifier(), id2);
1677 }
1678
1679 //Filter by recipient
1680 {
1681 Sink::Query query;
1682 query.resourceFilter("sink.dummy.instance1");
1683 query.filter({}, Sink::QueryBase::Comparator(QString("foo-bar@example.org"), Sink::QueryBase::Comparator::Fulltext));
1684 const auto list = Sink::Store::read<Mail>(query);
1685 QCOMPARE(list.size(), 1);
1686 QCOMPARE(list.first().identifier(), id1);
1625 } 1687 }
1688
1689 //Filter by recipient
1690 {
1691 Sink::Query query;
1692 query.resourceFilter("sink.dummy.instance1");
1693 query.filter({}, Sink::QueryBase::Comparator(QString("foo-bar@example.com"), Sink::QueryBase::Comparator::Fulltext));
1694 QCOMPARE(Sink::Store::read<Mail>(query).size(), 0);
1695 }
1696
1626 } 1697 }
1627 1698
1628 void mailsWithDates() 1699 void mailsWithDates()