diff options
-rw-r--r-- | ishtar_common/tests.py | 89 | ||||
-rw-r--r-- | ishtar_common/views.py | 6 |
2 files changed, 92 insertions, 3 deletions
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index db2e956ad..03f8e3a69 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -21,6 +21,7 @@ from bs4 import BeautifulSoup as Soup import csv import datetime import io +import json import os import shutil from io import StringIO @@ -626,6 +627,94 @@ class UserProfileTest(TestCase): ) +class AutocompleteTest(TestCase): + fixtures = OPERATION_FIXTURES + models = [ + (models.User, 'autocomplete-user', "username", None), + (models.User, 'autocomplete-ishtaruser', "username", None), + (models.Person, 'autocomplete-person', "name", None), + (models.Person, 'autocomplete-person-permissive', "name", None), + (models.Town, 'autocomplete-town', "name", None), + (models.Town, 'autocomplete-advanced-town', None, + "create_advanced_town"), + (models.Department, "autocomplete-department", "label", None), + (models.Author, "autocomplete-author", None, "create_author"), + (models.Organization, 'autocomplete-organization', None, + "create_orga"), + ] + + def setUp(self): + self.password = 'mypassword' + self.username = "myuser" + user = User.objects.create_superuser( + self.username, 'myemail@test.com', self.password) + user.set_password(self.password) + user.save() + self.client = Client() + self.client.login(username=self.username, password=self.password) + + def create_advanced_town(self, base_name): + town, __ = models.Town.objects.get_or_create(name=base_name) + dep, __ = models.Department.objects.get_or_create(label="Mydepartment", + number=999) + town.departement = dep + town.save() + return town, "Mydepart" + + def create_author(self, base_name): + person, __ = models.Person.objects.get_or_create(name=base_name) + author, __ = models.Author.objects.get_or_create( + person=person, author_type=models.AuthorType.objects.all()[0]) + return author, None + + def create_orga(self, base_name): + orga, __ = models.Organization.objects.get_or_create( + name=base_name, + organization_type=models.OrganizationType.objects.all()[0]) + return orga, None + + def test_autocomplete(self): + for model, url, lbl_key, prepare_func in self.models: + url = reverse(url) + base_name = "tralala lere" + search_term = "trala" + if prepare_func: + item, extra_search = getattr(self, prepare_func)(base_name) + if extra_search: + search_term += " " + extra_search + else: + item, __ = model.objects.get_or_create( + **{lbl_key: base_name}) + response = self.client.get(url, {"term": search_term}) + self.assertEqual( + response.status_code, 200, + msg="Status code != 200 - {}".format(url)) + data = json.loads(response.content.decode()) + self.assertEqual( + len(data), 1, + msg="{} result for '{}' expected 1 - {}".format( + len(data), search_term, url)) + self.assertEqual( + data[0]['id'], item.pk, + msg="id: {} expected {} for '{}' - {}".format( + data[0]['id'], item.pk, search_term, url)) + + search_term = "ler " + search_term + response = self.client.get(url, {"term": search_term}) + self.assertEqual( + response.status_code, 200, + msg="Status code != 200 when reaching {}".format(url)) + data = json.loads(response.content.decode()) + self.assertEqual( + len(data), 1, + msg="{} result for '{}' expected 1 - {}".format( + len(data), search_term, url)) + self.assertEqual( + data[0]['id'], item.pk, + msg="id: {} expected {} for '{}' - {}".format( + data[0]['id'], item.pk, search_term, url)) + + class AdminGenTypeTest(TestCase): fixtures = OPERATION_FIXTURES gen_models = [ diff --git a/ishtar_common/views.py b/ishtar_common/views.py index a3bc0c034..1109b2dc9 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -605,7 +605,7 @@ def autocomplete_department(request): if not request.GET.get('term'): return HttpResponse('[]', content_type='text/plain') q = request.GET.get('term') - q = unicodedata.normalize("NFKD", q).encode('ascii', 'ignore') + q = unicodedata.normalize("NFKD", q).encode('ascii', 'ignore').decode() query = Q() for q in q.split(' '): extra = (Q(label__icontains=q) | Q(number__istartswith=q)) @@ -621,7 +621,7 @@ def autocomplete_town(request): if not request.GET.get('term'): return HttpResponse(content_type='text/plain') q = request.GET.get('term') - q = unicodedata.normalize("NFKD", q).encode('ascii', 'ignore') + q = unicodedata.normalize("NFKD", q).encode('ascii', 'ignore').decode() query = Q() for q in q.split(' '): extra = Q(name__icontains=q) @@ -639,7 +639,7 @@ def autocomplete_advanced_town(request, department_id=None, state_id=None): if not request.GET.get('term'): return HttpResponse(content_type='text/plain') q = request.GET.get('term') - q = unicodedata.normalize("NFKD", q).encode('ascii', 'ignore') + q = unicodedata.normalize("NFKD", q).encode('ascii', 'ignore').decode() query = Q() for q in q.split(' '): extra = Q(name__icontains=q) |