summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit18a8ee8b490dee843fa6c72c710a74e9ae7afab2 (patch)
tree2f6ed8b47622f0a32fa6a511654b71286dda5d05
parent0e30743556cdf9b6f8268cb8e24b24abf76a2e2b (diff)
downloadIshtar-18a8ee8b490dee843fa6c72c710a74e9ae7afab2.tar.bz2
Ishtar-18a8ee8b490dee843fa6c72c710a74e9ae7afab2.zip
QA: fix bad QA indexing - tests
-rw-r--r--archaeological_finds/models_finds.py2
-rw-r--r--archaeological_finds/views.py16
-rw-r--r--archaeological_operations/tests.py134
-rw-r--r--ishtar_common/models.py6
-rw-r--r--ishtar_common/tests.py45
-rw-r--r--ishtar_common/views.py4
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