Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117748791
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
22 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/src/pim/akonadiplugin/autotests/searchplugintest.cpp b/src/pim/akonadiplugin/autotests/searchplugintest.cpp
index 947ddb7f..c3889fd2 100644
--- a/src/pim/akonadiplugin/autotests/searchplugintest.cpp
+++ b/src/pim/akonadiplugin/autotests/searchplugintest.cpp
@@ -1,388 +1,458 @@
/*
* This file is part of the KDE Baloo Project
* Copyright (C) 2014 Christian Mollekopf <mollekopf@kolabsys.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3, or any
* later version accepted by the membership of KDE e.V. (or its
* successor approved by the membership of KDE e.V.), which shall
* act as a proxy defined in Section 6 of version 3 of the license.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include <QTest>
#include <Akonadi/Collection>
#include <KABC/Addressee>
#include <QDir>
#include "searchplugin.h"
#include <../pim/agent/emailindexer.h>
#include <../pim/agent/contactindexer.h>
#include <../pim/search/email/emailsearchstore.h>
#include <../pim/search/contact/contactsearchstore.h>
#include <akonadi/searchquery.h>
#include <akonadi/kmime/messageflags.h>
Q_DECLARE_METATYPE(QSet<qint64>)
Q_DECLARE_METATYPE(QList<qint64>)
class SearchPluginTest : public QObject
{
Q_OBJECT
private:
QString emailDir;
QString emailContactsDir;
QString contactsDir;
bool removeDir(const QString & dirName)
{
bool result = true;
QDir dir(dirName);
if (dir.exists(dirName)) {
Q_FOREACH(QFileInfo info, dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) {
if (info.isDir()) {
result = removeDir(info.absoluteFilePath());
}
else {
result = QFile::remove(info.absoluteFilePath());
}
if (!result) {
return result;
}
}
result = dir.rmdir(dirName);
}
return result;
}
private Q_SLOTS:
void init() {
emailDir = QDir::tempPath() + "/searchplugintest/baloo/email/";
emailContactsDir = QDir::tempPath() + "/searchplugintest/baloo/emailcontacts/";
contactsDir = QDir::tempPath() + "/searchplugintest/baloo/contacts/";
QDir dir;
removeDir(emailDir);
QVERIFY(dir.mkpath(emailDir));
removeDir(emailContactsDir);
QVERIFY(dir.mkpath(emailContactsDir));
removeDir(contactsDir);
QVERIFY(dir.mkpath(contactsDir));
kDebug() << "indexing sample data";
kDebug() << emailDir;
kDebug() << emailContactsDir;
EmailIndexer emailIndexer(emailDir, emailContactsDir);
ContactIndexer contactIndexer(contactsDir);
{
KMime::Message::Ptr msg(new KMime::Message);
msg->subject()->from7BitString("subject1");
msg->contentType()->setMimeType("text/plain");
msg->setBody("body1 mälmöö");
msg->from()->addAddress("john@test.com", "John Doe");
msg->to()->addAddress("jane@test.com", "Jane Doe");
msg->date()->setDateTime(KDateTime(QDate(2013,11,10), QTime(12,0,0)));
msg->assemble();
Akonadi::Item item("message/rfc822");
item.setId(1);
item.setSize(1000);
item.setPayload(msg);
item.setParentCollection(Akonadi::Collection(1));
item.setFlags(Akonadi::Item::Flags() << Akonadi::MessageFlags::Replied);
emailIndexer.index(item);
}
{
KMime::Message::Ptr msg(new KMime::Message);
msg->subject()->from7BitString("subject2");
//Multipart message
KMime::Content *b = new KMime::Content;
b->contentType()->setMimeType( "text/plain" );
b->setBody( "body2" );
msg->addContent( b, true );
msg->from()->addAddress("john@test.com", "John Doe");
msg->to()->addAddress("jane@test.com", "Jane Doe");
msg->date()->setDateTime(KDateTime(QDate(2013,11,10), QTime(13,0,0)));
msg->assemble();
Akonadi::Item item("message/rfc822");
item.setId(2);
item.setSize(1002);
item.setPayload(msg);
item.setParentCollection(Akonadi::Collection(2));
item.setFlags(Akonadi::Item::Flags() << Akonadi::MessageFlags::Flagged << Akonadi::MessageFlags::Replied);
emailIndexer.index(item);
}
+ {
+ KMime::Message::Ptr msg(new KMime::Message);
+ msg->subject()->from7BitString("subject3");
+
+ //Multipart message
+ KMime::Content *b = new KMime::Content;
+ b->contentType()->setMimeType( "text/plain" );
+ b->setBody( "body3" );
+ msg->addContent( b, true );
+
+ msg->from()->addAddress("john@test.com", "John Doe");
+ msg->to()->addAddress("jane@test.com", "Jane Doe");
+ msg->date()->setDateTime(KDateTime(QDate(2014,11,10), QTime(13,0,0)));
+ msg->assemble();
+
+ Akonadi::Item item("message/rfc822");
+ item.setId(3);
+ item.setSize(1002);
+ item.setPayload(msg);
+ item.setParentCollection(Akonadi::Collection(2));
+ item.setFlags(Akonadi::Item::Flags() << Akonadi::MessageFlags::Flagged << Akonadi::MessageFlags::Replied);
+ emailIndexer.index(item);
+ }
+ {
+ KMime::Message::Ptr msg(new KMime::Message);
+ msg->subject()->from7BitString("subject4");
+
+ //Multipart message
+ KMime::Content *b = new KMime::Content;
+ b->contentType()->setMimeType( "text/plain" );
+ b->setBody( "body4" );
+ msg->addContent( b, true );
+
+ msg->from()->addAddress("john@test.com", "John Doe");
+ msg->to()->addAddress("jane@test.com", "Jane Doe");
+ msg->date()->setDateTime(KDateTime(QDate(2014,11,11), QTime(13,0,0)));
+ msg->assemble();
+
+ Akonadi::Item item("message/rfc822");
+ item.setId(4);
+ item.setSize(1002);
+ item.setPayload(msg);
+ item.setParentCollection(Akonadi::Collection(2));
+ item.setFlags(Akonadi::Item::Flags() << Akonadi::MessageFlags::Flagged << Akonadi::MessageFlags::Replied);
+ emailIndexer.index(item);
+ }
{
KABC::Addressee addressee;
addressee.setUid("uid1");
addressee.setName("John Doe");
addressee.setFormattedName("John Doe");
addressee.setNickName("JD");
addressee.setEmails(QStringList() << "john@test.com");
addressee.setBirthday(QDateTime(QDate(2000, 01, 01)));
Akonadi::Item item(KABC::Addressee::mimeType());
item.setId(3);
item.setPayload(addressee);
item.setParentCollection(Akonadi::Collection(3));
contactIndexer.index(item);
}
{
KABC::Addressee addressee;
addressee.setUid("uid2");
addressee.setName("Jane Doe");
addressee.setEmails(QStringList() << "jane@test.com");
addressee.setBirthday(QDateTime(QDate(2001, 01, 01)));
Akonadi::Item item(KABC::Addressee::mimeType());
item.setId(4);
item.setPayload(addressee);
item.setParentCollection(Akonadi::Collection(3));
contactIndexer.index(item);
}
Baloo::EmailSearchStore *emailSearchStore = new Baloo::EmailSearchStore(this);
emailSearchStore->setDbPath(emailDir);
Baloo::ContactSearchStore *contactSearchStore = new Baloo::ContactSearchStore(this);
contactSearchStore->setDbPath(contactsDir);
Baloo::SearchStore::overrideSearchStores(QList<Baloo::SearchStore*>() << emailSearchStore << contactSearchStore);
}
void testEmailSearch_data() {
QTest::addColumn<QString>("query");
QTest::addColumn<QList<qint64> >("collections");
QTest::addColumn<QStringList>("mimeTypes");
QTest::addColumn<QSet<qint64> >("expectedResult");
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::Subject, "subject1", Akonadi::SearchTerm::CondEqual));
QList<qint64> collections = QList<qint64>() << 1;
QStringList mimeTypes = QStringList() << "message/rfc822";
QSet<qint64> result= QSet<qint64>() << 1;
QTest::newRow("find subject equal") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
Akonadi::EmailSearchTerm term(Akonadi::EmailSearchTerm::Subject, "subject1", Akonadi::SearchTerm::CondEqual);
term.setIsNegated(true);
query.addTerm(term);
QList<qint64> collections = QList<qint64>() << 2;
QStringList mimeTypes = QStringList() << "message/rfc822";
- QSet<qint64> result= QSet<qint64>() << 2;
+ QSet<qint64> result= QSet<qint64>() << 2 << 3 << 4;
QTest::newRow("find subject equal negated") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::Subject, "subject", Akonadi::SearchTerm::CondContains));
QList<qint64> collections = QList<qint64>() << 1 << 2;
QStringList mimeTypes = QStringList() << "message/rfc822";
- QSet<qint64> result= QSet<qint64>() << 1 << 2;
+ QSet<qint64> result= QSet<qint64>() << 1 << 2 << 3 << 4;
QTest::newRow("find subject contains") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::Body, "body", Akonadi::SearchTerm::CondContains));
- QList<qint64> collections = QList<qint64>() << 1 << 2;
+ QList<qint64> collections = QList<qint64>() << 1 << 2 << 3 << 4;
QStringList mimeTypes = QStringList() << "message/rfc822";
- QSet<qint64> result= QSet<qint64>() << 1 << 2;
+ QSet<qint64> result= QSet<qint64>() << 1 << 2 << 3 << 4;
QTest::newRow("find body contains") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::Body, "mälmöö", Akonadi::SearchTerm::CondContains));
QList<qint64> collections = QList<qint64>() << 1 << 2;
QStringList mimeTypes = QStringList() << "message/rfc822";
QSet<qint64> result= QSet<qint64>() << 1;
QTest::newRow("find utf8 body contains") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::Headers, "From:", Akonadi::SearchTerm::CondContains));
QList<qint64> collections = QList<qint64>() << 1 << 2;
QStringList mimeTypes = QStringList() << "message/rfc822";
- QSet<qint64> result= QSet<qint64>() << 1 << 2;
+ QSet<qint64> result= QSet<qint64>() << 1 << 2 << 3 << 4;
QTest::newRow("find header contains") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::Message, "body", Akonadi::SearchTerm::CondContains));
QList<qint64> collections = QList<qint64>() << 1 << 2;
QStringList mimeTypes = QStringList() << "message/rfc822";
- QSet<qint64> result= QSet<qint64>() << 1 << 2;
+ QSet<qint64> result= QSet<qint64>() << 1 << 2 << 3 << 4;
QTest::newRow("find message contains") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query(Akonadi::SearchTerm::RelOr);
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::Subject, "subject1", Akonadi::SearchTerm::CondEqual));
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::Subject, "subject2", Akonadi::SearchTerm::CondEqual));
QList<qint64> collections = QList<qint64>() << 1 << 2;
QStringList mimeTypes = QStringList() << "message/rfc822";
QSet<qint64> result= QSet<qint64>() << 1 << 2;
QTest::newRow("or term") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::Subject, "subject", Akonadi::SearchTerm::CondContains));
QList<qint64> collections = QList<qint64>() << 1;
QStringList mimeTypes = QStringList() << "message/rfc822";
QSet<qint64> result= QSet<qint64>() << 1;
QTest::newRow("filter by collection") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::MessageStatus, QString::fromLatin1(Akonadi::MessageFlags::Flagged), Akonadi::SearchTerm::CondContains));
QList<qint64> collections = QList<qint64>() << 1 << 2;
QStringList mimeTypes = QStringList() << "message/rfc822";
- QSet<qint64> result = QSet<qint64>() << 2;
+ QSet<qint64> result = QSet<qint64>() << 2 << 3 << 4;
QTest::newRow("find by message flag") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::ByteSize, QString::number(1000), Akonadi::SearchTerm::CondGreaterOrEqual));
QList<qint64> collections = QList<qint64>() << 1 << 2;
QStringList mimeTypes = QStringList() << "message/rfc822";
- QSet<qint64> result = QSet<qint64>() << 1 << 2;
- QTest::newRow("find by size greate than equal") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
+ QSet<qint64> result = QSet<qint64>() << 1 << 2 << 3 << 4;
+ QTest::newRow("find by size greater than equal") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::ByteSize, QString::number(1002), Akonadi::SearchTerm::CondLessOrEqual));
QList<qint64> collections = QList<qint64>() << 1 << 2;
QStringList mimeTypes = QStringList() << "message/rfc822";
- QSet<qint64> result = QSet<qint64>() << 1 << 2;
+ QSet<qint64> result = QSet<qint64>() << 1 << 2 << 3 << 4;
QTest::newRow("find by size greate than equal") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::ByteSize, QString::number(1001), Akonadi::SearchTerm::CondGreaterOrEqual));
QList<qint64> collections = QList<qint64>() << 1 << 2;
QStringList mimeTypes = QStringList() << "message/rfc822";
- QSet<qint64> result = QSet<qint64>() << 2;
+ QSet<qint64> result = QSet<qint64>() << 2 << 3 << 4;
QTest::newRow("find by size separate") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::HeaderDate, KDateTime(QDate(2013, 11, 10), QTime(12, 30, 0)).toString(KDateTime::ISODate), Akonadi::SearchTerm::CondGreaterOrEqual));
QList<qint64> collections = QList<qint64>() << 1 << 2;
QStringList mimeTypes = QStringList() << "message/rfc822";
- QSet<qint64> result = QSet<qint64>() << 2;
+ QSet<qint64> result = QSet<qint64>() << 2 << 3 << 4;
QTest::newRow("find by date") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::ContactSearchTerm(Akonadi::ContactSearchTerm::Name, "John", Akonadi::SearchTerm::CondContains));
QList<qint64> collections;
QStringList mimeTypes = QStringList() << KABC::Addressee::mimeType();
QSet<qint64> result = QSet<qint64>() << 3;
QTest::newRow("contact by name") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::ContactSearchTerm(Akonadi::ContactSearchTerm::Name, "John", Akonadi::SearchTerm::CondContains));
QList<qint64> collections = QList<qint64>() << 4;
QStringList mimeTypes = QStringList() << KABC::Addressee::mimeType();
QSet<qint64> result;
QTest::newRow("contact collectionfilter") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::ContactSearchTerm(Akonadi::ContactSearchTerm::Name, "john", Akonadi::SearchTerm::CondContains));
QList<qint64> collections = QList<qint64>() << 3;
QStringList mimeTypes = QStringList() << KABC::Addressee::mimeType();
QSet<qint64> result = QSet<qint64>() << 3;
QTest::newRow("contact by lowercase name") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::ContactSearchTerm(Akonadi::ContactSearchTerm::Nickname, "JD", Akonadi::SearchTerm::CondContains));
QList<qint64> collections = QList<qint64>() << 3;
QStringList mimeTypes = QStringList() << KABC::Addressee::mimeType();
QSet<qint64> result = QSet<qint64>() << 3;
QTest::newRow("contact by nickname") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
{
Akonadi::SearchQuery query;
query.addTerm(Akonadi::ContactSearchTerm(Akonadi::ContactSearchTerm::Uid, "uid1", Akonadi::SearchTerm::CondEqual));
QList<qint64> collections = QList<qint64>() << 3;
QStringList mimeTypes = QStringList() << KABC::Addressee::mimeType();
QSet<qint64> result = QSet<qint64>() << 3;
QTest::newRow("contact by uid") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
}
+ {
+ Akonadi::SearchQuery query;
+ query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::HeaderOnlyDate, QDate(2013, 11, 10), Akonadi::SearchTerm::CondGreaterOrEqual));
+ QList<qint64> collections = QList<qint64>() << 1 << 2;
+ QStringList mimeTypes = QStringList() << "message/rfc822";
+ QSet<qint64> result = QSet<qint64>() << 1 << 2 << 3 << 4;
+ QTest::newRow("find by date only") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
+ }
+ {
+ Akonadi::SearchQuery query;
+ query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::HeaderOnlyDate, QDate(2014, 11, 10), Akonadi::SearchTerm::CondGreaterOrEqual));
+ QList<qint64> collections = QList<qint64>() << 1 << 2;
+ QStringList mimeTypes = QStringList() << "message/rfc822";
+ QSet<qint64> result = QSet<qint64>() << 3 << 4;
+ QTest::newRow("find by date only greater or equal") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
+ }
+ {
+ Akonadi::SearchQuery query;
+ query.addTerm(Akonadi::EmailSearchTerm(Akonadi::EmailSearchTerm::HeaderOnlyDate, QDate(2014, 11, 10), Akonadi::SearchTerm::CondGreaterThan));
+ QList<qint64> collections = QList<qint64>() << 1 << 2;
+ QStringList mimeTypes = QStringList() << "message/rfc822";
+ QSet<qint64> result = QSet<qint64>() << 4;
+ QTest::newRow("find by date only greater than") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
+ }
// {
// Akonadi::SearchQuery query;
// query.addTerm(Akonadi::ContactSearchTerm(Akonadi::ContactSearchTerm::Birthday, "uid1", Akonadi::SearchTerm::CondEqual));
//
// QList<qint64> collections = QList<qint64>() << 3;
// QStringList mimeTypes = QStringList() << KABC::Addressee::mimeType();
// QSet<qint64> result = QSet<qint64>() << 3;
// QTest::newRow("contact by birthday") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
// }
// {
// Akonadi::SearchQuery query;
// query.addTerm(Akonadi::SearchTerm("*", "", Akonadi::SearchTerm::CondEqual));
//
// QList<qint64> collections;
// QStringList mimeTypes = QStringList() << KABC::Addressee::mimeType();
// QSet<qint64> result = QSet<qint64>() << 3 << 4;
// QTest::newRow("retrieve all contacts") << QString::fromLatin1(query.toJSON()) << collections << mimeTypes << result;
// }
}
void testEmailSearch() {
QFETCH(QString, query);
QFETCH(QList<qint64>, collections);
QFETCH(QStringList, mimeTypes);
QFETCH(QSet<qint64>, expectedResult);
kDebug() << "starting search";
SearchPlugin plugin;
QSet<qint64> result = plugin.search(query, collections, mimeTypes);
kDebug() << result;
QCOMPARE(result, expectedResult);
}
};
QTEST_MAIN(SearchPluginTest)
#include "searchplugintest.moc"
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sat, Apr 4, 1:12 AM (1 w, 6 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18821855
Default Alt Text
(22 KB)
Attached To
Mode
rKB baloo
Attached
Detach File
Event Timeline