diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/querytest.cpp | 119 |
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() |