From 719240d19bfcf5488a99d38cacccdbbeb94e30f8 Mon Sep 17 00:00:00 2001 From: Bruno Wagner Goncalves Date: Thu, 7 Aug 2014 16:23:40 -0300 Subject: #2 - +@shyba +@bwagner +@neissi - fixed search with quotes bug --- service/app/search/__init__.py | 5 +++-- service/test/search/test_search_query.py | 33 +++++++++++++++++--------------- 2 files changed, 21 insertions(+), 17 deletions(-) (limited to 'service') diff --git a/service/app/search/__init__.py b/service/app/search/__init__.py index 22f4795b..c89ae704 100644 --- a/service/app/search/__init__.py +++ b/service/app/search/__init__.py @@ -1,4 +1,5 @@ from scanner import StringScanner, StringRegexp +import re def _next_token(): @@ -23,8 +24,8 @@ class SearchQuery: @staticmethod def compile(query): compiled = {"tags": [], "not_tags": []} - - scanner = StringScanner(query.encode('utf8').replace("\"", "")) + sanitized_query = re.sub(r"['\"]", "", query.encode('utf8')) + scanner = StringScanner(sanitized_query) first_token = True while not scanner.is_eos: token = scanner.scan(_next_token()) diff --git a/service/test/search/test_search_query.py b/service/test/search/test_search_query.py index a5f3be99..c81b9ba1 100644 --- a/service/test/search/test_search_query.py +++ b/service/test/search/test_search_query.py @@ -1,21 +1,24 @@ -import sys, os - +import sys +import os +import unittest from app.search import SearchQuery -def test_one_tag(): - assert SearchQuery.compile(u"in:inbox")["tags"] == ["inbox"] - assert SearchQuery.compile(u"in:trash")["tags"] == ["trash"] - -def test_two_tags_or(): - assert SearchQuery.compile(u"in:inbox or in:trash")["tags"] == ["inbox", "trash"] +class SearchTestCase(unittest.TestCase): + + def test_one_tag(self): + self.assertEquals(SearchQuery.compile(u"in:inbox")["tags"], ["inbox"]) + self.assertEquals(SearchQuery.compile(u"in:trash")["tags"], ["trash"]) + + def test_two_tags_or(self): + self.assertEquals(SearchQuery.compile(u"in:inbox or in:trash")["tags"], ["inbox", "trash"]) - -def test_tag_negate(): - assert SearchQuery.compile(u"-in:trash")["not_tags"] == ["trash"] + def test_tag_negate(self): + self.assertEquals(SearchQuery.compile(u"-in:trash")["not_tags"], ["trash"]) -def test_general_search(): - assert SearchQuery.compile(u"searching")["general"] == "searching" + def test_general_search(self): + self.assertEquals(SearchQuery.compile(u"searching")["general"], "searching") -def test_tags_with_quotes(): - assert SearchQuery.compile(u"in:\"inbox\"")["tags"] == ["inbox"] + def test_tags_with_quotes(self): + self.assertEquals(SearchQuery.compile(u"in:\"inbox\"")["tags"], ["inbox"]) + self.assertEquals(SearchQuery.compile(u"in:'inbox'")["tags"], ["inbox"]) -- cgit v1.2.3