Added regression test for #103.

This commit is contained in:
Jorge C. Leitão 2014-05-20 22:57:52 +02:00
parent 39bc6d6c89
commit ad0d67dc12
3 changed files with 33 additions and 7 deletions

View File

@ -14,5 +14,13 @@ class DocumentIndex(indexes.SearchIndex):
name = indexes.CharField(model_attr='name')
date = indexes.DateField(model_attr='date')
tags = indexes.MultiValueField()
def get_model(self):
return models.Document()
def prepare_tags(self, obj):
l = [['tag', 'tag-test', 'tag-test-test'],
['tag', 'tag-test'],
['tag']]
return l[obj.id % 3]

View File

@ -150,7 +150,7 @@ class XapianSimpleMockIndex(indexes.SearchIndex):
return '22.34'
def prepare_multi_value(self, obj):
return ['multi1', 'multi2']
return ['tag', 'tag-test', 'tag-test-test']
class HaystackBackendTestCase(object):
@ -288,13 +288,23 @@ class BackendIndexationTestCase(HaystackBackendTestCase, TestCase):
self.assertFalse('ZXDECIMAL_NUMBER22.34' in terms)
def test_multivalue_field(self):
"""
Regression test for #103
"""
terms = get_terms(self.backend, '-a')
self.assertTrue('multi1' in terms)
self.assertTrue('multi2' in terms)
self.assertTrue('XMULTI_VALUEmulti1' in terms)
self.assertTrue('XMULTI_VALUEmulti2' in terms)
self.assertTrue('ZXMULTI_VALUEmulti2' in terms)
self.assertTrue('Zmulti2' in terms)
self.assertTrue('tag' in terms)
self.assertTrue('tag-test' in terms)
self.assertTrue('tag-test-test' in terms)
self.assertTrue('XMULTI_VALUEtag' in terms)
self.assertTrue('XMULTI_VALUEtag-test' in terms)
self.assertTrue('XMULTI_VALUEtag-test-test' in terms)
# these and only these terms
# 3 for the exact term (^{term}$)
self.assertEqual(len([term for term in terms if term.startswith('XMULTI_VALUE')]), 6)
# no stem for exact multivalues.
self.assertEqual(len([term for term in terms if term.startswith('ZXMULTI_VALUE')]), 0)
def test_non_ascii_chars(self):
terms = get_terms(self.backend, '-a')

View File

@ -193,3 +193,11 @@ class InterfaceTestCase(TestCase):
"""
self.assertEqual(pks(self.queryset.filter(content='corrup\xe7\xe3o')),
pks(Document.objects.filter(summary__contains='corrup\xe7\xe3o')))
def test_multi_values_exact_search(self):
"""
Regression test for #103
"""
self.assertEqual(len(self.queryset.filter(tags__exact='tag')), 12)
self.assertEqual(len(self.queryset.filter(tags__exact='tag-test')), 8)
self.assertEqual(len(self.queryset.filter(tags__exact='tag-test-test')), 4)