summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAslak Knutsen <aslak@redhat.com>2013-03-01 16:36:59 +0100
committerAslak Knutsen <aslak@redhat.com>2013-03-02 12:50:00 +0100
commitad408d3c91977629f058fac843754f563e08f60c (patch)
tree46a1211730545495129a7bbb2936a892293d53c1
parent89885bbcb49c98008cd22a7a7a4bd63b4ec6a9dd (diff)
downloadkittystore-ad408d3c91977629f058fac843754f563e08f60c.tar.gz
kittystore-ad408d3c91977629f058fac843754f563e08f60c.tar.xz
kittystore-ad408d3c91977629f058fac843754f563e08f60c.zip
Update LIKE search in Store to be case insensitive
* Add Tests to verify search_* and get_* methods used by REST API
-rw-r--r--kittystore/storm/store.py13
-rw-r--r--kittystore/test/test_storm_store_fetch.py86
2 files changed, 93 insertions, 6 deletions
diff --git a/kittystore/storm/store.py b/kittystore/storm/store.py
index 01c7554..6479099 100644
--- a/kittystore/storm/store.py
+++ b/kittystore/storm/store.py
@@ -257,7 +257,7 @@ class StormStore(object):
"""
emails = self.db.find(Email, And(
Email.list_name == unicode(list_name),
- Email.content.ilike(u'%{0}%'.format(keyword))
+ Email.content.like(u'%{0}%'.format(keyword), case_sensitive = False)
)).order_by(Desc(Email.date))
return emails
@@ -273,8 +273,8 @@ class StormStore(object):
emails = self.db.find(Email, And(
Email.list_name == unicode(list_name),
Or(
- Email.content.ilike(u'%{0}%'.format(keyword)),
- Email.subject.ilike(u'%{0}%'.format(keyword)),
+ Email.content.like(u'%{0}%'.format(keyword), case_sensitive = False),
+ Email.subject.like(u'%{0}%'.format(keyword), case_sensitive = False),
))).order_by(Desc(Email.date))
return emails
@@ -289,8 +289,8 @@ class StormStore(object):
emails = self.db.find(Email, And(
Email.list_name == unicode(list_name),
Or(
- Email.sender_name.ilike(u'%{0}%'.format(keyword)),
- Email.sender_email.ilike(u'%{0}%'.format(keyword)),
+ Email.sender_name.like(u'%{0}%'.format(keyword), case_sensitive = False),
+ Email.sender_email.like(u'%{0}%'.format(keyword), case_sensitive = False),
))).order_by(Desc(Email.date))
return emails
@@ -304,7 +304,7 @@ class StormStore(object):
"""
emails = self.db.find(Email, And(
Email.list_name == unicode(list_name),
- Email.subject.ilike(u'%{0}%'.format(keyword)),
+ Email.subject.like(u'%{0}%'.format(keyword), case_sensitive = False),
)).order_by(Desc(Email.date))
return emails
@@ -328,6 +328,7 @@ class StormStore(object):
Email.message_id == unicode(message_id)
)).count()
+
def get_list_names(self):
"""Return the names of the archived lists.
diff --git a/kittystore/test/test_storm_store_fetch.py b/kittystore/test/test_storm_store_fetch.py
new file mode 100644
index 0000000..273c715
--- /dev/null
+++ b/kittystore/test/test_storm_store_fetch.py
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+# pylint: disable=R0904,C0103
+
+import unittest
+
+from mailman.email.message import Message
+
+from kittystore.storm import get_storm_store
+
+from kittystore.test import FakeList
+
+
+class TestStormStoreFetch(unittest.TestCase):
+
+ def setUp(self):
+ self.store = get_storm_store("sqlite:")
+ self.listname, self.m_hash = self.add_fetch_data()
+
+ def tearDown(self):
+ self.store.close()
+
+ def add_fetch_data(self):
+ msg = Message()
+ msg["From"] = "dummy@example.com"
+ msg["Subject"] = "Fake Subject"
+ msg["Message-ID"] = "<dummy>"
+ msg["Date"] = "Fri, 02 Nov 2012 16:07:54"
+ msg.set_payload("Fake Message")
+
+ ml = FakeList("example-list")
+ ml.display_name = u"name 1"
+ ml.description = u"desc 1"
+
+ return ml.fqdn_listname, self.store.add_to_list(ml, msg)
+
+ def test_get_message_by_id_from_list(self):
+ """Get a Message in a List by Message-ID """
+ m = self.store.get_message_by_id_from_list(self.listname, "dummy")
+ self.assertIsNotNone(m)
+ self.assertEqual(m.sender_email, "dummy@example.com")
+
+ def test_get_thread(self):
+ """Get a Thread in a List by Thread-ID """
+ # Test assumes message_id_hash == thread_id
+ m = self.store.get_message_by_hash_from_list(self.listname, self.m_hash)
+ self.assertIsNotNone(m)
+ t = self.store.get_thread(self.listname, m.thread_id)
+ self.assertIsNotNone(t)
+ self.assertEqual(t.thread_id, m.thread_id)
+ self.assertEqual(t.list_name, self.listname)
+
+ def test_search_list_for_sender(self):
+ """Search for a Message in a List by Sender """
+ email = self.store.search_list_for_sender(self.listname, "dummy@example").one()
+ self.assertIsNotNone(email)
+ self.assertEqual(email.sender_email, "dummy@example.com")
+
+ def test_search_list_for_content(self):
+ """Search for a Message in a List by Content """
+ email = self.store.search_list_for_content(self.listname, "Message").one()
+ self.assertIsNotNone(email)
+ self.assertEqual(email.sender_email, "dummy@example.com")
+
+ def test_search_list_for_content_case_false(self):
+ """Search for a Message in a List by Content (case insensitive)"""
+ email = self.store.search_list_for_content(self.listname, "MESSAGE").one()
+ self.assertIsNotNone(email)
+ self.assertEqual(email.sender_email, "dummy@example.com")
+
+ def test_search_list_for_subject(self):
+ """Search for a Message in a List by Subject """
+ email = self.store.search_list_for_subject(self.listname, "Subject").one()
+ self.assertIsNotNone(email)
+ self.assertEqual(email.sender_email, "dummy@example.com")
+
+ def test_search_list_for_content_subject_subject(self):
+ """Search for a Message in a List by Content or Subject. Match for Subject """
+ email = self.store.search_list_for_content_subject(self.listname, "Subject").one()
+ self.assertIsNotNone(email)
+ self.assertEqual(email.sender_email, "dummy@example.com")
+
+ def test_search_list_for_content_subject_content(self):
+ """Search for a Message in a List by Content or Subject. Match for Content"""
+ email = self.store.search_list_for_content_subject(self.listname, "Message").one()
+ self.assertIsNotNone(email)
+ self.assertEqual(email.sender_email, "dummy@example.com") \ No newline at end of file