def test_valid_ods(self): # Given debug_session = ApigeeDebugApi(REASONABLE_ADJUSTMENTS_PROXY_NAME) expected_ods = 'D82106' # When Utils.send_request(self) # Then actual_ods = debug_session.get_apigee_variable( 'verifyapikey.VerifyAPIKey.CustomAttributes.ods') assert_that(expected_ods).is_equal_to(actual_ods)
def test_x_request_id_equals_nhsd_request_id(self): # Given debug_session = ApigeeDebugApi( config.REASONABLE_ADJUSTMENTS_PROXY_NAME) # When Utils.send_request(self) # Then trace_id = debug_session.get_apigee_header('NHSD-Request-ID') x_request_id = debug_session.get_apigee_header('x-request-id') assert_that(trace_id).is_equal_to(x_request_id)
def test_jwt(self): # Given debug_session = ApigeeDebugApi(REASONABLE_ADJUSTMENTS_PROXY_NAME) expected_jwt_claims = { 'reason_for_request': 'directcare', 'scope': 'user/Consent.read', 'requesting_organization': 'https://fhir.nhs.uk/Id/ods-organization-code|D82106', 'requesting_system': 'https://fhir.nhs.uk/Id/accredited-system|200000001390', 'requesting_user': f'https://fhir.nhs.uk/Id/sds-role-profile-id|{config.TEST_NHSD_SESSION_URID}', 'sub': f'https://fhir.nhs.uk/Id/sds-role-profile-id|{config.TEST_NHSD_SESSION_URID}', 'iss': 'http://api.service.nhs.uk', 'aud': f'/{REASONABLE_ADJUSTMENTS_PROXY_PATH}/Consent' } # When Utils.send_request(self) # Then # We should pull Authorization header instead but Apigee mask that value so we get spineJwt variable instead actual_jwt = debug_session.get_apigee_variable('spineJwt') # We manually decode jwt because, jwt library requires all three segments but we only have two (no signature). jwt_segments = actual_jwt.split('.') actual_jwt_claims = json.loads(base64.b64decode(jwt_segments[1])) assert_that(expected_jwt_claims['reason_for_request'] ).is_equal_to_ignoring_case( actual_jwt_claims['reason_for_request']) assert_that(expected_jwt_claims['scope']).is_equal_to_ignoring_case( actual_jwt_claims['scope']) assert_that(expected_jwt_claims['requesting_organization'] ).is_equal_to_ignoring_case( actual_jwt_claims['requesting_organization']) assert_that(expected_jwt_claims['requesting_system'] ).is_equal_to_ignoring_case( actual_jwt_claims['requesting_system']) assert_that( expected_jwt_claims['requesting_user']).is_equal_to_ignoring_case( actual_jwt_claims['requesting_user']) assert_that(expected_jwt_claims['sub']).is_equal_to_ignoring_case( actual_jwt_claims['sub']) assert_that(expected_jwt_claims['iss']).is_equal_to_ignoring_case( actual_jwt_claims['iss']) assert_that(expected_jwt_claims['aud']).is_equal_to_ignoring_case( actual_jwt_claims['aud'])
def test_ASID_fetch(self): # Given debug_session = ApigeeDebugApi( config.REASONABLE_ADJUSTMENTS_PROXY_NAME) expected_value = '200000001390' # When Utils.send_request(self) # Then actual_asid = debug_session.get_apigee_variable( 'verifyapikey.VerifyAPIKey.CustomAttributes.asid') assert_that(expected_value).is_equal_to(actual_asid) actual_header_value = debug_session.get_apigee_header('NHSD-ASID') assert_that(expected_value).is_equal_to(actual_header_value)
def test_outgoing_request_contains_nhsd_correlation_id_header(self): # Given debug_session = ApigeeDebugApi( config.REASONABLE_ADJUSTMENTS_PROXY_NAME) # When Utils.send_request(self) # Then apigee_message_id = debug_session.get_apigee_variable('messageid') x_correlation_id_header = debug_session.get_apigee_header( 'x-correlation-id') x_request_id_header = debug_session.get_apigee_header('x-request-id') nhsd_correlation_id_header = debug_session.get_apigee_header( 'NHSD-Correlation-ID') expected_correlation_id_header = x_request_id_header + '.' + x_correlation_id_header + '.' + apigee_message_id assert_that(expected_correlation_id_header).is_equal_to( nhsd_correlation_id_header)
def test_missing_asid(self): # Given expected_status_code = 500 expected_response = { 'resourceType': 'OperationOutcome', 'issue': [{ 'severity': 'error', 'code': 'value', 'details': { 'coding': [{ 'system': 'https://fhir.nhs.uk/R4/CodeSystem/Spine-ErrorOrWarningCode', 'version': '1', 'code': 'INTERNAL_SERVER_ERROR', 'display': 'Unexpected internal server error' }] }, 'diagnostics': 'An internal server error occurred. Missing ASID. Contact us for assistance diagnosing this issue: https://digital.nhs.uk/developer/help-and-support quoting Message ID' }] } # When response = Utils.send_request(self) actual_response = json.loads(response.text) # Then assert_that(expected_status_code).is_equal_to(response.status_code) # assert_that(actual_response['message_id']).is_not_empty() assert_that( expected_response['resourceType']).is_equal_to_ignoring_case( actual_response['resourceType']) assert_that( expected_response['issue'][0]['code']).is_equal_to_ignoring_case( actual_response['issue'][0]['code']) assert_that( expected_response['issue'][0]['details']['coding'][0] ['code']).is_equal_to_ignoring_case( actual_response['issue'][0]['details']['coding'][0]['code']) assert_that( expected_response['issue'][0]['details']['coding'][0] ['display']).is_equal_to_ignoring_case( actual_response['issue'][0]['details']['coding'][0]['display']) assert_that(expected_response['issue'][0] ['diagnostics']).is_equal_to_ignoring_case( actual_response['issue'][0]['diagnostics'])
def test_missing_ods(self): # Given expected_status_code = 500 expected_response = { 'error': 'missing ODS', 'error_description': 'An internal server error occurred. Missing ODS. Contact us for assistance diagnosing this issue: https://digital.nhs.uk/developer/help-and-support quoting Message ID', } # When response = Utils.send_request(self) actual_response = json.loads(response.text) # Then assert_that(expected_status_code).is_equal_to(response.status_code) assert_that(actual_response['message_id']).is_not_empty() assert_that(expected_response['error']).is_equal_to_ignoring_case( actual_response['error']) assert_that( expected_response['error_description']).is_equal_to_ignoring_case( actual_response['error_description'])