From f6af6dc9137e6ec50362dd973689a2d351bf32f7 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Wed, 18 Nov 2020 09:35:42 +0100 Subject: [PATCH] validation of visit_import_data form --- smash/web/forms/visit_import_data_form.py | 11 +++++ .../forms/test_visit_import_data_forms.py | 43 +++++++++++++++++++ .../web/tests/view/test_visit_import_data.py | 41 ++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 smash/web/tests/forms/test_visit_import_data_forms.py create mode 100644 smash/web/tests/view/test_visit_import_data.py diff --git a/smash/web/forms/visit_import_data_form.py b/smash/web/forms/visit_import_data_form.py index 8da98260..fd149463 100644 --- a/smash/web/forms/visit_import_data_form.py +++ b/smash/web/forms/visit_import_data_form.py @@ -1,3 +1,5 @@ +import re + from django.forms import ModelForm from web.models import VisitImportData @@ -10,3 +12,12 @@ class VisitImportDataEditForm(ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + + def clean_run_at_times(self): + run_at_times = self.cleaned_data['run_at_times'] + pattern = re.compile("^[0-9]{2}:[0-9]{2}$") + for entry in run_at_times.split(";"): + if entry != '' and not pattern.match(entry): + self.add_error('run_at_times', "Hours must be semicolon separated HH:MM values") + else: + return run_at_times diff --git a/smash/web/tests/forms/test_visit_import_data_forms.py b/smash/web/tests/forms/test_visit_import_data_forms.py new file mode 100644 index 00000000..bae4ac5a --- /dev/null +++ b/smash/web/tests/forms/test_visit_import_data_forms.py @@ -0,0 +1,43 @@ +import logging + +from web.forms.visit_import_data_form import VisitImportDataEditForm +from web.models import VisitImportData +from web.tests import LoggedInWithWorkerTestCase +from web.tests.functions import format_form_field, create_worker, get_test_study + +logger = logging.getLogger(__name__) + + +class VisitImportDataEditFormTests(LoggedInWithWorkerTestCase): + def setUp(self): + super(VisitImportDataEditFormTests, self).setUp() + self.visit_import_data = VisitImportData.objects.create(study=get_test_study(), + import_worker=create_worker()) + + def test_invalid_run_at_times(self): + self.login_as_admin() + + form_data = self.get_form_data(self.visit_import_data) + form_data["run_at_times"] = "bla" + + voucher_form = VisitImportDataEditForm(instance=self.visit_import_data, data=form_data) + + self.assertFalse(voucher_form.is_valid()) + self.assertTrue("run_at_times" in voucher_form.errors) + + def test_valid_form(self): + self.login_as_admin() + + form_data = self.get_form_data(self.visit_import_data) + + voucher_form = VisitImportDataEditForm(instance=self.visit_import_data, data=form_data) + + self.assertTrue(voucher_form.is_valid()) + + @staticmethod + def get_form_data(visit_import_data: VisitImportData) -> dict: + voucher_form = VisitImportDataEditForm(instance=visit_import_data) + form_data = {} + for key, value in list(voucher_form.initial.items()): + form_data[key] = format_form_field(value) + return form_data diff --git a/smash/web/tests/view/test_visit_import_data.py b/smash/web/tests/view/test_visit_import_data.py new file mode 100644 index 00000000..e15dbe9e --- /dev/null +++ b/smash/web/tests/view/test_visit_import_data.py @@ -0,0 +1,41 @@ +import logging + +from django.urls import reverse + +from web.forms.visit_import_data_form import VisitImportDataEditForm +from web.models import VisitImportData +from web.tests import LoggedInWithWorkerTestCase +from web.tests.functions import get_test_study, format_form_field + +logger = logging.getLogger(__name__) + + +class VisitImportDataViewViewTests(LoggedInWithWorkerTestCase): + def setUp(self): + super().setUp() + self.study = get_test_study() + self.visit_import_data = VisitImportData.objects.create(study=get_test_study()) + + def test_render_edit(self): + self.login_as_admin() + response = self.client.get(reverse('web.views.import_visit_edit', + kwargs={'study_id': self.study.id, 'import_id': self.visit_import_data.id})) + self.assertEqual(response.status_code, 200) + + def test_save_edit(self): + form_data = self.get_form_data(self.visit_import_data) + + response = self.client.post( + reverse('web.views.import_visit_edit', + kwargs={'study_id': self.study.id, 'import_id': self.visit_import_data.id}), data=form_data) + + self.assertEqual(response.status_code, 302) + self.assertFalse("study" in response['Location']) + + @staticmethod + def get_form_data(visit_import_data: VisitImportData) -> dict: + voucher_form = VisitImportDataEditForm(instance=visit_import_data) + form_data = {} + for key, value in list(voucher_form.initial.items()): + form_data[key] = format_form_field(value) + return form_data -- GitLab