diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-01-30 13:56:52 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-01-30 13:56:52 +0100 |
commit | 42d91015eb14e607cfb6cd414175682553f429b8 (patch) | |
tree | 429269e02dbfe6cb9580f935eabb777024217004 /archaeological_finds/tests.py | |
parent | dbefccd512ffed5e7d7d365f20f76720651cd578 (diff) | |
download | Ishtar-42d91015eb14e607cfb6cd414175682553f429b8.tar.bz2 Ishtar-42d91015eb14e607cfb6cd414175682553f429b8.zip |
Fix material_types search for finds - add tests for hierarchical searches
Diffstat (limited to 'archaeological_finds/tests.py')
-rw-r--r-- | archaeological_finds/tests.py | 138 |
1 files changed, 136 insertions, 2 deletions
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 2d1367c58..34f95cf7d 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -17,7 +17,7 @@ # See the file COPYING for details. -import datetime +import json from django.conf import settings from django.contrib.auth.models import User @@ -29,7 +29,7 @@ from ishtar_common.models import ImporterType, IshtarUser, ImporterColumn,\ FormaterType, ImportTarget from ishtar_common.models import Person -from archaeological_context_records.models import Period +from archaeological_context_records.models import Period, Dating from archaeological_finds import models, views from archaeological_warehouse.models import Warehouse, WarehouseType @@ -325,6 +325,140 @@ class FindTest(FindInit, TestCase): response.content) +class FindSearchTest(FindInit, TestCase): + fixtures = [settings.ROOT_PATH + + '../fixtures/initial_data.json', + settings.ROOT_PATH + + '../ishtar_common/fixtures/initial_data.json', + settings.ROOT_PATH + + '../archaeological_files/fixtures/initial_data.json', + settings.ROOT_PATH + + '../archaeological_operations/fixtures/initial_data-fr.json', + settings.ROOT_PATH + + '../archaeological_finds/fixtures/initial_data-fr.json', + ] + model = models.Find + + def setUp(self): + 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 testMaterialTypeHierarchicSearch(self): + find = self.finds[0] + c = Client() + metal = models.MaterialType.objects.get(txt_idx='metal') + iron_metal = models.MaterialType.objects.get(txt_idx='iron_metal') + not_iron_metal = models.MaterialType.objects.get( + txt_idx='not_iron_metal') + find.material_types.add(iron_metal) + + search = {'material_types': iron_metal.pk} + + # no result when no authentication + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertTrue(not json.loads(response.content)) + c.login(username=self.username, password=self.password) + + # one result for exact search + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertTrue(json.loads(response.content)['total'] == 1) + + # no result for the brother + search = {'material_types': not_iron_metal.pk} + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertTrue(json.loads(response.content)['total'] == 0) + + # one result for the father + search = {'material_types': metal.pk} + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertTrue(json.loads(response.content)['total'] == 1) + + def testPeriodHierarchicSearch(self): + find = self.finds[0] + c = Client() + + neo = Period.objects.get(txt_idx='neolithic') + final_neo = Period.objects.get(txt_idx='final_neolithic') + recent_neo = Period.objects.get(txt_idx='recent_neolithic') + dating = Dating.objects.create( + period=final_neo + ) + find.datings.add(dating) + + search = {'datings__period': final_neo.pk} + + # no result when no authentication + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertTrue(not json.loads(response.content)) + + # one result for exact search + c.login(username=self.username, password=self.password) + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertEqual(json.loads(response.content)['total'], 1) + + # no result for the brother + search = {'datings__period': recent_neo.pk} + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertEqual(json.loads(response.content)['total'], 0) + + # one result for the father + search = {'datings__period': neo.pk} + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertEqual(json.loads(response.content)['total'], 1) + + def testConservatoryStateHierarchicSearch(self): + find = self.finds[0] + c = Client() + cs1 = models.ConservatoryState.objects.all()[0] + cs1.parent = None + cs1.save() + cs2 = models.ConservatoryState.objects.all()[1] + cs2.parent = cs1 + cs2.save() + cs3 = models.ConservatoryState.objects.all()[2] + cs3.parent = cs1 + cs3.save() + find.conservatory_state = cs2 + find.save() + + search = {'conservatory_state': cs2.pk} + + # no result when no authentication + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertTrue(not json.loads(response.content)) + c.login(username=self.username, password=self.password) + + # one result for exact search + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertTrue(json.loads(response.content)['total'] == 1) + + # no result for the brother + search = {'conservatory_state': cs3.pk} + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertTrue(json.loads(response.content)['total'] == 0) + + # one result for the father + search = {'conservatory_state': cs1.pk} + response = c.get(reverse('get-find'), search) + self.assertEqual(response.status_code, 200) + self.assertTrue(json.loads(response.content)['total'] == 1) + + class PackagingTest(FindInit, TestCase): fixtures = [settings.ROOT_PATH + '../fixtures/initial_data.json', |