diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-06-05 12:53:54 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-06-17 13:22:54 +0200 |
commit | 056d66ba290b4a226eb240f91ca165efe885c668 (patch) | |
tree | 2f6ed8b47622f0a32fa6a511654b71286dda5d05 | |
parent | 20976d464ab6214222b48c0779848f69c0e9acbc (diff) | |
download | Ishtar-056d66ba290b4a226eb240f91ca165efe885c668.tar.bz2 Ishtar-056d66ba290b4a226eb240f91ca165efe885c668.zip |
QA: fix bad QA indexing - tests
-rw-r--r-- | archaeological_finds/models_finds.py | 2 | ||||
-rw-r--r-- | archaeological_finds/views.py | 16 | ||||
-rw-r--r-- | archaeological_operations/tests.py | 134 | ||||
-rw-r--r-- | ishtar_common/models.py | 6 | ||||
-rw-r--r-- | ishtar_common/tests.py | 45 | ||||
-rw-r--r-- | ishtar_common/views.py | 4 |
6 files changed, 191 insertions, 16 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 4f28b977c..becbea68e 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -681,7 +681,7 @@ class FindBasket(Basket, MainItem, ValueGetter): _(u"Add treatment file"), "fa fa-file-text-o", "", "", False), ] - duplicate = self.QUICK_ACTIONS[0] + duplicate = self.get_quick_action_by_url("find-qa-duplicate") actions += [ (reverse(duplicate.url, args=[self.pk]), duplicate.text, duplicate.icon_class, diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index ed0389cff..7b7bf20ad 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -922,9 +922,7 @@ class QAFindBasketFormView(QAItemForm): form_class = forms.QAFindBasketForm page_name = _(u"Basket") modal_size = "small" - - def get_quick_action(self): - return models.Find.QUICK_ACTIONS[1] + base_url = "find-qa-basket" def get_form_kwargs(self): kwargs = super(QAFindBasketFormView, self).get_form_kwargs() @@ -941,9 +939,7 @@ class QAFindDuplicateFormView(QAItemForm): model = models.Find page_name = _(u"Duplicate") form_class = forms.QAFindDuplicateForm - - def get_quick_action(self): - return models.Find.QUICK_ACTIONS[1] + base_url = "find-qa-duplicate" def get_form_kwargs(self): kwargs = super(QAFindDuplicateFormView, self).get_form_kwargs() @@ -970,9 +966,7 @@ class QAFindTreatmentFormView(QAItemForm): model = models.Find form_class = forms.QAFindTreatmentForm page_name = _(u"Packaging") - - def get_quick_action(self): - return models.Find.QUICK_ACTIONS[2] + base_url = "find-qa-packaging" def get_form_kwargs(self): kwargs = super(QAFindTreatmentFormView, self).get_form_kwargs() @@ -991,9 +985,7 @@ class QAFindbasketDuplicateFormView(QAItemForm): page_name = _(u"Duplicate") modal_size = "small" form_class = forms.QAFindbasketDuplicateForm - - def get_quick_action(self): - return models.FindBasket.QUICK_ACTIONS[0] + base_url = "findbasket-qa-duplicate" def get_form_kwargs(self): kwargs = super(QAFindbasketDuplicateFormView, self).get_form_kwargs() diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index 42ceea292..8e956c3ab 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -990,9 +990,11 @@ def create_orga(user): return orga -def create_operation(user, orga=None, values={}): +def create_operation(user, orga=None, values=None): operation_type = models.OperationType.objects.get( txt_idx="arch_diagnostic") + if not values: + values = {} dct = {'year': 2010, 'operation_type_id': operation_type.pk, 'history_modifier': user} dct.update(values) @@ -2992,3 +2994,133 @@ class AutocompleteTest(AutocompleteTestBase, TestCase): operation_type=models.OperationType.objects.all()[0] ) return item, None + + +class OperationQATest(OperationInitTest, TestCase): + fixtures = OPERATION_FIXTURES + model = models.Operation + + def setUp(self): + self.username, self.password, self.user = create_superuser() + self.orgas = self.create_orgas(self.user) + self.create_operation(self.user, self.orgas[0]) + self.create_operation(self.user, self.orgas[0]) + self.alt_username, self.alt_password, self.alt_user = create_user() + self.alt_user.user_permissions.add(Permission.objects.get( + codename='change_operation')) + + def test_bulk_update(self): + c = Client() + pks = u"{}-{}".format(self.operations[0].pk, self.operations[1].pk) + response = c.get(reverse('operation-qa-bulk-update', args=[pks])) + self.assertRedirects(response, '/') + + c = Client() + c.login(username=self.username, password=self.password) + response = c.get(reverse('operation-qa-bulk-update', args=[pks])) + self.assertEqual(response.status_code, 200) + + c = Client() + c.login(username=self.alt_username, password=self.alt_password) + response = c.get(reverse('operation-qa-bulk-update', args=[pks])) + self.assertEqual(response.status_code, 200) + + operation_0 = self.operations[0] + operation_1 = self.operations[1] + base_desc_0 = u"Base description 1" + operation_0.description = base_desc_0 + operation_0.save() + base_desc_1 = u"Base description 2" + operation_1.description = base_desc_1 + operation_1.save() + + operation_type = models.OperationType.objects.exclude( + txt_idx="arch_diagnostic").all()[0] + + self.assertNotEqual( + models.Operation.objects.get(pk=operation_0.pk).operation_type, + operation_type + ) + self.assertNotEqual( + models.Operation.objects.get(pk=operation_1.pk).operation_type, + operation_type + ) + + response = c.post( + reverse('operation-qa-bulk-update-confirm', args=[pks]), + {'qa_operation_type': operation_type.pk} + ) + if response.status_code != 200: + self.assertRedirects(response, '/success/') + self.assertEqual( + models.Operation.objects.get(pk=operation_0.pk).operation_type, + operation_type + ) + self.assertEqual( + models.Operation.objects.get(pk=operation_1.pk).operation_type, + operation_type + ) + + +class DocumentQATest(OperationInitTest, TestCase): + fixtures = OPERATION_FIXTURES + model = Document + + def setUp(self): + self.username, self.password, self.user = create_superuser() + self.alt_username, self.alt_password, self.alt_user = create_user() + self.alt_user.user_permissions.add(Permission.objects.get( + codename='change_document')) + self.source_1 = models.Document.objects.create( + title="Source title", + source_type=models.SourceType.objects.all()[0] + ) + self.source_2 = models.Document.objects.create( + title="Source title2", + source_type=models.SourceType.objects.all()[0] + ) + + def test_bulk_update(self): + c = Client() + pks = u"{}-{}".format(self.source_1.pk, self.source_2.pk) + response = c.get(reverse('document-qa-bulk-update', args=[pks])) + self.assertRedirects(response, '/') + + c = Client() + c.login(username=self.username, password=self.password) + response = c.get(reverse('document-qa-bulk-update', args=[pks])) + self.assertEqual(response.status_code, 200) + + c = Client() + c.login(username=self.alt_username, password=self.alt_password) + response = c.get(reverse('document-qa-bulk-update', args=[pks])) + self.assertEqual(response.status_code, 200) + + document_0 = self.source_1 + document_1 = self.source_2 + source_type = models.SourceType.objects.exclude( + txt_idx=self.source_1.source_type.txt_idx).all()[0] + + self.assertNotEqual( + models.Document.objects.get(pk=document_0.pk).source_type, + source_type + ) + self.assertNotEqual( + models.Document.objects.get(pk=document_1.pk).source_type, + source_type + ) + + response = c.post( + reverse('document-qa-bulk-update-confirm', args=[pks]), + {'qa_source_type': source_type.pk} + ) + if response.status_code != 200: + self.assertRedirects(response, '/success/') + self.assertEqual( + models.Document.objects.get(pk=document_0.pk).source_type, + source_type + ) + self.assertEqual( + models.Document.objects.get(pk=document_1.pk).source_type, + source_type + ) diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 1c841a984..d8cc862f6 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2403,6 +2403,12 @@ class MainItem(ShortMenuItem): action.target or ""]) return qas + @classmethod + def get_quick_action_by_url(cls, url): + for action in cls.QUICK_ACTIONS: + if action.url == url: + return action + class LightHistorizedItem(BaseHistorizedItem): history_date = models.DateTimeField(default=datetime.datetime.now) diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 0f00322fe..b056359ec 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -29,7 +29,7 @@ from io import StringIO from django.apps import apps from django.conf import settings -from django.contrib.auth.models import User +from django.contrib.auth.models import User, Permission from django.contrib.contenttypes.models import ContentType from django.core.cache import cache from django.core.exceptions import ValidationError @@ -1902,3 +1902,46 @@ class CleanMedia(TestCase): found = try_fix_file(name, make_copy=False) self.assertEqual(found, expected) + + +class PersonQATest(TestCase): + model = models.Person + + def setUp(self): + self.username, self.password, self.user = create_superuser() + self.user.user_permissions.add(Permission.objects.get( + codename='change_person')) + self.title_1 = models.TitleType.objects.create(label="T1", txt_idx="t1") + self.title_2 = models.TitleType.objects.create(label="T2", txt_idx="t2") + self.person_1 = models.Person.objects.create(title=self.title_1) + self.person_2 = models.Person.objects.create(title=self.title_1) + + def test_bulk_update(self): + c = Client() + pks = u"{}-{}".format(self.person_1.pk, self.person_2.pk) + response = c.get(reverse('person-qa-bulk-update', args=[pks])) + self.assertRedirects(response, '/') + + c = Client() + c.login(username=self.username, password=self.password) + response = c.get(reverse('person-qa-bulk-update', args=[pks])) + self.assertEqual(response.status_code, 200) + + self.assertNotEqual(self.person_1.title, self.title_2) + self.assertNotEqual(self.person_2.title, self.title_2) + + response = c.post( + reverse('person-qa-bulk-update-confirm', args=[pks]), + {'qa_title': self.title_2.pk} + ) + if response.status_code != 200: + self.assertRedirects(response, '/success/') + self.assertEqual( + models.Person.objects.get(pk=self.person_1.pk).title, + self.title_2 + ) + self.assertEqual( + models.Person.objects.get(pk=self.person_2.pk).title, + self.title_2 + ) + diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 98c538c66..bb68f6044 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -2059,13 +2059,15 @@ class AlertList(JSONResponseMixin, LoginRequiredMixin, class QAItemForm(IshtarMixin, LoginRequiredMixin, FormView): template_name = 'ishtar/forms/qa_form.html' model = None + base_url = None form_class = None page_name = u"" success_url = "/success/" modal_size = None # large, small or None (medium) def get_quick_action(self): - raise NotImplementedError() + # if not listed in QUICK_ACTIONS overload this method + return self.model.get_quick_action_by_url(self.base_url) def dispatch(self, request, *args, **kwargs): assert self.model |