def test_eligible_members3(self): """Assert eligible_members set from True but stays True if an eligible member is added then removed but others exist.""" SurveyFactory() plot = PlotFactory(community=self.mapper().map_area, household_count=3, status='residential_habitable') for household in Household.objects.filter(plot=plot): household_log = HouseholdLog.objects.get( household_structure__household=household) household_log_entry = HouseholdLogEntryFactory( household_log=household_log) household_structure = household_log.household_structure RepresentativeEligibilityFactory( household_structure=household_structure) HouseholdMemberFactory(household_structure=household_structure, age_in_years=10) HouseholdMemberFactory(household_structure=household_structure, age_in_years=74) HouseholdMemberFactory(household_structure=household_structure, age_in_years=50) household_member = HouseholdMemberFactory( household_structure=household_structure, age_in_years=25) household_structure = HouseholdStructure.objects.get( pk=household_structure.pk) household_member.age_in_years = 10 household_member.save() self.assertTrue(household_structure.eligible_members)
def test_eligible_bhs(self): """Assert for eligible for BHS, household enrolled.""" #self.startup() self.enroll_household() household_member = HouseholdMemberFactory(first_name='ERIK', initials='EXW', age_in_years=64, study_resident='Yes', household_structure=self.household_structure) household_member.member_status = BHS_SCREEN household_member.save() pk = household_member.pk household_member = HouseholdMember.objects.get(pk=pk) EnrollmentChecklistFactory( household_member=household_member, gender='M', dob=date.today() - relativedelta(years=64), guardian='No', initials=household_member.initials, part_time_resident='Yes') pk = household_member.pk household_member = HouseholdMember.objects.get(pk=pk) options = [BHS, BHS_ELIGIBLE, DECEASED, REFUSED] options.append(household_member.member_status) options = list(set(options)) options.sort() member_status_choices = [(item, item) for item in options] x = household_member.member_status_choices # print x # print member_status_choices self.assertEqual(x, member_status_choices)
def test_refused_bhs_and_consent_later(self): """Assert for refused BHS, household not enrolled and BHS_SCREEN still available as option.""" #self.startup() household_member = HouseholdMemberFactory(first_name='ERIK', initials='EXW', age_in_years=64, study_resident='Yes', household_structure=self.household_structure) household_member.member_status = REFUSED household_member.save(update_fields=['member_status']) self.assertEqual(household_member.member_status, REFUSED) subject_refusal = SubjectRefusalFactory(household_member=household_member) self.assertEqual(subject_refusal.household_member.member_status, REFUSED) self.assertTrue(subject_refusal.household_member.refused) options = [BHS_SCREEN, DECEASED] options.append(household_member.member_status) options = list(set(options)) options.sort() # print options member_status_choices = [(item, item) for item in options] x = household_member.member_status_choices # print x self.assertEqual(x, member_status_choices)
def test_eligible_bhs_and_htc_and_refused_bhs(self): """Assert for eligible for BHS, household is enrolled, and eligible for HTC since has refused BHS.""" #self.startup() household_member = self.enroll_household() household_member = HouseholdMemberFactory(first_name='ERIK', initials='EXW', age_in_years=64, study_resident='Yes', household_structure=household_member.household_structure) household_member.member_status = REFUSED household_member.save(update_fields=['member_status']) self.assertEqual(household_member.member_status, REFUSED) subject_refusal = SubjectRefusalFactory(household_member=household_member) self.assertEqual(subject_refusal.household_member.member_status, HTC_ELIGIBLE) self.assertTrue(subject_refusal.household_member.refused) self.assertTrue(subject_refusal.household_member.eligible_htc) options = [BHS_SCREEN, HTC_ELIGIBLE] options.append(subject_refusal.household_member.member_status) options = list(set(options)) options.sort() member_status_choices = [(item, item) for item in options] x = subject_refusal.household_member.member_status_choices self.assertEqual(x, member_status_choices)
class TestCorrectConsent(TestCase): app_label = 'bcpp_subject' community = 'test_community' def setUp(self): try: site_lab_profiles.register(BcppSubjectProfile()) except AlreadyRegisteredLabProfile: pass BcppAppConfiguration().prepare() site_lab_tracker.autodiscover() BcppSubjectVisitSchedule().build() site_rule_groups.autodiscover() self.study_site = StudySite.objects.get(site_code='01') self.survey = Survey.objects.all()[0] plot = PlotFactory(community=self.community, household_count=1, status='residential_habitable') survey = Survey.objects.all().order_by('datetime_start')[0] next_survey = Survey.objects.all().order_by('datetime_start')[1] self.household_structure = HouseholdStructure.objects.get( household__plot=plot, survey=survey) self.household_structure_y2 = HouseholdStructure.objects.get( household__plot=plot, survey=next_survey) RepresentativeEligibilityFactory( household_structure=self.household_structure) RepresentativeEligibilityFactory( household_structure=self.household_structure_y2) self.female_dob = date(1989, 10, 10) self.female_age_in_years = relativedelta(date.today(), self.female_dob).years self.female_first_name = 'ERIKA' self.female_last_name = 'WAXON' self.female_initials = "EW" self.household_member_female_T0 = HouseholdMemberFactory( household_structure=self.household_structure, gender='F', age_in_years=self.female_age_in_years, first_name=self.female_first_name, initials=self.female_initials) self.household_member_female_T0.member_status = 'BHS_SCREEN' self.household_member_female_T0.save() self.assertEqual(self.household_member_female_T0.member_status, 'BHS_SCREEN') self.enrollment_checklist_female = EnrollmentChecklistFactory( household_member=self.household_member_female_T0, gender='F', citizen='Yes', dob=self.female_dob, guardian='No', initials=self.household_member_female_T0.initials, part_time_resident='Yes') self.subject_consent_female = SubjectConsentFactory( household_member=self.household_member_female_T0, study_site=self.study_site, gender='F', dob=self.female_dob, first_name=self.female_first_name, last_name=self.female_last_name, initials=self.female_initials) self.registered_subject_female = RegisteredSubject.objects.get( subject_identifier=self.subject_consent_female.subject_identifier) enumeration_helper = EnumerationHelper( self.household_structure.household, survey, next_survey) self.household_member_female = enumeration_helper.create_member_on_target( self.household_member_female_T0) self.appointment_female = Appointment.objects.get( registered_subject=self.registered_subject_female, visit_definition__code='T1') self.appointment_female_T0 = Appointment.objects.get( registered_subject=self.registered_subject_female, visit_definition__code='T0') self.subject_visit_female_T0 = SubjectVisitFactory( appointment=self.appointment_female_T0, household_member=self.household_member_female_T0) self.subject_visit_female = SubjectVisitFactory( appointment=self.appointment_female, household_member=self.household_member_female) self.locator_female_T0 = SubjectLocatorFactory( subject_visit=self.subject_visit_female_T0, registered_subject=self.registered_subject_female) self.residency_mobility_female_T0 = ResidencyMobilityFactory( subject_visit=self.subject_visit_female_T0) microtube_panel = Panel.objects.get(name='Microtube') aliquot_type = AliquotType.objects.all()[0] self.subject_requisition_T0 = SubjectRequisitionFactory( subject_visit=self.subject_visit_female_T0, panel=microtube_panel, aliquot_type=aliquot_type) self.hiv_result_today_T0 = HivResultFactory( subject_visit=self.subject_visit_female_T0, hiv_result=NEG) def test_lastname_and_initials(self): correct_consent = CorrectConsentFactory( subject_consent=self.subject_consent_female, old_last_name=self.female_last_name, new_last_name='DIMSTAR', ) subject_consent = SubjectConsent.objects.get( id=self.subject_consent_female.id) self.assertEquals(subject_consent.initials, 'ED') self.assertEquals( EnrollmentChecklist.objects.get( id=self.enrollment_checklist_female.id).initials, 'ED') self.assertEquals(subject_consent.initials, 'ED') self.assertEquals(subject_consent.last_name, 'DIMSTAR') self.assertFalse(subject_consent.is_verified) self.assertIsNone(subject_consent.is_verified_datetime) self.assertIsNone(subject_consent.verified_by) if not correct_consent.id: self.assertEquals(subject_consent.user_modified, correct_consent.user_created) def test_firstname_and_initials(self): correct_consent = CorrectConsentFactory( subject_consent=self.subject_consent_female, old_first_name=self.female_first_name, new_first_name='GAME', ) subject_consent = SubjectConsent.objects.get( id=self.subject_consent_female.id) self.assertEquals( HouseholdMember.objects.get( id=self.household_member_female_T0.id).initials, 'GW') self.assertEquals( EnrollmentChecklist.objects.get( id=self.enrollment_checklist_female.id).initials, 'GW') self.assertEquals( HouseholdMember.objects.get( id=self.household_member_female_T0.id).first_name, 'GAME') self.assertEquals(subject_consent.first_name, 'GAME') self.assertFalse(subject_consent.is_verified) self.assertIsNone(subject_consent.is_verified_datetime) self.assertIsNone(subject_consent.verified_by) if not correct_consent.id: self.assertEquals(subject_consent.user_modified, correct_consent.user_created) def test_dob(self): hic = HicEnrollmentFactory(subject_visit=self.subject_visit_female_T0, dob=self.female_dob) new_dob = date(1988, 1, 1) age_in_years = relativedelta( self.subject_consent_female.consent_datetime, new_dob).years correct_consent = CorrectConsentFactory( subject_consent=self.subject_consent_female, old_dob=self.female_dob, new_dob=new_dob, ) subject_consent = SubjectConsent.objects.get( id=self.subject_consent_female.id) self.assertEquals( HouseholdMember.objects.get( id=self.household_member_female_T0.id).age_in_years, age_in_years) self.assertEquals( EnrollmentChecklist.objects.get( id=self.enrollment_checklist_female.id).dob, new_dob) self.assertEquals(subject_consent.dob, new_dob) self.assertEquals( HicEnrollment.objects.get( subject_visit=self.subject_visit_female_T0).dob, new_dob) self.assertFalse(subject_consent.is_verified) self.assertIsNone(subject_consent.is_verified_datetime) self.assertIsNone(subject_consent.verified_by) if not correct_consent.id: self.assertEquals(subject_consent.user_modified, correct_consent.user_created) self.assertEquals(hic.user_modified, correct_consent.user_created) def test_gender(self): correct_consent = CorrectConsentFactory( subject_consent=self.subject_consent_female, old_gender='F', new_gender='M', ) subject_consent = SubjectConsent.objects.get( id=self.subject_consent_female.id) self.assertEquals( HouseholdMember.objects.get( id=self.household_member_female_T0.id).gender, 'M') self.assertEquals( EnrollmentChecklist.objects.get( id=self.enrollment_checklist_female.id).gender, 'M') self.assertEquals(subject_consent.gender, 'M') self.assertFalse(subject_consent.is_verified) self.assertIsNone(subject_consent.is_verified_datetime) self.assertIsNone(subject_consent.verified_by) if not correct_consent.id: self.assertEquals(subject_consent.user_modified, correct_consent.user_created) def test_witness(self): self.subject_consent_female.witness_name = 'DIMO' self.subject_consent_female.save(update_fields=['witness_name']) correct_consent = CorrectConsentFactory( subject_consent=self.subject_consent_female, old_witness_name='DIMO', new_witness_name='BIMO', ) subject_consent = SubjectConsent.objects.get( id=self.subject_consent_female.id) self.assertEquals(subject_consent.witness_name, 'BIMO') self.assertFalse(subject_consent.is_verified) self.assertIsNone(subject_consent.is_verified_datetime) self.assertIsNone(subject_consent.verified_by) if not correct_consent.id: self.assertEquals(subject_consent.user_modified, correct_consent.user_created) def test_to_unverify_consent(self): self.subject_consent_female.witness_name = 'DIMO' self.assertFalse(self.subject_consent_female.is_verified) self.assertIsNone(self.subject_consent_female.is_verified_datetime) self.assertIsNone(self.subject_consent_female.verified_by) self.subject_consent_female.is_verified = True self.subject_consent_female.is_verified_datetime = datetime( 2016, 4, 18, 10, 3, 42, 215477) self.subject_consent_female.verified_by = 'ckgathi' self.subject_consent_female.save(update_fields=[ 'witness_name', 'verified_by', 'is_verified_datetime', 'is_verified' ]) self.assertTrue(self.subject_consent_female.is_verified) self.assertEqual(self.subject_consent_female.is_verified_datetime, datetime(2016, 4, 18, 10, 3, 42, 215477)) self.assertEqual(self.subject_consent_female.verified_by, 'ckgathi') correct_consent = CorrectConsentFactory( subject_consent=self.subject_consent_female, old_witness_name='DIMO', new_witness_name='BIMO', ) subject_consent = SubjectConsent.objects.get( id=self.subject_consent_female.id) self.assertEquals(subject_consent.witness_name, 'BIMO') self.assertFalse(self.subject_consent_female.is_verified) self.assertIsNone(self.subject_consent_female.is_verified_datetime) self.assertIsNone(self.subject_consent_female.verified_by) if not correct_consent.id: self.assertEquals(subject_consent.user_modified, correct_consent.user_created)
class BaseRuleGroupTestSetup(TestCase): app_label = 'bcpp_subject' community = 'test_community' def setUp(self): try: site_lab_profiles.register(BcppSubjectProfile()) except AlreadyRegisteredLabProfile: pass BcppAppConfiguration().prepare() site_lab_tracker.autodiscover() BcppSubjectVisitSchedule().build() site_rule_groups.autodiscover() plot = PlotFactory(community=self.community, household_count=1, status='residential_habitable') survey_T0 = Survey.objects.get(survey_slug='bcpp-year-1') survey_T1 = Survey.objects.get(survey_slug='bcpp-year-2') survey_T2 = Survey.objects.get(survey_slug='bcpp-year-3') self.study_site = StudySite.objects.get(site_code='01') self.household_structure = HouseholdStructure.objects.get( household__plot=plot, survey=survey_T0) self.household_structure_y2 = HouseholdStructure.objects.get( household__plot=plot, survey=survey_T1) self.household_structure_y3 = HouseholdStructure.objects.get( household__plot=plot, survey=survey_T2) RepresentativeEligibilityFactory( household_structure=self.household_structure) RepresentativeEligibilityFactory( household_structure=self.household_structure_y2) RepresentativeEligibilityFactory( household_structure=self.household_structure_y3) HouseholdMemberFactory(household_structure=self.household_structure) #HouseholdMemberFactory(household_structure=self.household_structure) #HouseholdMemberFactory(household_structure=self.household_structure) male_dob = date.today() - relativedelta(years=25) male_age_in_years = 25 male_first_name = 'ERIK' male_initials = "EW" female_dob = date.today() - relativedelta(years=35) female_age_in_years = 35 female_first_name = 'ERIKA' female_initials = "EW" registered_subject = RegisteredSubjectFactory( registration_identifier='123456467') self.household_member_female_T0 = HouseholdMemberFactory( household_structure=self.household_structure, gender='F', age_in_years=female_age_in_years, first_name=female_first_name, initials=female_initials, registered_subject=registered_subject) registered_subject = RegisteredSubjectFactory( registration_identifier='123456468') self.household_member_male_T0 = HouseholdMemberFactory( household_structure=self.household_structure, gender='M', age_in_years=male_age_in_years, first_name=male_first_name, initials=male_initials, registered_subject=registered_subject) self.household_member_female_T0.member_status = 'BHS_SCREEN' self.household_member_male_T0.member_status = 'BHS_SCREEN' self.household_member_female_T0.save() self.household_member_male_T0.save() EnrollmentChecklistFactory( household_member=self.household_member_female_T0, gender='F', citizen=YES, dob=female_dob, guardian=NO, initials=self.household_member_female_T0.initials, part_time_resident=YES) EnrollmentChecklistFactory( household_member=self.household_member_male_T0, gender='M', citizen=YES, dob=male_dob, guardian=NO, initials=self.household_member_male_T0.initials, part_time_resident=YES) subject_consent_female = SubjectConsentFactory( household_member=self.household_member_female_T0, confirm_identity='101129811', identity='101129811', study_site=self.study_site, gender='F', dob=female_dob, first_name=female_first_name, initials=female_initials) subject_consent_male = SubjectConsentFactory( household_member=self.household_member_male_T0, confirm_identity='101119811', identity='101119811', study_site=self.study_site, gender='M', dob=male_dob, first_name=male_first_name, initials=male_initials) self.assertEqual( HouseholdStructure.objects.filter( household=self.household_structure.household, survey=survey_T0, enumerated=True, enrolled=True).count(), 1) enumeration_helper_T2 = EnumerationHelper( self.household_structure.household, survey_T0, survey_T1) enumeration_helper_T2.add_members_from_survey() self.household_member_female = HouseholdMember.objects.get( internal_identifier=self.household_member_female_T0. internal_identifier, household_structure__survey=survey_T1) self.household_member_male = HouseholdMember.objects.get( internal_identifier=self.household_member_male_T0. internal_identifier, household_structure__survey=survey_T1) self.assertEqual( HouseholdStructure.objects.filter( household=self.household_structure_y2.household, survey=survey_T1, enumerated=True, enrolled=True).count(), 1) enumeration_helper_T3 = EnumerationHelper( self.household_structure.household, survey_T1, survey_T2) enumeration_helper_T3.add_members_from_survey() self.household_member_female_T2 = HouseholdMember.objects.get( internal_identifier=self.household_member_female. internal_identifier, household_structure__survey=survey_T2) self.household_member_male_T2 = HouseholdMember.objects.get( internal_identifier=self.household_member_male.internal_identifier, household_structure__survey=survey_T2) self.assertEqual( HouseholdStructure.objects.filter( household=self.household_structure_y3.household, survey=survey_T2, enumerated=True, enrolled=True).count(), 1) self.registered_subject_female = RegisteredSubject.objects.get( subject_identifier=subject_consent_female.subject_identifier) self.registered_subject_male = RegisteredSubject.objects.get( subject_identifier=subject_consent_male.subject_identifier) self.appointment_female = Appointment.objects.get( registered_subject=self.registered_subject_female, visit_definition__code='T1') self.appointment_female_T0 = Appointment.objects.get( registered_subject=self.registered_subject_female, visit_definition__code='T0') self.appointment_female_T2 = Appointment.objects.get( registered_subject=self.registered_subject_female, visit_definition__code='T2') self.subject_visit_female_T0 = SubjectVisitFactory( appointment=self.appointment_female_T0, household_member=self.household_member_female_T0) self.subject_visit_female = SubjectVisitFactory( appointment=self.appointment_female, household_member=self.household_member_female) self.subject_visit_female_T2 = SubjectVisitFactory( appointment=self.appointment_female_T2, household_member=self.household_member_female_T2) self.appointment_male = Appointment.objects.get( registered_subject=self.registered_subject_male, visit_definition__code='T1') self.appointment_male_T0 = Appointment.objects.get( registered_subject=self.registered_subject_male, visit_definition__code='T0') self.appointment_male_T2 = Appointment.objects.get( registered_subject=self.registered_subject_male, visit_definition__code='T2') self.subject_visit_male_T0 = SubjectVisitFactory( appointment=self.appointment_male_T0, household_member=self.household_member_male_T0) self.subject_visit_male = SubjectVisitFactory( appointment=self.appointment_male, household_member=self.household_member_male) self.subject_visit_male_T2 = SubjectVisitFactory( appointment=self.appointment_male_T2, household_member=self.household_member_male_T2) def check_male_registered_subject_rule_groups(self, subject_visit): circumsition_options = {} circumsition_options.update(entry__app_label='bcpp_subject', entry__model_name='circumcision', appointment=subject_visit.appointment) circumcised_options = {} circumcised_options.update(entry__app_label='bcpp_subject', entry__model_name='circumcised', appointment=subject_visit.appointment) uncircumcised_options = {} uncircumcised_options.update(entry__app_label='bcpp_subject', entry__model_name='uncircumcised', appointment=subject_visit.appointment) reproductivehealth_options = {} reproductivehealth_options.update( entry__app_label='bcpp_subject', entry__model_name='reproductivehealth', appointment=subject_visit.appointment) pregnancy_options = {} pregnancy_options.update(entry__app_label='bcpp_subject', entry__model_name='pregnancy', appointment=subject_visit.appointment) nonpregnancy_options = {} nonpregnancy_options.update(entry__app_label='bcpp_subject', entry__model_name='nonpregnancy', appointment=subject_visit.appointment) if subject_visit == self.subject_visit_male_T0: self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NEW, **circumsition_options).count(), 1) self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NEW, **circumcised_options).count(), 1) self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NEW, **uncircumcised_options).count(), 1) self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NOT_REQUIRED, **reproductivehealth_options).count(), 1) self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NOT_REQUIRED, **pregnancy_options).count(), 1) self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NOT_REQUIRED, **nonpregnancy_options).count(), 1) else: self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NEW, **reproductivehealth_options).count(), 1) self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NEW, **pregnancy_options).count(), 1) self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NEW, **nonpregnancy_options).count(), 1) self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NOT_REQUIRED, **circumsition_options).count(), 1) self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NOT_REQUIRED, **circumcised_options).count(), 1) self.assertEqual( ScheduledEntryMetaData.objects.filter( entry_status=NOT_REQUIRED, **uncircumcised_options).count(), 1) def new_metadata_is_not_keyed(self): self.assertEquals( ScheduledEntryMetaData.objects.filter( entry_status=KEYED, appointment=self.subject_visit_male.appointment).count(), 0) self.assertEquals( RequisitionMetaData.objects.filter( entry_status=KEYED, appointment=self.subject_visit_male.appointment).count(), 0) @property def baseline_subject_visit(self): """ Return baseline subject visit""" self.subject_visit_male_T0.delete() self.subject_visit_male_T0 = SubjectVisitFactory( appointment=self.appointment_male_T0, household_member=self.household_member_male_T0) self.check_male_registered_subject_rule_groups( self.subject_visit_male_T0) return self.subject_visit_male_T0 @property def annual_subject_visit_y2(self): """ Return annuall subject visit """ self.subject_visit_male.delete() self.assertEqual( ScheduledEntryMetaData.objects.filter( appointment=self.appointment_male).count(), 0) self.subject_visit_male = SubjectVisitFactory( appointment=self.appointment_male, household_member=self.household_member_male) return self.subject_visit_male @property def annual_subject_visit_y3(self): """ Return annuall subject visit """ self.subject_visit_male_T2.delete() self.assertEqual( ScheduledEntryMetaData.objects.filter( appointment=self.appointment_male_T2).count(), 0) self.subject_visit_male_T2 = SubjectVisitFactory( appointment=self.appointment_male_T2, household_member=self.household_member_male_T2) return self.subject_visit_male_T2 def hiv_result(self, status, subject_visit): """ Create HivResult for a particular survey""" aliquot_type = AliquotType.objects.all()[0] site = StudySite.objects.all()[0] microtube_panel = Panel.objects.get(name='Microtube') SubjectRequisitionFactory(subject_visit=subject_visit, panel=microtube_panel, aliquot_type=aliquot_type, site=site) self._hiv_result = HivResult.objects.create( subject_visit=subject_visit, hiv_result=status, report_datetime=datetime.today(), insufficient_vol=NO) return self._hiv_result
class TestSubjectConsentForm(TestCase): app_label = 'bcpp_subject' community = 'test_community' @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-2', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def setUp(self): site_mappers.autodiscover() from bhp066.apps.bcpp_subject.visit_schedule import BcppSubjectVisitSchedule try: site_lab_profiles.register(BcppSubjectProfile()) except AlreadyRegisteredLabProfile: pass self.app_config = BcppAppConfiguration() self.app_config.prepare() self.app_config.prep_survey_for_tests() site_lab_tracker.autodiscover() BcppSubjectVisitSchedule().build() site_rule_groups.autodiscover() plot = PlotFactory(community=self.community, household_count=1, status='residential_habitable') self.survey_bhs = Survey.objects.get(survey_slug='bcpp-year-1') self.survey_ahs = Survey.objects.get(survey_slug='bcpp-year-2') self.study_site = StudySite.objects.get(site_code='01') self.household_structure_bhs = HouseholdStructure.objects.get( household__plot=plot, survey=self.survey_bhs) self.household_structure_ahs = HouseholdStructure.objects.get( household__plot=plot, survey=self.survey_ahs) self.create_household_log_entry(self.household_structure_bhs) RepresentativeEligibilityFactory( household_structure=self.household_structure_bhs) self.male_dob = date.today() - relativedelta(years=25) self.male_age_in_years = 25 self.male_first_name = 'ERIK' self.male_last_name = 'HIEWAI' self.male_initials = "EW" self.household_member_male_T0 = HouseholdMemberFactory( household_structure=self.household_structure_bhs, gender='M', age_in_years=self.male_age_in_years, first_name=self.male_first_name, initials=self.male_initials) HeadHouseholdEligibilityFactory( household_member=self.household_member_male_T0, household_structure=self.household_structure_bhs) self.household_member_male_T0.eligible_hoh = True self.household_member_male_T0.save() HouseholdInfoFactory(household_member=self.household_member_male_T0, household_structure=self.household_structure_bhs, registered_subject=self.household_member_male_T0. registered_subject) self.enrollment = EnrollmentChecklistFactory( household_member=self.household_member_male_T0, gender='M', citizen='Yes', dob=self.male_dob, guardian='No', initials=self.household_member_male_T0.initials, part_time_resident='Yes') self.subject_consent_male = SubjectConsentFactory( household_member=self.household_member_male_T0, confirm_identity='101119811', identity='101119811', study_site=self.study_site, gender='M', dob=self.male_dob, first_name=self.male_first_name, initials=self.male_initials) self.data = { 'last_name': 'WIZZY', 'is_minor': 'No', 'witness_name': None, 'is_literate': 'Yes', 'subject_type': 'subject', 'consent_copy': 'Yes', 'is_verified': False, 'consent_signature': None, 'first_name': 'ERIK', 'dm_comment': None, 'is_dob_estimated': None, 'verified_by': None, 'user_modified': u'', 'is_signed': True, 'is_verified_datetime': None, 'subject_identifier_aka': None, 'version': u'4', 'citizen': 'Yes', 'legal_marriage': u'N/A', 'assessment_score': 'Yes', 'is_incarcerated': 'No', 'consent_reviewed': 'Yes', 'study_questions': 'Yes', 'sid': None, 'study_site_id': self.study_site.id, 'may_store_samples': YES, 'consent_version_recent': None, 'subject_identifier': self.household_member_male_T0.registered_subject. subject_identifier, 'subject_identifier_as_pk': self.household_member_male_T0.registered_subject.id, 'community': u'test_community', 'using': 'default', 'marriage_certificate_no': None, 'identity': '317918515', 'confirm_identity': '317918515', 'registered_subject_id': self.household_member_male_T0.registered_subject.id, 'identity_type': 'OMANG', 'language': u'not specified', 'guardian_name': None, 'gender': 'M', 'household_member': self.household_member_male_T0.id, 'marriage_certificate': u'N/A', 'dob': self.male_dob, 'study_site': self.study_site.id, 'initials': 'EW', 'language': 'en', 'is_dob_estimated': '-', 'consent_signature': YES, 'consent_datetime': datetime.today(), 'version': 1 } def create_household_log_entry(self, household_structure): household_log = HouseholdLog.objects.filter( household_structure=household_structure).last() HouseholdLogEntry.objects.all().delete() HouseholdLogEntryFactory(household_log=household_log) @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-2', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def test_subject_consent_age_above_64_at_bhs(self): """ For all participants who are above 64 at bhs are not eligible.""" from bhp066.apps.bcpp_subject.forms.subject_consent_form import SubjectConsentForm self.male_dob = date.today() - relativedelta(years=65) self.data['dob'] = self.male_dob self.data['household_member'] = self.household_member_male_T0.id consent_form = SubjectConsentForm(data=self.data) self.assertIn( u"Subject's age is 65y. Subject is not eligible for consent.", consent_form.errors.get("__all__")) @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-1', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def test_subject_consent_age_within_65_at_bhs(self): """ For all participants within 65 at bhs are eligible.""" self.app_config.prep_survey_for_tests() self.subject_consent_male.version = 2 self.subject_consent_male.save_base() from bhp066.apps.bcpp_subject.forms.subject_consent_form import SubjectConsentForm dob = date.today() - relativedelta(years=64) self.household_member_male_T0.age_in_years = 64 self.household_member_male_T0.save() self.enrollment.dob = dob self.enrollment.save_base() self.data['dob'] = dob self.data['identity'] = '317918514' self.data['confirm_identity'] = '317918514' consent_form = SubjectConsentForm(data=self.data) print consent_form.errors consent_form.save() self.assertEqual( RegisteredSubject.objects.filter( identity=self.data['identity']).count(), 1) @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-2', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def test_subject_consent_age_above_64_at_ahs(self): """ Test identity on """ dob = date.today() - relativedelta(years=65) self.household_member_male_T0.age_in_years = 65 self.household_member_male_T0.save_base() self.subject_consent_male.dob = dob self.enrollment.dob = dob self.enrollment.save_base() self.subject_consent_male.save_base() self.app_config.prep_survey_for_tests() from bhp066.apps.bcpp_subject.forms.subject_consent_form import SubjectConsentForm enumeration_helper = EnumerationHelper( self.household_structure_ahs.household, self.survey_bhs, self.survey_ahs) enumeration_helper.add_members_from_survey() self.household_member = HouseholdMember.objects.get( registered_subject__identity='101119811', household_structure__survey=self.survey_ahs, ) dob = date.today() - relativedelta(years=65) self.household_member.age_in_years = 65 self.household_member.save_base() HeadHouseholdEligibilityFactory( household_member=self.household_member, household_structure=self.household_member.household_structure) self.enrollment.dob = dob self.enrollment.save_base() self.subject_consent = SubjectConsent.objects.get( household_member=self.household_member_male_T0) self.subject_consent.version = 2 self.subject_consent.save_base() self.create_household_log_entry(self.household_structure_ahs) self.data['dob'] = dob self.data['household_member'] = self.household_member.id self.data['identity'] = '101119811' self.data['confirm_identity'] = '101119811' consent_form = SubjectConsentForm(data=self.data) print consent_form.errors self.assertTrue(consent_form.is_valid()) @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-2', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def test_subject_consent_age_within_65_at_ahs(self): """ Test identity on """ self.app_config.prep_survey_for_tests() from bhp066.apps.bcpp_subject.forms.subject_consent_form import SubjectConsentForm enumeration_helper = EnumerationHelper( self.household_structure_ahs.household, self.survey_bhs, self.survey_ahs) enumeration_helper.add_members_from_survey() self.household_member = HouseholdMember.objects.get( registered_subject__identity='101119811', household_structure__survey=self.survey_ahs) HeadHouseholdEligibilityFactory( household_member=self.household_member, household_structure=self.household_member.household_structure) self.subject_consent = SubjectConsent.objects.get( household_member=self.household_member_male_T0) self.subject_consent.version = 2 self.subject_consent.save_base() self.data['household_member'] = self.household_member.id self.data['identity'] = '101119811' self.data['confirm_identity'] = '101119811' self.create_household_log_entry(self.household_structure_ahs) consent_form = SubjectConsentForm(data=self.data) self.assertTrue(consent_form.is_valid()) @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-2', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def test_surname_marrige_at_ahs(self): """ Test identity on """ self.app_config.prep_survey_for_tests() from bhp066.apps.bcpp_subject.forms.subject_consent_form import SubjectConsentForm enumeration_helper = EnumerationHelper( self.household_structure_ahs.household, self.survey_bhs, self.survey_ahs) enumeration_helper.add_members_from_survey() self.household_member = HouseholdMember.objects.get( registered_subject__identity='101119811', household_structure__survey=self.survey_ahs) self.household_member.personal_details_changed = YES self.household_member.details_change_reason = 'married' self.household_member.last_name = 'SETSIBA' self.household_member.initials = 'ES' self.household_member.save() self.create_household_log_entry(self.household_structure_ahs) HeadHouseholdEligibilityFactory( household_member=self.household_member, household_structure=self.household_member.household_structure) self.subject_consent = SubjectConsent.objects.get( household_member=self.household_member_male_T0) self.subject_consent.version = 2 self.subject_consent.save_base() self.data['household_member'] = self.household_member.id self.data['identity'] = '101119811' self.data['confirm_identity'] = '101119811' self.data['last_name'] = 'SETSIBA' self.data['initials'] = 'ES' consent_form = SubjectConsentForm(data=self.data) self.assertTrue(consent_form.is_valid()) consent_form.save() consent = SubjectConsent.objects.get( household_member=self.household_member) consent_form = SubjectConsentForm(data=self.data, instance=consent) consent_form.save() @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-1', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def test_validate_legal_marriage_at_bhs(self): self.data['citizen'] = NO self.data['identity'] = '101119811' self.data['confirm_identity'] = '101119811' from bhp066.apps.bcpp_subject.forms.subject_consent_form import SubjectConsentForm self.data['legal_marriage'] = YES self.data['marriage_certificate'] = YES self.data['marriage_certificate_no'] = '12421' self.enrollment.citizen = NO self.enrollment.save_base() consent_form = SubjectConsentForm(data=self.data) print consent_form.errors self.assertTrue(consent_form.is_valid()) @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-1', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def test_validate_legal_marriage_at_bhs_not_valid(self): self.data['citizen'] = NO self.data['identity'] = '101119811' self.data['confirm_identity'] = '101119811' from bhp066.apps.bcpp_subject.forms.subject_consent_form import SubjectConsentForm self.data['legal_marriage'] = YES self.data['marriage_certificate'] = YES self.enrollment.citizen = NO self.enrollment.save_base() consent_form = SubjectConsentForm(data=self.data) self.assertIn( u'You wrote subject is NOT a citizen and has marriage certificate. Please provide certificate number.', consent_form.errors.get("__all__")) self.assertFalse(consent_form.is_valid())
class TestMostRecentForm(TestCase): app_label = 'bcpp_subject' community = 'test_community' @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-2', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def setUp(self): site_mappers.autodiscover() from bhp066.apps.bcpp_subject.visit_schedule import BcppSubjectVisitSchedule try: site_lab_profiles.register(BcppSubjectProfile()) except AlreadyRegisteredLabProfile: pass self.app_config = BcppAppConfiguration() self.app_config.prepare() self.app_config.prep_survey_for_tests() site_lab_tracker.autodiscover() BcppSubjectVisitSchedule().build() site_rule_groups.autodiscover() plot = PlotFactory(community=self.community, household_count=1, status='residential_habitable') self.survey_bhs = Survey.objects.get(survey_slug='bcpp-year-1') self.survey_ahs = Survey.objects.get(survey_slug='bcpp-year-2') self.study_site = StudySite.objects.get(site_code='01') self.household_structure_bhs = HouseholdStructure.objects.get( household__plot=plot, survey=self.survey_bhs) self.household_structure_ahs = HouseholdStructure.objects.get( household__plot=plot, survey=self.survey_ahs) self.create_household_log_entry(self.household_structure_bhs) RepresentativeEligibilityFactory( household_structure=self.household_structure_bhs) self.male_dob = date.today() - relativedelta(years=25) self.male_age_in_years = 25 self.male_first_name = 'ERIK' self.male_last_name = 'HIEWAI' self.male_initials = "EW" self.household_member_male_T0 = HouseholdMemberFactory( household_structure=self.household_structure_bhs, gender='M', age_in_years=self.male_age_in_years, first_name=self.male_first_name, initials=self.male_initials) HeadHouseholdEligibilityFactory( household_member=self.household_member_male_T0, household_structure=self.household_structure_bhs) self.household_member_male_T0.eligible_hoh = True self.household_member_male_T0.save() HouseholdInfoFactory(household_member=self.household_member_male_T0, household_structure=self.household_structure_bhs, registered_subject=self.household_member_male_T0. registered_subject) self.enrollment = EnrollmentChecklistFactory( household_member=self.household_member_male_T0, gender='M', citizen='Yes', dob=self.male_dob, guardian='No', initials=self.household_member_male_T0.initials, part_time_resident='Yes') self.subject_consent_male = SubjectConsentFactory( household_member=self.household_member_male_T0, confirm_identity='101119811', identity='101119811', study_site=self.study_site, gender='M', dob=self.male_dob, first_name=self.male_first_name, initials=self.male_initials) self.appointment = Appointment.objects.get( registered_subject=self.household_member_male_T0. registered_subject, visit_definition__code='T0') self.subject_visit = SubjectVisitFactory( household_member=self.household_member_male_T0, appointment=self.appointment) self.registered_subject = RegisteredSubject.objects.get( subject_identifier=self.subject_consent_male.subject_identifier) self.sexual_data = { 'subject_visit': self.subject_visit.id, 'alcohol_sex': 'Myself', 'report_datetime': datetime.today(), 'condom': NO, 'more_sex': NO, 'ever_sex': YES, 'first_sex': 20, 'last_year_partners': None, 'lifetime_sex_partners': 1, 'more_sex': None, 'subject_visit_id': None, 'user_modified': u'', } self.data = { 'subject_visit': self.subject_visit.id, 'concurrent': NO, 'first_partner_live': None, 'first_condom_freq': u'Sometimes', 'first_disclose': u'Yes', 'first_exchange': u'30-39', 'first_first_sex': u'Years', 'first_first_sex_calc': 3L, 'first_haart': None, 'first_partner_arm': None, 'first_partner_cp': u'No', 'first_partner_hiv': u'not_sure', 'first_relationship': u'Long-term partner', 'first_sex_current': u'Yes', 'first_sex_freq': None, 'goods_exchange': u'No', 'partner_hiv_test': u'not_sure', 'past_year_sex_freq': u'About once a month', 'report_datetime': datetime.today(), 'sex_partner_community': u'N/A', 'subject_visit_id': None, 'third_last_sex': u'Days', 'third_last_sex_calc': 7L, 'user_modified': u'' } def create_household_log_entry(self, household_structure): household_log = HouseholdLog.objects.filter( household_structure=household_structure).last() HouseholdLogEntry.objects.all().delete() HouseholdLogEntryFactory(household_log=household_log) @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-1', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def test_subject_recent_form_valid(self): """ For all participants who are above 64 at bhs are not eligible.""" from bhp066.apps.bcpp_subject.forms.months_partner_form import MonthsRecentPartnerForm from bhp066.apps.bcpp_subject.forms.sexual_behaviour_form import SexualBehaviourForm sexual_behaviour_form = SexualBehaviourForm(data=self.sexual_data) sexual_behaviour_form.save() self.assertTrue(sexual_behaviour_form.is_valid()) from bhp066.apps.bcpp_list.models import PartnerResidency parnter_residency = PartnerResidency.objects.create( name='In this community.') self.data['first_partner_live'] = [parnter_residency.id] recent_form = MonthsRecentPartnerForm(data=self.data) self.assertTrue(recent_form.is_valid()) @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-1', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def test_subject_recent_form_valid1(self): """ For all participants who are above 64 at bhs are not eligible.""" from bhp066.apps.bcpp_subject.forms.months_partner_form import MonthsRecentPartnerForm from bhp066.apps.bcpp_subject.forms.sexual_behaviour_form import SexualBehaviourForm sexual_behaviour_form = SexualBehaviourForm(data=self.sexual_data) sexual_behaviour_form.save() self.assertTrue(sexual_behaviour_form.is_valid()) from bhp066.apps.bcpp_list.models import PartnerResidency parnter_residency = PartnerResidency.objects.create( name='In this community.') self.data['first_partner_live'] = [parnter_residency.id] self.data['concurrent'] = 'DWTA' recent_form = MonthsRecentPartnerForm(data=self.data) self.assertTrue(recent_form.is_valid()) @override_settings( SITE_CODE='01', CURRENT_COMMUNITY='test_community', CURRENT_SURVEY='bcpp-year-1', CURRENT_COMMUNITY_CHECK=False, LIMIT_EDIT_TO_CURRENT_SURVEY=True, LIMIT_EDIT_TO_CURRENT_COMMUNITY=True, FILTERED_DEFAULT_SEARCH=True, ) def test_subject_recent_form_not_valid(self): """ For all participants who are above 64 at bhs are not eligible.""" from bhp066.apps.bcpp_subject.forms.months_partner_form import MonthsRecentPartnerForm from bhp066.apps.bcpp_subject.forms.sexual_behaviour_form import SexualBehaviourForm sexual_behaviour_form = SexualBehaviourForm(data=self.sexual_data) sexual_behaviour_form.save() print sexual_behaviour_form.errors self.assertTrue(sexual_behaviour_form.is_valid()) from bhp066.apps.bcpp_list.models import PartnerResidency parnter_residency = PartnerResidency.objects.create( name='In this community.') self.data['concurrent'] = YES self.data['first_partner_live'] = [parnter_residency.id] recent_form = MonthsRecentPartnerForm(data=self.data) msg = "Please correct if you have sex with other partners" err_msg = u"You wrote that you have only one partner ever in sexual behavior form. {}".format( msg) #self.assertIn(u"sex", recent_form.errors.get("__all__")) self.assertFalse(recent_form.is_valid())