diff options
-rw-r--r-- | archaeological_context_records/tests.py | 21 | ||||
-rw-r--r-- | archaeological_files/tests.py | 18 | ||||
-rw-r--r-- | archaeological_files/views.py | 2 | ||||
-rw-r--r-- | archaeological_finds/tests.py | 74 | ||||
-rw-r--r-- | archaeological_operations/tests.py | 30 | ||||
-rw-r--r-- | ishtar_common/tests.py | 103 |
6 files changed, 197 insertions, 51 deletions
diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py index cbb5e0775..32e97c730 100644 --- a/archaeological_context_records/tests.py +++ b/archaeological_context_records/tests.py @@ -38,7 +38,7 @@ from archaeological_operations import models as models_ope from archaeological_context_records import models from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \ - create_superuser, create_user, TestCase + create_superuser, create_user, TestCase, AutocompleteTestBase, AcItem from archaeological_context_records import views @@ -839,3 +839,22 @@ class ContextRecordWizardCreationTest(WizardTest, ContextRecordInit, TestCase): # identical datings, only one should be finaly save cr = models.ContextRecord.objects.order_by('-pk')[0] self.assertEqual(cr.datings.count(), 1) + + +class AutocompleteTest(AutocompleteTestBase, TestCase): + fixtures = CONTEXT_RECORD_FIXTURES + models = [ + AcItem(models.ContextRecord, 'autocomplete-contextrecord', + prepare_func="create_cr"), + ] + + def create_cr(self, base_name): + ope, __ = models_ope.Operation.objects.get_or_create( + common_name="Test", + operation_type=models_ope.OperationType.objects.all()[0] + ) + item, __ = models.ContextRecord.objects.get_or_create( + operation=ope, + label=base_name + ) + return item, None diff --git a/archaeological_files/tests.py b/archaeological_files/tests.py index d78fa0e68..b8755ecbd 100644 --- a/archaeological_files/tests.py +++ b/archaeological_files/tests.py @@ -25,7 +25,8 @@ from django.contrib.auth.models import User from django.core.urlresolvers import reverse from django.test.client import Client -from ishtar_common.tests import TestCase, COMMON_FIXTURES, create_superuser +from ishtar_common.tests import TestCase, COMMON_FIXTURES, create_superuser, \ + AutocompleteTestBase, AcItem from ishtar_common.models import Town, IshtarSiteProfile from archaeological_files import models @@ -302,3 +303,18 @@ class DashboardTest(TestCase, FileInit): response = c.get(reverse(url)) self.assertEqual(response.status_code, 200) + + +class AutocompleteTest(AutocompleteTestBase, TestCase): + fixtures = FILE_TOWNS_FIXTURES + models = [ + AcItem(models.File, 'autocomplete-file', + prepare_func="create_file"), + ] + + def create_file(self, base_name): + item, __ = models.File.objects.get_or_create( + name=base_name, + file_type=models.FileType.objects.all()[0] + ) + return item, None diff --git a/archaeological_files/views.py b/archaeological_files/views.py index e038c515f..50f3a86d2 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -58,7 +58,7 @@ def autocomplete_file(request): for q in q.split(' '): extra = Q(internal_reference__icontains=q) | \ Q(towns__name__icontains=q) | \ - Q(address__icontains=q) + Q(address__icontains=q) | Q(name__icontains=q) try: int(q) extra = extra | Q(year=q) | Q(numeric_reference=q) diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index d40c9b19e..38cee1a91 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -39,11 +39,13 @@ from archaeological_finds import models, views from archaeological_warehouse.models import Warehouse, WarehouseType, \ ContainerType, Container, WarehouseDivision, WarehouseDivisionLink, \ ContainerLocalisation +from archaeological_operations.models import Operation, OperationType +from archaeological_context_records.models import ContextRecord from ishtar_common import forms_common from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \ - TestCase, create_user, create_superuser + TestCase, create_user, create_superuser, AutocompleteTestBase, AcItem from archaeological_operations.tests import ImportTest, create_operation from archaeological_context_records.tests import ContextRecordInit, \ CONTEXT_RECORD_FIXTURES, CONTEXT_RECORD_TOWNS_FIXTURES @@ -68,7 +70,11 @@ WAREHOUSE_FIXTURES = FIND_FIXTURES + [ class FindInit(ContextRecordInit): test_context_records = False - def create_finds(self, data_base={}, data={}, user=None, force=False): + def create_finds(self, data_base=None, data=None, user=None, force=False): + if not data_base: + data_base = {} + if not data: + data = {} if not getattr(self, 'finds', None): self.finds = [] if not getattr(self, 'base_finds', None): @@ -1740,7 +1746,7 @@ class GeomaticTest(FindInit, TestCase): cr = ContextRecord.objects.get(pk=base_find.context_record.pk) cr.point_2d = 'SRID=4326;' + center cr.point_source = 'P' - cr.point_source_item = unicode(ContextRecord._meta.verbose_name) + cr.point_source_item = str(ContextRecord._meta.verbose_name) cr.save() cr = ContextRecord.objects.get(pk=base_find.context_record.pk) cr.x = cr.point_2d.x @@ -1758,7 +1764,7 @@ class GeomaticTest(FindInit, TestCase): self.assertEqual(base_find.multi_polygon, cr.multi_polygon) self.assertEqual(base_find.point_source, 'P') # precise self.assertEqual(base_find.point_source_item, - unicode(ContextRecord._meta.verbose_name)) + str(ContextRecord._meta.verbose_name)) # overload of coordinates by form base_find = models.BaseFind.objects.get(pk=base_find.pk) @@ -1823,7 +1829,7 @@ class GeomaticTest(FindInit, TestCase): cr = ContextRecord.objects.get(pk=base_find.context_record.pk) cr.multi_polygon = 'SRID=4326;' + limit cr.multi_polygon_source = 'P' - cr.multi_polygon_source_item = unicode(ContextRecord._meta.verbose_name) + cr.multi_polygon_source_item = str(ContextRecord._meta.verbose_name) cr.save() cr = ContextRecord.objects.get(pk=base_find.context_record.pk) base_find = models.BaseFind.objects.get(pk=base_find.pk) @@ -1833,7 +1839,7 @@ class GeomaticTest(FindInit, TestCase): self.assertEqual(base_find.multi_polygon, cr.multi_polygon) self.assertEqual(base_find.multi_polygon_source, 'P') # precise self.assertEqual(base_find.multi_polygon_source_item, - unicode(ContextRecord._meta.verbose_name)) + str(ContextRecord._meta.verbose_name)) base_find = models.BaseFind.objects.get(pk=base_find.pk) base_find.point_source = None @@ -1849,3 +1855,59 @@ class GeomaticTest(FindInit, TestCase): base_find = models.BaseFind.objects.get(pk=base_find.pk) self.assertEqual(base_find.point_2d.ewkt, "SRID=4326;POINT (42 3)") self.assertEqual(base_find.point_source, 'P') + + +class AutocompleteTest(AutocompleteTestBase, TestCase): + fixtures = FIND_FIXTURES + models = [ + AcItem(models.ObjectType, 'autocomplete-objecttype'), + AcItem(models.MaterialType, 'autocomplete-materialtype'), + AcItem(models.TreatmentType, 'autocomplete-treatmenttype', + default_values={"virtual": False}), + AcItem(models.IntegrityType, 'autocomplete-integritytype'), + AcItem(models.TreatmentFile, 'autocomplete-treatmentfile', + prepare_func="create_treatmentfile"), + AcItem(models.FindBasket, 'autocomplete-findbasket', + prepare_func="create_findbasket"), + AcItem(models.Find, 'autocomplete-find', prepare_func="create_find"), + AcItem(models.Treatment, 'autocomplete-treatment', + prepare_func='create_treatment'), + ] + + def create_treatmentfile(self, base_name): + item, __ = models.TreatmentFile.objects.get_or_create( + name=base_name, + type=models.TreatmentFileType.objects.all()[0] + ) + return item, None + + def create_treatment(self, base_name): + item, __ = models.Treatment.objects.get_or_create( + label=base_name, + treatment_state=models.TreatmentState.objects.all()[0] + ) + return item, None + + def create_findbasket(self, base_name): + item, __ = models.FindBasket.objects.get_or_create( + label=base_name, + ) + item.user = self.user.ishtaruser + item.save() + return item, None + + def create_find(self, base_name): + ope, __ = Operation.objects.get_or_create( + common_name="Test", + operation_type=OperationType.objects.all()[0] + ) + cr, __ = ContextRecord.objects.get_or_create( + operation=ope, + label=base_name + ) + base_find = models.BaseFind.objects.create(context_record=cr) + find = models.Find.objects.create( + label=base_name, + ) + find.base_finds.add(base_find) + return find, None diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index e1f29b293..7867116fb 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -52,7 +52,8 @@ from archaeological_context_records.models import Unit, ContextRecord from ishtar_common import forms_common from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \ - create_superuser, create_user, TestCase, OPERATION_FIXTURES + create_superuser, create_user, TestCase, OPERATION_FIXTURES, \ + AutocompleteTestBase, AcItem OPERATION_TOWNS_FIXTURES = \ @@ -2836,3 +2837,30 @@ class DocumentWizardDeleteTest(WizardTest, OperationInitTest, TestCase): # operation not deleted with the document self.assertEqual(models.Operation.objects.filter( pk=self.ope_id).count(), 1) + + +class AutocompleteTest(AutocompleteTestBase, TestCase): + fixtures = OPERATION_FIXTURES + models = [ + AcItem(models.Operation, 'autocomplete-operation', + prepare_func="create_operation"), + AcItem(models.ArchaeologicalSite, 'autocomplete-archaeologicalsite', + "reference"), + AcItem(models.Operation, 'autocomplete-patriarche', + prepare_func="create_operation_patriarche", + id_key="code_patriarche", one_word_search=True), + ] + + def create_operation(self, base_name): + item, __ = models.Operation.objects.get_or_create( + common_name=base_name, + operation_type=models.OperationType.objects.all()[0] + ) + return item, None + + def create_operation_patriarche(self, base_name): + item, __ = models.Operation.objects.get_or_create( + code_patriarche=base_name, + operation_type=models.OperationType.objects.all()[0] + ) + return item, None diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 9f97fd33b..07fa08750 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -630,22 +630,18 @@ 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"), - ] - +class AcItem: + def __init__(self, model, url, lbl_key=None, prepare_func=None, + id_key="pk", one_word_search=False, default_values=None): + self.model, self.url, self.lbl_key = model, url, lbl_key + self.prepare_func, self.id_key = prepare_func, id_key + self.one_word_search = one_word_search + self.default_values = default_values + if not lbl_key and not prepare_func: + self.lbl_key = "label" + + +class AutocompleteTestBase: def setUp(self): self.password = 'mypassword' self.username = "myuser" @@ -653,31 +649,14 @@ class AutocompleteTest(TestCase): self.username, 'myemail@test.com', self.password) user.set_password(self.password) user.save() + self.user = user 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: + for mdl in self.models: + model, url, lbl_key = mdl.model, mdl.url, mdl.lbl_key + prepare_func = mdl.prepare_func url = reverse(url) base_name = "tralala lere" search_term = "trala" @@ -686,8 +665,10 @@ class AutocompleteTest(TestCase): if extra_search: search_term += " " + extra_search else: - item, __ = model.objects.get_or_create( - **{lbl_key: base_name}) + create_dict = {lbl_key: base_name} + if mdl.default_values: + create_dict.update(mdl.default_values) + item, __ = model.objects.get_or_create(**create_dict) response = self.client.get(url, {"term": search_term}) self.assertEqual( response.status_code, 200, @@ -698,10 +679,12 @@ class AutocompleteTest(TestCase): msg="{} result for '{}' expected 1 - {}".format( len(data), search_term, url)) self.assertEqual( - data[0]['id'], item.pk, + data[0]['id'], getattr(item, mdl.id_key), msg="id: {} expected {} for '{}' - {}".format( data[0]['id'], item.pk, search_term, url)) + if mdl.one_word_search: + continue search_term = "ler " + search_term response = self.client.get(url, {"term": search_term}) self.assertEqual( @@ -713,11 +696,49 @@ class AutocompleteTest(TestCase): msg="{} result for '{}' expected 1 - {}".format( len(data), search_term, url)) self.assertEqual( - data[0]['id'], item.pk, + data[0]['id'], getattr(item, mdl.id_key), msg="id: {} expected {} for '{}' - {}".format( data[0]['id'], item.pk, search_term, url)) +class AutocompleteTest(AutocompleteTestBase, TestCase): + fixtures = OPERATION_FIXTURES + models = [ + AcItem(models.User, 'autocomplete-user', "username"), + AcItem(models.User, 'autocomplete-ishtaruser', "username"), + AcItem(models.Person, 'autocomplete-person', "name"), + AcItem(models.Person, 'autocomplete-person-permissive', "name"), + AcItem(models.Town, 'autocomplete-town', "name"), + AcItem(models.Town, 'autocomplete-advanced-town', + prepare_func="create_advanced_town"), + AcItem(models.Department, "autocomplete-department", "label"), + AcItem(models.Author, "autocomplete-author", + prepare_func="create_author"), + AcItem(models.Organization, 'autocomplete-organization', + prepare_func="create_orga"), + ] + + 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 + + class AdminGenTypeTest(TestCase): fixtures = OPERATION_FIXTURES gen_models = [ |