summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/tests.py89
-rw-r--r--ishtar_common/views.py6
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)