From 6865dedf481dcac60d9d5b55263b5c2241052ce3 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 10 Feb 2017 13:31:49 +0100 Subject: [PATCH] modification of nd_number checks against duplicates properly --- smash/web/forms.py | 6 ++-- smash/web/tests/test_SubjectEditForm.py | 44 +++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 smash/web/tests/test_SubjectEditForm.py diff --git a/smash/web/forms.py b/smash/web/forms.py index 98836512..bfb50d12 100644 --- a/smash/web/forms.py +++ b/smash/web/forms.py @@ -14,8 +14,9 @@ def validate_subject_nd_number(self): subject = self.cleaned_data if subject['nd_number']!="": subjects_from_db = Subject.objects.filter(nd_number=subject['nd_number']) - if len(subjects_from_db)>0: - self.add_error('nd_number', "ND number already in use") + if (len(subjects_from_db)>0): + if (subjects_from_db[0].screening_number!= subject['screening_number']): + self.add_error('nd_number', "ND number already in use") class SubjectAddForm(ModelForm): @@ -64,6 +65,7 @@ class SubjectDetailForm(ModelForm): class SubjectEditForm(ModelForm): date_born = forms.DateField(label='Date of birth', + required = False, widget=forms.SelectDateWidget(years=YEAR_CHOICES) ) diff --git a/smash/web/tests/test_SubjectEditForm.py b/smash/web/tests/test_SubjectEditForm.py new file mode 100644 index 00000000..604c3a0c --- /dev/null +++ b/smash/web/tests/test_SubjectEditForm.py @@ -0,0 +1,44 @@ +from django.test import TestCase +from web.forms import SubjectAddForm +from web.forms import SubjectEditForm +from web.models import Subject + + +class SubjectEditFormTests(TestCase): + def setUp(self): + self.sample_data = {'first_name': 'name', + 'last_name': 'name', + 'status' : Subject.STATUS_CHOICES_NOT_CONTACTED, + 'sex' : Subject.SEX_CHOICES_MALE, + 'country' : 'Luxembourg', + 'screening_number' : '123', + 'nd_number' : 'nd_123' + } + + def tearDown(self): + Subject.objects.all().delete() + + def test_validation(self): + add_form = SubjectAddForm(data=self.sample_data) + subject = add_form.save() + self.sample_data['id'] = subject.id + + edit_form = SubjectEditForm(self.sample_data) + save_status = edit_form.is_valid() + self.assertTrue(save_status) + + def test_invalid_nd_number_edit(self): + add_form = SubjectAddForm(data=self.sample_data) + add_form.save() + + self.sample_data['nd_number'] = "nd_124" + self.sample_data['screening_number'] = "124" + add_form = SubjectAddForm(data=self.sample_data) + subject = add_form.save() + + self.sample_data['id'] = subject.id + self.sample_data['nd_number'] = "nd_123" + edit_form = SubjectEditForm(self.sample_data) + + save_status = edit_form.is_valid() + self.assertFalse(save_status) -- GitLab