Skip to content
Snippets Groups Projects
test_StudySubjectAddForm.py 4.97 KiB
Newer Older
Piotr Gawron's avatar
Piotr Gawron committed
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
Piotr Gawron's avatar
Piotr Gawron committed

logger = logging.getLogger(__name__)
Jacek Lebioda's avatar
Jacek Lebioda committed

Piotr Gawron's avatar
Piotr Gawron committed
class StudySubjectAddFormTests(LoggedInWithWorkerTestCase):
Piotr Gawron's avatar
Piotr Gawron committed
    def setUp(self):
Piotr Gawron's avatar
Piotr Gawron committed
        super(StudySubjectAddFormTests, self).setUp()

        location = self.worker.locations.all()[0]
Piotr Gawron's avatar
Piotr Gawron committed
        self.subject = create_subject()
        self.sample_data = {
            'type': SUBJECT_TYPE_CHOICES_CONTROL,
            'default_location': location.id,
            'screening_number': "123",
            'subject': self.subject.id
        }
Piotr Gawron's avatar
Piotr Gawron committed
    def test_validation(self):
Piotr Gawron's avatar
Piotr Gawron committed
        form = StudySubjectAddForm(data=self.sample_data, user=self.user)
        form.is_valid()
        self.assertTrue(form.is_valid())

    def test_invalid(self):
Piotr Gawron's avatar
Piotr Gawron committed
        form_data = self.sample_data
        form_data['screening_number'] = "123"

Piotr Gawron's avatar
Piotr Gawron committed
        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)
Piotr Gawron's avatar
Piotr Gawron committed
        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):
Piotr Gawron's avatar
Piotr Gawron committed
        form_data = self.sample_data
        form_data['nd_number'] = "ND0123"
Piotr Gawron's avatar
Piotr Gawron committed
        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_data['screening_number'] = "2"
Piotr Gawron's avatar
Piotr Gawron committed
        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"

Piotr Gawron's avatar
Piotr Gawron committed
        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"
Piotr Gawron's avatar
Piotr Gawron committed
        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.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.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.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.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.screening_number = prefix + "100"
        subject.save()

        subject.screening_number = prefix + "200"
        subject.save()

        subject.screening_number = "Y-300"
        subject.save()

        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.screening_number = "X-"
        subject.save()

        new_screening_number = get_new_screening_number(prefix)
        self.assertEqual(prefix + "001", new_screening_number)