def test__get_spine_parameters__with_pmi__valid_except_pmi_postcode( client, faker, mock_convert_postcode): u = login(client, faker) dth = DemographicsTestHelper(faker=faker, user=u) dr = dth.get_demographics_request__spine_lookup() drd = dr.data[0] error_message = 'ABCDEFG' mock_convert_postcode.side_effect = [ (None, drd.postcode), (error_message, ''), ] actual = get_spine_parameters(drd) mock_convert_postcode.call_count == 2 assert parse_date(actual.dob) == parse_date(drd.dob) assert actual.family_name == drd.family_name assert actual.gender == convert_gender(drd.gender)[1] assert actual.given_name == drd.given_name assert actual.nhs_number == drd.nhs_number assert actual.postcode == drd.postcode assert len(actual.warnings) == 1 assert actual.warnings[0].scope == 'pmi_postcode' assert actual.warnings[0].message == error_message _remove_files(dr)
def test__get_spine_parameters__no_pmi__valid_except_names( client, faker, mock_convert_name): u = login(client, faker) dth = DemographicsTestHelper(faker=faker, user=u, find_pre_pmi_details=False) dr = dth.get_demographics_request__spine_lookup() drd = dr.data[0] error_message = 'ABCDEFG' mock_convert_name.return_value = (error_message, '') actual = get_spine_parameters(drd) mock_convert_name.call_count = 2 assert parse_date(actual.dob) == parse_date(drd.dob) assert actual.family_name == None assert actual.gender == convert_gender(drd.gender)[1] assert actual.given_name == None assert actual.nhs_number == drd.nhs_number assert actual.postcode == drd.postcode assert len(actual.warnings) == 2 assert actual.warnings[0].scope == 'family_name' assert actual.warnings[0].message == error_message assert actual.warnings[1].scope == 'given_name' assert actual.warnings[1].message == error_message _remove_files(dr)
def test__extract_data__missing_columns(client, faker, column_headings, extension, mock_schedule_lookup_tasks, mock_log_exception): u = login(client, faker) dth = DemographicsTestHelper(faker=faker, user=u, extension=extension, column_headings=column_headings) dr = dth.get_demographics_request__data_extraction() extract_data(dr.id) actual = DemographicsRequest.query.get(dr.id) mock_schedule_lookup_tasks.assert_called_once_with(dr.id) mock_log_exception.assert_not_called() assert len(actual.data) == 1 assert actual.data_extracted == True assert actual.data_extracted_datetime is not None for e, a in zip(dth.get_input_details(), actual.data): assert e.get('uhl_system_number', '') == a.uhl_system_number assert e.get('nhs_number', '') == a.nhs_number assert e.get('family_name', '') == a.family_name assert e.get('given_name', '') == a.given_name assert e.get('gender', '') == a.gender assert parse_date(e.get('date_of_birth', '')) == parse_date(a.dob) assert e.get('postcode', '') == a.postcode _remove_files(dr)
def test__extract_data__normal(client, faker, extension, row_count, mock_schedule_lookup_tasks, mock_log_exception): u = login(client, faker) dth = DemographicsTestHelper(faker=faker, user=u, row_count=row_count, extension=extension) dr = dth.get_demographics_request__data_extraction() extract_data(dr.id) actual = DemographicsRequest.query.get(dr.id) mock_schedule_lookup_tasks.assert_called_once_with(dr.id) mock_log_exception.assert_not_called() assert len(actual.data) == row_count assert actual.data_extracted == True assert actual.data_extracted_datetime is not None for e, a in zip(dth._person_details, actual.data): assert e['uhl_system_number'] == a.uhl_system_number assert e['nhs_number'] == a.nhs_number assert e['family_name'] == a.family_name assert e['given_name'] == a.given_name assert e['gender'] == a.gender assert parse_date(e['date_of_birth']) == parse_date(a.dob) assert e['postcode'] == a.postcode _remove_files(dr)
def _assert_actual_equals_expected(actual, expected): assert actual.participant_import_definition_id in expected assert actual.ecrf_participant_identifier in expected[ actual.participant_import_definition_id] e_ecrf = expected[actual.participant_import_definition_id][ actual.ecrf_participant_identifier]['ecrf'] e_ids = expected[actual.participant_import_definition_id][ actual.ecrf_participant_identifier]['identifiers'] assert actual is not None assert actual.ecrf_participant_identifier == e_ecrf[ 'ecrf_participant_identifier'] assert parse_date(actual.recruitment_date) == e_ecrf['recruitment_date'] assert actual.first_name == e_ecrf['first_name'] assert actual.last_name == e_ecrf['last_name'] assert actual.sex == e_ecrf['sex'] assert actual.postcode == e_ecrf['postcode'] assert parse_date(actual.birth_date) == e_ecrf['birth_date'] assert actual.complete_or_expected == e_ecrf['complete_or_expected'] assert actual.withdrawal_date == e_ecrf['withdrawal_date'] assert actual.withdrawn_from_study == e_ecrf['withdrawn_from_study'] assert actual.post_withdrawal_keep_samples == e_ecrf[ 'post_withdrawal_keep_samples'] assert actual.post_withdrawal_keep_data == e_ecrf[ 'post_withdrawal_keep_data'] assert actual.brc_opt_out == e_ecrf['brc_opt_out'] assert actual.excluded_from_analysis == e_ecrf['excluded_from_analysis'] assert actual.excluded_from_study == e_ecrf['excluded_from_study'] assert actual.ecrf_timestamp == e_ecrf['ecrf_timestamp'] assert len(actual.identifier_source.identifiers) == len(e_ids) for i in actual.identifier_source.identifiers: assert e_ids[i.participant_identifier_type.name] == i.identifier
def test__spine_lookup__nhs_number(client, faker, mock_get_spine_parameters, mock_get_demographics_from_nhs_number, mock_get_demographics_from_search, warning_count): u = login(client, faker) dth = DemographicsTestHelper(faker=faker, user=u) dr = dth.get_demographics_request__spine_lookup() drd = dr.data[0] params = SpineParameters() params.nhs_number = drd.nhs_number params.dob = drd.dob params.family_name = drd.family_name params.given_name = drd.given_name params.gender = drd.gender params.postcode = drd.postcode for i in range(warning_count): params.add_warning( scope=f'scope {i}', message=f'message {i}', ) mock_get_spine_parameters.return_value = params mock_get_demographics_from_nhs_number.return_value = spine_response_full spine_lookup(drd) mock_get_demographics_from_nhs_number.assert_called_once_with( nhs_number=params.nhs_number, dob=params.dob, ) mock_get_demographics_from_search.assert_not_called() assert drd.response is not None assert drd.response.nhs_number == spine_response_full.nhs_number assert drd.response.title == spine_response_full.title assert drd.response.forename == spine_response_full.forename assert drd.response.middlenames == spine_response_full.middlenames assert drd.response.lastname == spine_response_full.lastname assert drd.response.sex == spine_response_full.sex assert drd.response.postcode == spine_response_full.postcode assert drd.response.address == spine_response_full.address assert parse_date(drd.response.date_of_birth) == parse_date( spine_response_full.date_of_birth) assert parse_date(drd.response.date_of_death) == parse_date( spine_response_full.date_of_death) assert drd.response.is_deceased == spine_response_full.is_deceased assert drd.response.current_gp_practice_code == spine_response_full.current_gp_practice_code assert len(drd.messages) == warning_count for i, w in enumerate(drd.messages): assert w.type == 'warning' assert w.source == 'validation' assert w.scope == f'scope {i}' assert w.message == f'message {i}' _remove_files(dr)
def test__import_participants__date_field__valid_date(client, faker, column_name, field_name): pid = _get_participant_import_definition( **{f'{field_name}_column_name': column_name}, ) record = {**DEFAULT_RECORD, column_name: '01-Jan-2010'} _run_import_test( record=record, expected=_define_result(pid, fields={field_name: parse_date('01-Jan-2010')}), )
def test__produce_demographics_result(client, faker, mock_email, row_count, extension): u = login(client, faker) dth = DemographicsTestHelper(faker=faker, user=u, row_count=row_count, extension=extension, include_data_errors=True) dr = dth.get_demographics_request__create_results() produce_demographics_result(dr.id) mock_email.assert_called_once() actual = DemographicsRequest.query.get(dr.id) assert actual.result_created_datetime is not None assert dr.result_created assert os.path.isfile(dr.result_filepath) for row, expected in zip(dr.iter_result_rows(), dth._person_details): assert row['spine_title'] == expected['title'] assert row['spine_forename'] == expected['given_name'] assert row['spine_middlenames'] == expected['middle_name'] assert row['spine_lastname'] == expected['family_name'] assert row['spine_postcode'] == expected['postcode'] assert row['spine_address'] == expected['address'] assert parse_date(row['spine_date_of_birth']) == parse_date(expected["date_of_birth"]) assert parse_date(row['spine_date_of_death']) == parse_date(expected["date_of_death"]) assert (row['spine_is_deceased'] == 'True') == expected['is_deceased'] assert row['spine_current_gp_practice_code'] == expected['current_gp_practice_code'] assert row['spine_message'] or '' == expected['expected_message'] assert row['pmi_nhs_number'] == expected['nhs_number'] assert row['pmi_uhl_system_number'] == expected['uhl_system_number'] assert row['pmi_family_name'] == expected['family_name'] assert row['pmi_given_name'] == expected['given_name'] assert row['pmi_gender'] == expected['gender'] assert parse_date(row['pmi_dob']) == parse_date(expected['date_of_birth']) assert parse_date(row['pmi_date_of_death']) == parse_date(expected["date_of_death"]) assert row['pmi_postcode'] == expected['postcode'] _remove_files(dr)
def test__parse_date(client, value, is_error, expected): if is_error: with pytest.raises(ValueError): parse_date(value) else: assert parse_date(value).strftime("%Y%m%d") == expected