summaryrefslogtreecommitdiff
path: root/archaeological_context_records/tests.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-09-16 16:39:40 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-09-16 17:01:20 +0200
commit0f88ac0c7abd4ecb5e9bed54474af23752efcbcd (patch)
treea8c76e5fbbdc41cc2edd0bbe3777bf6973d0c39e /archaeological_context_records/tests.py
parenta6d3eddc857c0bf69cdc5592f7f158ce2e67553f (diff)
downloadIshtar-0f88ac0c7abd4ecb5e9bed54474af23752efcbcd.tar.bz2
Ishtar-0f88ac0c7abd4ecb5e9bed54474af23752efcbcd.zip
✅ test for context record relation form
Diffstat (limited to 'archaeological_context_records/tests.py')
-rw-r--r--archaeological_context_records/tests.py116
1 files changed, 116 insertions, 0 deletions
diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py
index 0d756be1c..ae27e56d1 100644
--- a/archaeological_context_records/tests.py
+++ b/archaeological_context_records/tests.py
@@ -1386,6 +1386,122 @@ class ContextRecordWizardCreationTest(WizardTest, ContextRecordInit, TestCase):
self.assertEqual(cr.datings.count(), 1)
+class ContextRecordRelationTest(ContextRecordInit, TestCase):
+ fixtures = CONTEXT_RECORD_TOWNS_FIXTURES
+
+ def setUp(self):
+ # nosec: hard coded password for test purposes
+ self.username, self.password, user = create_user( # nosec
+ username="Gandalf", password="ushallpass"
+ )
+ user.user_permissions.add(
+ Permission.objects.get(codename="view_own_contextrecord")
+ )
+ user.user_permissions.add(
+ Permission.objects.get(codename="change_own_contextrecord")
+ )
+ # by default associated to the first user
+ self.create_context_record({"label": "CR 1"})
+ self.create_context_record({"label": "CR 2"})
+ self.create_context_record({"label": "CR 3"})
+
+ self.username2, self.password2, user2 = create_user( # nosec
+ username="Saroumane", password="ushallnotpass"
+ )
+ user2.user_permissions.add(
+ Permission.objects.get(codename="view_own_contextrecord")
+ )
+ user2.user_permissions.add(
+ Permission.objects.get(codename="change_own_contextrecord")
+ )
+ self.cr1, self.cr2, self.cr3 = self.context_records
+ self.sym_rel_type, __ = models.RelationType.objects.get_or_create(
+ symmetrical=True, txt_idx="sym", logical_relation="equal"
+ )
+ self.rel_type_below, __ = models.RelationType.objects.get_or_create(
+ symmetrical=False, txt_idx="below", logical_relation="below"
+ )
+
+ def init_data(self):
+ nb_crs = 2
+ data = {}
+ for idx in range(nb_crs + views.RELATION_FORMSET_EXTRA_FORM):
+ data.update({
+ f"form-{idx}-pk": "",
+ f"form-{idx}-right_record": "",
+ f"form-{idx}-relation_type": "",
+ f"form-{idx}-DELETE": '',
+ })
+ return data
+
+ def test_relation_update_and_add(self):
+ c = Client()
+ rel1 = models.RecordRelations.objects.create(
+ left_record=self.cr1,
+ right_record=self.cr2,
+ relation_type=self.sym_rel_type
+ )
+ nb_record_relation = models.RecordRelations.objects.count()
+
+ c.login(username=self.username2, password=self.password2)
+ response = c.get(reverse("context-record-relation-modify", kwargs={"pk": self.context_records[0].pk}))
+ self.assertEqual(response.status_code, 403)
+
+ c.login(username=self.username, password=self.password)
+ url = reverse("context-record-relation-modify", kwargs={"pk": self.context_records[0].pk})
+ response = c.get(url)
+ self.assertEqual(response.status_code, 200)
+ self.assertContains(response, f'"{rel1.pk}"')
+ self.assertContains(response, f'"{self.cr1.pk}"')
+ self.assertContains(response, f'"{self.cr2.pk}"')
+ self.assertContains(response, f'>{str(self.sym_rel_type)}<')
+
+ data = self.init_data()
+
+ data.update({
+ "form-0-pk": rel1.pk,
+ "form-0-right_record": rel1.right_record.pk,
+ "form-0-relation_type": self.rel_type_below.pk,
+ "form-1-right_record": self.cr3.pk,
+ "form-1-relation_type": self.rel_type_below.pk,
+ })
+
+ post_response = c.post(url, data)
+ self.assertEqual(post_response.status_code, 302)
+
+ rel1 = models.RecordRelations.objects.get(pk=rel1.pk)
+ self.assertEqual(rel1.relation_type, self.rel_type_below)
+
+ self.assertEqual(models.RecordRelations.objects.count(), nb_record_relation + 1)
+ q_rel2 = models.RecordRelations.objects.filter(left_record=self.cr1, right_record=self.cr3.pk,
+ relation_type=self.rel_type_below)
+ self.assertEqual(q_rel2.count(), 1)
+
+ def test_relation_delete(self):
+ c = Client()
+ rel1 = models.RecordRelations.objects.create(
+ left_record=self.cr1,
+ right_record=self.cr2,
+ relation_type=self.sym_rel_type
+ )
+ nb_record_relation = models.RecordRelations.objects.filter(left_record=self.cr1).count()
+
+ c.login(username=self.username, password=self.password)
+ data = self.init_data()
+ data.update({
+ "form-0-pk": rel1.pk,
+ "form-0-right_record": rel1.right_record.pk,
+ "form-0-relation_type": self.rel_type_below.pk,
+ "form-0-DELETE": "on"
+ })
+ url = reverse("context-record-relation-modify", kwargs={"pk": self.context_records[0].pk})
+ post_response = c.post(url, data)
+ self.assertEqual(post_response.status_code, 302)
+ q_rel = models.RecordRelations.objects.filter(pk=rel1.pk)
+ self.assertEqual(q_rel.count(), 0)
+ self.assertEqual(models.RecordRelations.objects.filter(left_record=self.cr1).count(), nb_record_relation - 1)
+
+
class AutocompleteTest(AutocompleteTestBase, TestCase):
fixtures = CONTEXT_RECORD_FIXTURES
models = [