diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-10-13 18:38:35 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-02-11 23:03:17 +0100 |
commit | 6051c1247cde61bcc8e483eb4166e5a297c0ecc6 (patch) | |
tree | df3aba1ef4011f2640b17c8cf7a9b106933231ab /tests/querytest.cpp | |
parent | 8740a007515dcf1b315d69ab5c64fcfd40ec980c (diff) | |
download | sink-6051c1247cde61bcc8e483eb4166e5a297c0ecc6.tar.gz sink-6051c1247cde61bcc8e483eb4166e5a297c0ecc6.zip |
Xapian based fulltext indexing
This cuts into the sync performance by about 40%,
but gives us fast fulltext searching for all local content.
Diffstat (limited to 'tests/querytest.cpp')
-rw-r--r-- | tests/querytest.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/querytest.cpp b/tests/querytest.cpp index 1584c48..ec6438d 100644 --- a/tests/querytest.cpp +++ b/tests/querytest.cpp | |||
@@ -14,6 +14,8 @@ | |||
14 | #include "testutils.h" | 14 | #include "testutils.h" |
15 | #include "applicationdomaintype.h" | 15 | #include "applicationdomaintype.h" |
16 | 16 | ||
17 | #include <KMime/Message> | ||
18 | |||
17 | using namespace Sink; | 19 | using namespace Sink; |
18 | using namespace Sink::ApplicationDomain; | 20 | using namespace Sink::ApplicationDomain; |
19 | 21 | ||
@@ -1254,6 +1256,94 @@ private slots: | |||
1254 | VERIFYEXEC(Sink::Store::removeDataFromDisk(QByteArray("sink.dummy.instance1"))); | 1256 | VERIFYEXEC(Sink::Store::removeDataFromDisk(QByteArray("sink.dummy.instance1"))); |
1255 | } | 1257 | } |
1256 | 1258 | ||
1259 | void testMailFulltextSubject() | ||
1260 | { | ||
1261 | // Setup | ||
1262 | { | ||
1263 | auto msg = KMime::Message::Ptr::create(); | ||
1264 | msg->subject()->from7BitString("Subject To Search"); | ||
1265 | msg->setBody("This is the searchable body."); | ||
1266 | msg->assemble(); | ||
1267 | { | ||
1268 | Mail mail("sink.dummy.instance1"); | ||
1269 | mail.setExtractedMessageId("test1"); | ||
1270 | mail.setExtractedSubject("Subject To Search"); | ||
1271 | mail.setFolder("folder1"); | ||
1272 | mail.setMimeMessage(msg->encodedContent()); | ||
1273 | VERIFYEXEC(Sink::Store::create<Mail>(mail)); | ||
1274 | } | ||
1275 | { | ||
1276 | Mail mail("sink.dummy.instance1"); | ||
1277 | mail.setExtractedMessageId("test2"); | ||
1278 | mail.setFolder("folder2"); | ||
1279 | mail.setExtractedSubject("Stuff"); | ||
1280 | VERIFYEXEC(Sink::Store::create<Mail>(mail)); | ||
1281 | } | ||
1282 | VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1")); | ||
1283 | } | ||
1284 | |||
1285 | // Test | ||
1286 | { | ||
1287 | Sink::Query query; | ||
1288 | query.resourceFilter("sink.dummy.instance1"); | ||
1289 | query.filter<Mail::Subject>(QueryBase::Comparator(QString("Subject To Search"), QueryBase::Comparator::Fulltext)); | ||
1290 | auto model = Sink::Store::loadModel<Mail>(query); | ||
1291 | QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); | ||
1292 | QCOMPARE(model->rowCount(), 1); | ||
1293 | } | ||
1294 | { | ||
1295 | Sink::Query query; | ||
1296 | query.resourceFilter("sink.dummy.instance1"); | ||
1297 | query.filter<Mail::Subject>(QueryBase::Comparator(QString("Subject"), QueryBase::Comparator::Fulltext)); | ||
1298 | auto result = Sink::Store::read<Mail>(query); | ||
1299 | QCOMPARE(result.size(), 1); | ||
1300 | } | ||
1301 | { | ||
1302 | Sink::Query query; | ||
1303 | query.resourceFilter("sink.dummy.instance1"); | ||
1304 | query.filter<Mail::Subject>(QueryBase::Comparator(QString("Search"), QueryBase::Comparator::Fulltext)); | ||
1305 | auto result = Sink::Store::read<Mail>(query); | ||
1306 | QCOMPARE(result.size(), 1); | ||
1307 | } | ||
1308 | { | ||
1309 | Sink::Query query; | ||
1310 | query.resourceFilter("sink.dummy.instance1"); | ||
1311 | query.filter<Mail::Subject>(QueryBase::Comparator(QString("search"), QueryBase::Comparator::Fulltext)); | ||
1312 | auto result = Sink::Store::read<Mail>(query); | ||
1313 | QCOMPARE(result.size(), 1); | ||
1314 | } | ||
1315 | { | ||
1316 | Sink::Query query; | ||
1317 | query.resourceFilter("sink.dummy.instance1"); | ||
1318 | query.filter<Mail::Subject>(QueryBase::Comparator(QString("sear*"), QueryBase::Comparator::Fulltext)); | ||
1319 | auto result = Sink::Store::read<Mail>(query); | ||
1320 | QCOMPARE(result.size(), 1); | ||
1321 | } | ||
1322 | { | ||
1323 | Sink::Query query; | ||
1324 | query.resourceFilter("sink.dummy.instance1"); | ||
1325 | query.filter<Mail::MimeMessage>(QueryBase::Comparator(QString("searchable"), QueryBase::Comparator::Fulltext)); | ||
1326 | auto result = Sink::Store::read<Mail>(query); | ||
1327 | QCOMPARE(result.size(), 1); | ||
1328 | } | ||
1329 | { | ||
1330 | Sink::Query query; | ||
1331 | query.resourceFilter("sink.dummy.instance1"); | ||
1332 | query.filter<Mail::Subject>(QueryBase::Comparator(QString("Subject"), QueryBase::Comparator::Fulltext)); | ||
1333 | query.filter<Mail::Folder>("folder1"); | ||
1334 | auto result = Sink::Store::read<Mail>(query); | ||
1335 | QCOMPARE(result.size(), 1); | ||
1336 | } | ||
1337 | { | ||
1338 | Sink::Query query; | ||
1339 | query.resourceFilter("sink.dummy.instance1"); | ||
1340 | query.filter<Mail::Subject>(QueryBase::Comparator(QString("Subject"), QueryBase::Comparator::Fulltext)); | ||
1341 | query.filter<Mail::Folder>("folder2"); | ||
1342 | auto result = Sink::Store::read<Mail>(query); | ||
1343 | QCOMPARE(result.size(), 0); | ||
1344 | } | ||
1345 | } | ||
1346 | |||
1257 | }; | 1347 | }; |
1258 | 1348 | ||
1259 | QTEST_MAIN(QueryTest) | 1349 | QTEST_MAIN(QueryTest) |