-
Carlos Vega authoredCarlos Vega authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
test_study_subject.py 7.20 KiB
from django.test import TestCase
from web.models import Appointment
from web.models import Visit
from web.models import StudySubject, Study
from web.tests.functions import get_test_study, create_study_subject, create_appointment, create_study_subject_with_multiple_screening_numbers
from web.tests.functions import create_visit
class SubjectModelTests(TestCase):
def test_signal_mark_as_endpoint_reached(self):
subject = create_study_subject()
visit = create_visit(subject)
appointment = create_appointment(visit)
subject.endpoint_reached = True
subject.save()
appointment_status = Appointment.objects.filter(id=appointment.id)[
0].status
visit_finished = Visit.objects.filter(id=visit.id)[0].is_finished
self.assertTrue(subject.endpoint_reached)
self.assertTrue(visit_finished)
self.assertEquals(
Appointment.APPOINTMENT_STATUS_CANCELLED, appointment_status)
def test_mark_as_endpoint_reached(self):
subject = create_study_subject()
visit = create_visit(subject)
appointment = create_appointment(visit)
subject.mark_as_endpoint_reached()
appointment_status = Appointment.objects.filter(id=appointment.id)[
0].status
visit_finished = Visit.objects.filter(id=visit.id)[0].is_finished
self.assertTrue(subject.endpoint_reached)
self.assertTrue(visit_finished)
self.assertEquals(
Appointment.APPOINTMENT_STATUS_CANCELLED, appointment_status)
def test_signal_mark_as_resigned(self):
subject = create_study_subject()
visit = create_visit(subject)
appointment = create_appointment(visit)
subject.resigned = True
subject.save()
appointment_status = Appointment.objects.filter(id=appointment.id)[
0].status
visit_finished = Visit.objects.filter(id=visit.id)[0].is_finished
self.assertTrue(subject.resigned)
self.assertTrue(visit_finished)
self.assertEquals(
Appointment.APPOINTMENT_STATUS_CANCELLED, appointment_status)
def test_mark_as_resigned(self):
subject = create_study_subject()
visit = create_visit(subject)
appointment = create_appointment(visit)
subject.mark_as_resigned()
appointment_status = Appointment.objects.filter(id=appointment.id)[
0].status
visit_finished = Visit.objects.filter(id=visit.id)[0].is_finished
self.assertTrue(subject.resigned)
self.assertTrue(visit_finished)
self.assertEquals(
Appointment.APPOINTMENT_STATUS_CANCELLED, appointment_status)
def test_signal_mark_as_excluded(self):
subject = create_study_subject()
visit = create_visit(subject)
appointment = create_appointment(visit)
subject.excluded = True
subject.save()
appointment_status = Appointment.objects.filter(id=appointment.id)[
0].status
visit_finished = Visit.objects.filter(id=visit.id)[0].is_finished
self.assertTrue(subject.excluded)
self.assertTrue(visit_finished)
self.assertEquals(
Appointment.APPOINTMENT_STATUS_CANCELLED, appointment_status)
def test_mark_as_excluded(self):
subject = create_study_subject()
visit = create_visit(subject)
appointment = create_appointment(visit)
subject.mark_as_excluded()
appointment_status = Appointment.objects.filter(id=appointment.id)[
0].status
visit_finished = Visit.objects.filter(id=visit.id)[0].is_finished
self.assertTrue(subject.excluded)
self.assertTrue(visit_finished)
self.assertEquals(
Appointment.APPOINTMENT_STATUS_CANCELLED, appointment_status)
def test_check_nd_number_regex(self):
study = get_test_study()
# delete everything
StudySubject.objects.all().delete()
# get default regex
nd_number_study_subject_regex_default = Study._meta.get_field(
'nd_number_study_subject_regex').get_default()
self.assertTrue(StudySubject.check_nd_number_regex(nd_number_study_subject_regex_default, study))
# this will add a studysubject with a NDnumber
study_subject = create_study_subject(nd_number='ND0001')
self.assertTrue(StudySubject.check_nd_number_regex(nd_number_study_subject_regex_default, study))
# delete everything
StudySubject.objects.all().delete()
# this will add a studysubject with a NDnumber
create_study_subject(nd_number='ND00001')
self.assertFalse(StudySubject.check_nd_number_regex(nd_number_study_subject_regex_default, study))
def test_sort_matched_screening_first(self):
def create_result(phrase, subject_id=1):
phrase = phrase.format(subject_id=subject_id)
phrase = phrase.split(';')
for i, r in enumerate(phrase):
letter, num = phrase[i].strip().split('-')
phrase[i] = (letter, int(num))
return phrase
subject = create_study_subject_with_multiple_screening_numbers(
subject_id=1)
self.assertEqual(subject.sort_matched_screening_first('L'), create_result(
'L-00{subject_id}; E-00{subject_id}', subject_id=1))
self.assertEqual(subject.sort_matched_screening_first(
'L-00'), create_result('L-00{subject_id}; E-00{subject_id}', subject_id=1))
self.assertEqual(subject.sort_matched_screening_first('E'), create_result(
'E-00{subject_id}; L-00{subject_id}', subject_id=1))
self.assertEqual(subject.sort_matched_screening_first(
'-'), create_result('E-00{subject_id}; L-00{subject_id}', subject_id=1))
self.assertEqual(subject.sort_matched_screening_first(''), create_result(
'E-00{subject_id}; L-00{subject_id}', subject_id=1))
self.assertEqual(subject.sort_matched_screening_first('001'), create_result(
'E-00{subject_id}; L-00{subject_id}', subject_id=1))
self.assertEqual(subject.sort_matched_screening_first('00'), create_result(
'E-00{subject_id}; L-00{subject_id}', subject_id=1))
self.assertEqual(subject.sort_matched_screening_first('potato'), create_result(
'E-00{subject_id}; L-00{subject_id}', subject_id=1))
def test_sort_matched_screening_first_bad_number(self):
subject_id = 2
screening_number = 'L-0/0{}; E-00{}; F-0/1{}'.format(subject_id, subject_id, subject_id)
subject = create_study_subject_with_multiple_screening_numbers(
subject_id=subject_id, screening_number=screening_number)
self.assertEqual(subject.sort_matched_screening_first('E-'), [('E', subject_id), ('F', '0/12'), ('L', '0/02')])
self.assertEqual(subject.sort_matched_screening_first('L-'), [('L', '0/02'), ('E', subject_id), ('F', '0/12')])
def test_sort_matched_screening_first_bad_format(self):
screening_number = 'potato; tomato'
subject_id = 3
subject = create_study_subject_with_multiple_screening_numbers(
subject_id=subject_id, screening_number=screening_number)
self.assertEqual(subject.sort_matched_screening_first('L-'), [('potato', None), ('tomato', None)])