From 0fa4bca42c55604c270596df7f872356794edf43 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Thu, 15 Jun 2017 14:30:01 +0200 Subject: [PATCH] adding and modifing mpower number checks for uniqe values --- smash/web/forms.py | 10 ++++++++++ smash/web/tests/test_SubjectAddForm.py | 15 +++++++++++++++ smash/web/tests/test_SubjectEditForm.py | 20 ++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/smash/web/forms.py b/smash/web/forms.py index ae861b87..7ff1bc1a 100644 --- a/smash/web/forms.py +++ b/smash/web/forms.py @@ -36,6 +36,14 @@ def validate_subject_nd_number(self, cleaned_data): self.add_error('nd_number', "ND number already in use") +def validate_subject_mpower_number(self, cleaned_data): + if cleaned_data['mpower_id'] != "": + subjects_from_db = Subject.objects.filter(mpower_id=cleaned_data['mpower_id']) + if subjects_from_db: + if subjects_from_db[0].screening_number != cleaned_data.get('screening_number', ''): + self.add_error('mpower_id', "mPower number already in use") + + class SubjectAddForm(ModelForm): date_born = forms.DateField(label="Date of birth", widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"), @@ -81,6 +89,7 @@ class SubjectAddForm(ModelForm): if len(subjects_from_db) > 0: self.add_error('screening_number', "Screening number already in use") validate_subject_nd_number(self, cleaned_data) + validate_subject_mpower_number(self, cleaned_data) return cleaned_data def get_prefix_screening_number(self): @@ -149,6 +158,7 @@ class SubjectEditForm(ModelForm): def clean(self): validate_subject_nd_number(self, self.cleaned_data) + validate_subject_mpower_number(self, self.cleaned_data) class Meta: model = Subject diff --git a/smash/web/tests/test_SubjectAddForm.py b/smash/web/tests/test_SubjectAddForm.py index bfdab7a8..77e9c6d6 100644 --- a/smash/web/tests/test_SubjectAddForm.py +++ b/smash/web/tests/test_SubjectAddForm.py @@ -62,6 +62,21 @@ class SubjectAddFormTests(TestCase): self.assertFalse(validation_status) self.assertTrue("nd_number" in form2.errors) + def test_invalid_mpower_id(self): + form_data = self.sample_data + form_data['mpower_id'] = "123" + + form = SubjectAddForm(data=form_data, user=self.user) + form.is_valid() + self.assertTrue(form.is_valid()) + form.save() + + form_data['screening_number'] = "2" + form2 = SubjectAddForm(data=form_data, user=self.user) + validation_status = form2.is_valid() + self.assertFalse(validation_status) + self.assertTrue("mpower_id" in form2.errors) + def test_get_new_screening_number(self): prefix = "X-" subject = create_subject() diff --git a/smash/web/tests/test_SubjectEditForm.py b/smash/web/tests/test_SubjectEditForm.py index f28c88e2..bf9fb731 100644 --- a/smash/web/tests/test_SubjectEditForm.py +++ b/smash/web/tests/test_SubjectEditForm.py @@ -57,3 +57,23 @@ class SubjectEditFormTests(TestCase): save_status = edit_form.is_valid() self.assertFalse(save_status) + + def test_invalid_mpower_id_edit(self): + self.sample_data['screening_number'] = "001" + add_form = SubjectAddForm(data=self.sample_data, user=self.user) + subject = add_form.save() + + self.sample_data['mpower_id'] = "mpower_002" + self.sample_data['nd_number'] = "nd_002" + self.sample_data['screening_number'] = "002" + add_form = SubjectAddForm(data=self.sample_data, user=self.user) + add_form.save() + + self.sample_data['id'] = subject.id + self.sample_data['mpower_id'] = "mpower_002" + self.sample_data['nd_number'] = "nd_001" + self.sample_data['screening_number'] = "001" + edit_form = SubjectEditForm(self.sample_data) + + save_status = edit_form.is_valid() + self.assertFalse(save_status) -- GitLab