import logging from web.forms import StudySubjectAddForm, get_new_screening_number from web.models.constants import SUBJECT_TYPE_CHOICES_CONTROL from web.tests import LoggedInWithWorkerTestCase from web.tests.functions import create_study_subject, create_subject, get_test_study logger = logging.getLogger(__name__) class StudySubjectAddFormTests(LoggedInWithWorkerTestCase): def setUp(self): super(StudySubjectAddFormTests, self).setUp() location = self.worker.locations.all()[0] self.subject = create_subject() self.study = get_test_study() self.sample_data = { 'type': SUBJECT_TYPE_CHOICES_CONTROL, 'default_location': location.id, 'screening_number': "123", 'subject': self.subject.id } def test_validation(self): form = StudySubjectAddForm(data=self.sample_data, user=self.user) form.is_valid() self.assertTrue(form.is_valid()) def test_invalid(self): form_data = self.sample_data form_data['screening_number'] = "123" form = StudySubjectAddForm(data=form_data, user=self.user) form.is_valid() form.instance.subject_id = self.subject.id form.instance.study_id = self.study.id self.assertTrue(form.is_valid()) self.assertIsNone(form.fields['year_of_diagnosis'].initial) form.save() form2 = StudySubjectAddForm(data=form_data, user=self.user) validation_status = form2.is_valid() self.assertFalse(validation_status) self.assertTrue("screening_number" in form2.errors) def test_invalid_2(self): form_data = self.sample_data form_data['nd_number'] = "ND0123" form = StudySubjectAddForm(data=form_data, user=self.user) form.is_valid() self.assertTrue(form.is_valid()) form.instance.subject_id = self.subject.id form.instance.study_id = self.study.id form.save() form_data['screening_number'] = "2" form2 = StudySubjectAddForm(data=form_data, user=self.user) validation_status = form2.is_valid() 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 = StudySubjectAddForm(data=form_data, user=self.user) form.is_valid() self.assertTrue(form.is_valid()) form.instance.subject_id = self.subject.id form.instance.study_id = self.study.id form.save() form_data['screening_number'] = "2" form2 = StudySubjectAddForm(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_study_subject() subject.screening_number = prefix + "300" subject.save() new_screening_number = get_new_screening_number(prefix) self.assertEqual(prefix + "301", new_screening_number) def test_get_new_screening_number_2(self): prefix = "X-" subject = create_study_subject() subject.screening_number = "L-1111; " + prefix + "300" subject.save() new_screening_number = get_new_screening_number(prefix) self.assertEqual(prefix + "301", new_screening_number) def test_get_new_screening_number_3(self): prefix = "X-" subject = create_study_subject() subject.screening_number = "P-1112; " + prefix + "300" + "; L-1111" subject.save() new_screening_number = get_new_screening_number(prefix) self.assertEqual(prefix + "301", new_screening_number) def test_get_new_screening_number_4(self): prefix = "X-" subject = create_study_subject() subject.screening_number = "P-1112; " subject.save() new_screening_number = get_new_screening_number(prefix) self.assertEqual(prefix + "001", new_screening_number) def test_get_new_screening_number_5(self): prefix = "X-" subject = create_study_subject() subject.screening_number = prefix + "100" subject.save() subject = create_study_subject() subject.screening_number = prefix + "200" subject.save() subject = create_study_subject() subject.screening_number = "Y-300" subject.save() subject = create_study_subject() subject.screening_number = prefix + "20" subject.save() new_screening_number = get_new_screening_number(prefix) self.assertEqual(prefix + "201", new_screening_number) def test_get_new_screening_number_6(self): prefix = "X-" subject = create_study_subject() subject.screening_number = "X-" subject.save() new_screening_number = get_new_screening_number(prefix) self.assertEqual(prefix + "001", new_screening_number)