diff options
| -rw-r--r-- | archaeological_finds/models_finds.py | 3 | ||||
| -rw-r--r-- | archaeological_finds/tests.py | 78 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 2 | 
3 files changed, 78 insertions, 5 deletions
| diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index ff989fb07..a4e021d68 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -27,8 +27,7 @@ from django.db.models import Max, Q, F  from django.db.models.signals import m2m_changed, post_save, post_delete, \      pre_delete  from django.core.exceptions import ObjectDoesNotExist -from django.utils.translation import ugettext_lazy as _, pgettext_lazy, \ -    activate, deactivate +from django.utils.translation import ugettext_lazy as _, pgettext_lazy\  from ishtar_common.data_importer import post_importer_action, ImporterError  from ishtar_common.utils import cached_label_changed, post_save_point, \ diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index fc51cea70..9c023ade6 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -28,6 +28,7 @@ from django.core.urlresolvers import reverse  from django.test.client import Client  from ishtar_common.models import ImporterType, IshtarUser, ImporterColumn,\      FormaterType, ImportTarget, IshtarSiteProfile, ProfileType +from django.utils.translation import pgettext_lazy  from ishtar_common.models import Person, get_current_profile, UserProfile, \      Town, Area, Document @@ -35,7 +36,8 @@ from archaeological_context_records.models import Period, Dating, \      ContextRecord, DatingType, DatingQuality  from archaeological_finds import models, views  from archaeological_warehouse.models import Warehouse, WarehouseType, \ -    ContainerType, Container +    ContainerType, Container, WarehouseDivision, WarehouseDivisionLink, \ +    ContainerLocalisation  from ishtar_common import forms_common @@ -516,11 +518,12 @@ class FindTest(FindInit, TestCase):  class FindSearchTest(FindInit, TestCase): -    fixtures = FIND_FIXTURES +    fixtures = WAREHOUSE_FIXTURES      model = models.Find      def setUp(self):          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', @@ -685,6 +688,77 @@ class FindSearchTest(FindInit, TestCase):          res = json.loads(response.content)          self.assertEqual(res['recordsTotal'], 1) +    def test_dynamic_field_search(self): +        find = self.finds[0] +        find2 = self.finds[1] +        c = Client() + +        warehouse = Warehouse.objects.create( +            name="Lambda warehouse", +            warehouse_type=WarehouseType.objects.all()[0]) +        warehouse_div = WarehouseDivision.objects.create( +            label="Salle", txt_idx='salle') +        warehouse_div2 = WarehouseDivision.objects.create( +            label=u"Étagère", txt_idx='etagere') +        warehouse_div_lnk = WarehouseDivisionLink.objects.create( +            warehouse=warehouse, +            division=warehouse_div +        ) +        warehouse_div_lnk2 = WarehouseDivisionLink.objects.create( +            warehouse=warehouse, +            division=warehouse_div2 +        ) +        container = Container.objects.create( +            location=warehouse, +            responsible=warehouse, +            container_type=ContainerType.objects.all()[0] +        ) +        ContainerLocalisation.objects.create(container=container, +                                             division=warehouse_div_lnk, +                                             reference="B2") +        ContainerLocalisation.objects.create(container=container, +                                             division=warehouse_div_lnk2, +                                             reference="A5") +        find.container_ref = container +        find.container = container +        find.save() +        container2 = Container.objects.create( +            location=warehouse, +            responsible=warehouse, +            container_type=ContainerType.objects.all()[0] +        ) +        ContainerLocalisation.objects.create(container=container2, +                                             division=warehouse_div_lnk, +                                             reference="B5") +        ContainerLocalisation.objects.create(container=container2, +                                             division=warehouse_div_lnk2, +                                             reference="A5") +        find2.container_ref = container2 +        find2.container = container2 +        find2.save() + +        ref_div_key = unicode(pgettext_lazy("key for text search", +                                            'reference-division')) + "-" + +        result = [ +            (u'{}="{}"'.format(ref_div_key + "salle", "B2"), 1), +            (u'{}="{}"'.format(ref_div_key + "etagere", "A5"), 2), +            (u'{}="{}" {}="{}"'.format( +                ref_div_key + "salle", "B2", ref_div_key + "etagere", "A5"), 1), +            (u'{}="{}" {}="{}"'.format( +                ref_div_key + "salle", "B*", ref_div_key + "etagere", "A5"), 2), +        ] +        c.login(username=self.username, password=self.password) + +        for q, expected_result in result: +            search = {'search_vector': q} +            response = c.get(reverse('get-find'), search) +            self.assertEqual(response.status_code, 200) +            res = json.loads(response.content) +            self.assertEqual(res['recordsTotal'], expected_result, +                             msg="{} result(s) where expected for search:" +                                 " {}".format(expected_result, q)) +  class FindPermissionTest(FindInit, TestCase):      fixtures = FIND_FIXTURES diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 437bbd651..95e8b5b05 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -429,6 +429,7 @@ def _parse_query_string(string, query_parameters, current_dct, exc_dct,                          for k in dct:  # clean "                              dct[k] = dct[k].replace('"', '')                          # distinct query wait for a query +                        _manage_clean_search_field(dct)                          if excluded:                              extra_distinct_q[-1] = ~Q(**dct)                          else: @@ -1302,7 +1303,6 @@ def get_item(model, func_name, default_name, extra_request_keys=None,          # print(query)          items = model.objects.filter(query)          for d_q in distinct_queries: -            print(d_q)              items = items.filter(d_q)          if base_query: | 
