diff options
Diffstat (limited to 'archaeological_finds')
-rw-r--r-- | archaeological_finds/tests.py | 39 | ||||
-rw-r--r-- | archaeological_finds/views.py | 29 |
2 files changed, 57 insertions, 11 deletions
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 3c9995632..d9b79be89 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -937,6 +937,45 @@ class FindSearchTest(FindInit, TestCase): self._test_search(c, result) +class FindAutocompleteTest(FindInit, TestCase): + fixtures = WAREHOUSE_FIXTURES + model = models.Find + + def setUp(self): + self.create_finds(force=True) + self.create_finds(force=True) + self.create_finds(force=True) + self.create_finds(force=True) + self.username = 'myuser' + self.password = 'mypassword' + User.objects.create_superuser(self.username, 'myemail@test.com', + self.password) + self.client = Client() + + def test_autocomplete(self): + find = self.finds[0] + find.label = "test 012" + find.save() + find2 = self.finds[1] + find2.label = "test 12" + find2.save() + find3 = self.finds[2] + find3.label = "test 1" + find3.save() + find4 = self.finds[3] + find4.label = "test 0120" + find4.save() + c = Client() + c.login(username=self.username, password=self.password) + response = c.get(reverse('autocomplete-find') + "?term=12") + self.assertEqual(response.status_code, 200) + res = json.loads(response.content) + self.assertEqual(len(res), 3) + self.assertEqual(res[0]['id'], find2.pk) # " 12" - startswith + self.assertEqual(res[1]['id'], find.pk) # 12 - endswith + self.assertEqual(res[2]['id'], find4.pk) # 12 - contains + + class FindPermissionTest(FindInit, TestCase): fixtures = FIND_FIXTURES model = models.Find diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index 72d02305c..9e1a22a2a 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -17,6 +17,7 @@ # See the file COPYING for details. +from collections import OrderedDict import json from django.core.exceptions import PermissionDenied @@ -42,7 +43,7 @@ from archaeological_finds import forms from ishtar_common.views import get_autocomplete_generic, IshtarMixin, \ LoginRequiredMixin, QAItemEditForm, QAItemForm from ishtar_common.views_item import display_item, get_item, show_item, \ - revert_item, get_autocomplete_item, get_autocomplete_query + revert_item, get_autocomplete_item, get_autocomplete_queries from archaeological_operations.wizards import AdministrativeActDeletionWizard from archaeological_finds import wizards @@ -152,17 +153,23 @@ def autocomplete_findbasket(request, current_right=None): if not request.GET.get('term'): return HttpResponse(content_type='text/plain') - query = get_autocomplete_query(request, ['label']) limit = 20 - query = query & models.FindBasket.get_write_query_owns( - request.user.ishtaruser) - items = models.FindBasket.objects.filter(query).distinct().order_by( - 'label')[:limit] - data = json.dumps( - [{'id': item.pk, - 'value': u"{} - {}".format(item.label, item.user)[:60]} - for item in items] - ) + result = OrderedDict() + for query in get_autocomplete_queries(request, ['label']): + query = query & models.FindBasket.get_write_query_owns( + request.user.ishtaruser) + objects = models.FindBasket.objects.filter(query).distinct().order_by( + 'label')[:limit] + for obj in objects: + if obj.id not in list(result.keys()): + result[obj.id] = u"{} - {}".format(obj.label, obj.user)[:60] + limit -= 1 + if not limit: + break + if not limit: + break + data = json.dumps([{'id': obj[0], 'value': obj[1]} + for obj in list(result.items())]) return HttpResponse(data, content_type='text/plain') |