modified tests so they're "compatible" with MySQL which ignores all words shorter than 4 chars

This commit is contained in:
Jirka Vejrazka 2016-03-27 20:33:32 +02:00
parent 8914cfb83c
commit d471858a98
2 changed files with 47 additions and 44 deletions

View file

@ -51,33 +51,33 @@ class EscapingTest(TestCase):
def testEscaping(self):
# Test query escaping.
self.assertEqual(escape_query(""), "")
self.assertEqual(escape_query("abc"), "abc")
self.assertEqual(escape_query("abc def"), "abc def")
self.assertEqual(escape_query("abc def"), "abc def")
self.assertEqual(escape_query("abc'def"), "abc'def")
self.assertEqual(escape_query("'abc&def"), "'abc&def")
self.assertEqual(escape_query("abc@def"), "abc@def")
self.assertEqual(escape_query("abc#def"), "abc#def")
self.assertEqual(escape_query("abc$def"), "abc$def")
self.assertEqual(escape_query("abc^def"), "abc^def")
self.assertEqual(escape_query("abc&def"), "abc&def")
self.assertEqual(escape_query("abc*def"), "abc*def")
self.assertEqual(escape_query("abc=def"), "abc=def")
self.assertEqual(escape_query("abc+def"), "abc+def")
self.assertEqual(escape_query("abc-def"), "abc-def")
self.assertEqual(escape_query("abc_def"), "abc_def")
self.assertEqual(escape_query("abc.def"), "abc.def")
self.assertEqual(escape_query("abc,def"), "abc,def")
self.assertEqual(escape_query("abcd"), "abcd")
self.assertEqual(escape_query("abcd efgh"), "abcd efgh")
self.assertEqual(escape_query("abcd efgh"), "abcd efgh")
self.assertEqual(escape_query("abcd'efgh"), "abcd'efgh")
self.assertEqual(escape_query("'abcd&efgh"), "'abcd&efgh")
self.assertEqual(escape_query("abcd@efgh"), "abcd@efgh")
self.assertEqual(escape_query("abcd#efgh"), "abcd#efgh")
self.assertEqual(escape_query("abcd$efgh"), "abcd$efgh")
self.assertEqual(escape_query("abcd^efgh"), "abcd^efgh")
self.assertEqual(escape_query("abcd&efgh"), "abcd&efgh")
self.assertEqual(escape_query("abcd*efgh"), "abcd*efgh")
self.assertEqual(escape_query("abcd=efgh"), "abcd=efgh")
self.assertEqual(escape_query("abcd+efgh"), "abcd+efgh")
self.assertEqual(escape_query("abcd-efgh"), "abcd-efgh")
self.assertEqual(escape_query("abcd_efgh"), "abcd_efgh")
self.assertEqual(escape_query("abcd.efgh"), "abcd.efgh")
self.assertEqual(escape_query("abcd,efgh"), "abcd,efgh")
# now the ones where we replace harmful characters
self.assertEqual(escape_query("&abc"), "abc")
self.assertEqual(escape_query("&&&abc"), "abc")
self.assertEqual(escape_query("abc&"), "abc")
self.assertEqual(escape_query("abc&&&"), "abc")
self.assertEqual(escape_query("abc|def"), "abc&def")
self.assertEqual(escape_query("abc!def"), "abc&def")
self.assertEqual(escape_query("abc:def"), "abc&def")
self.assertEqual(escape_query("abc(def"), "abc&def")
self.assertEqual(escape_query("abc)def"), "abc&def")
self.assertEqual(escape_query("&abcd"), "abcd")
self.assertEqual(escape_query("&&&abcd"), "abcd")
self.assertEqual(escape_query("abcd&"), "abcd")
self.assertEqual(escape_query("abcd&&&"), "abcd")
self.assertEqual(escape_query("abcd|efgh"), "abcd&efgh")
self.assertEqual(escape_query("abcd!efgh"), "abcd&efgh")
self.assertEqual(escape_query("abcd:efgh"), "abcd&efgh")
self.assertEqual(escape_query("abcd(efgh"), "abcd&efgh")
self.assertEqual(escape_query("abcd)efgh"), "abcd&efgh")
complex_registration_search_engine = watson.SearchEngine("restricted")
@ -355,73 +355,73 @@ class SearchTest(SearchTestBase):
x = WatsonTestModel1.objects.create(
title = "title model1 instance12",
content = "content model1 instance13 d'Argent",
description = "description abc+def",
description = "description abcd+efgh",
)
self.assertEqual(watson.search("abc+def").count(), 1)
self.assertEqual(watson.search("abcd+efgh").count(), 1)
x.delete()
x = WatsonTestModel1.objects.create(
title = "title model1 instance12",
content = "content model1 instance13 d'Argent",
description = "description abc&def",
description = "description abcd&efgh",
)
self.assertEqual(watson.search("abc&def").count(), 1)
self.assertEqual(watson.search("abcd&efgh").count(), 1)
x.delete()
x = WatsonTestModel1.objects.create(
title = "title model1 instance12",
content = "content model1 instance13 d'Argent",
description = "description abc|def",
description = "description abcd|efgh",
)
self.assertEqual(watson.search("abc|def").count(), 1)
self.assertEqual(watson.search("abcd|efgh").count(), 1)
x.delete()
x = WatsonTestModel1.objects.create(
title = "title model1 instance12",
content = "content model1 instance13 d'Argent",
description = "description abc:def",
description = "description abcd:efgh",
)
self.assertEqual(watson.search("abc:def").count(), 1)
self.assertEqual(watson.search("abcd:efgh").count(), 1)
x.delete()
x = WatsonTestModel1.objects.create(
title = "title model1 instance12",
content = "content model1 instance13 d'Argent",
description = "description abc.def",
description = "description abcd.efgh",
)
self.assertEqual(watson.search("abc.def").count(), 1)
self.assertEqual(watson.search("abcd.efgh").count(), 1)
x.delete()
x = WatsonTestModel1.objects.create(
title = "title model1 instance12",
content = "content model1 instance13 d'Argent",
description = "description abc,def",
description = "description abcd,efgh",
)
self.assertEqual(watson.search("abc,def").count(), 1)
self.assertEqual(watson.search("abcd,efgh").count(), 1)
x.delete()
x = WatsonTestModel1.objects.create(
title = "title model1 instance12",
content = "content model1 instance13 d'Argent",
description = "description abc:def",
description = "description abcd:efgh",
)
self.assertEqual(watson.search("abc:def").count(), 1)
self.assertEqual(watson.search("abcd:efgh").count(), 1)
x.delete()
x = WatsonTestModel1.objects.create(
title = "title model1 instance12",
content = "content model1 instance13 d'Argent",
description = "description abc()",
description = "description abcd()",
)
self.assertEqual(watson.search("abc()").count(), 1)
self.assertEqual(watson.search("abcd()").count(), 1)
x.delete()
x = WatsonTestModel1.objects.create(
title = "title model1 instance12",
content = "content model1 instance13 d'Argent",
description = "description abc(def",
description = "description abcd(efgh",
)
self.assertEqual(watson.search("abc(def").count(), 1)
self.assertEqual(watson.search("abcd(efgh").count(), 1)
x.delete()

View file

@ -30,6 +30,9 @@ RE_SPACE = re.compile(r"[\s]+", re.UNICODE)
RE_NON_WORD = re.compile(r'[!:"(|)]', re.UNICODE)
def escape_query(text):
"""normalizes the query text to a format that can be consumed
by the backend database
"""
text = force_text(text)
text = RE_SPACE.sub(" ", text) # Standardize spacing.
text = RE_NON_WORD.sub("&", text) # Replace harmful characters with logical "AND"