davinci_crd_test_kit 0.14.0 → 0.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/{inferno_crd_server_suite.json.erb → client_against_inferno_crd_server_suite.json.erb} +0 -33
  3. data/config/presets/{ri_crd_request_generator.json.erb → client_against_ri_crd_request_generator.json.erb} +1 -14
  4. data/config/presets/client_v221_against_inferno_crd_server_suite.json.erb +84 -0
  5. data/config/presets/client_v221_against_ri_br_provider.json.erb +31 -0
  6. data/config/presets/{ri_crd_request_generator.json_v221.json.erb → client_v221_against_ri_crd_request_generator.json.erb} +1 -1
  7. data/config/presets/{inferno_crd_client_suite.json.erb → server_against_inferno_crd_client_suite.json.erb} +0 -43
  8. data/config/presets/{ri_crd_server.json.erb → server_against_ri_crd_server.json.erb} +1 -44
  9. data/config/presets/{inferno_crd_client_suite_v221.json.erb → server_v221_against_inferno_crd_client_suite.json.erb} +48 -45
  10. data/config/presets/{inferno_crd_client_suite_prefetch_subset_v221.json.erb → server_v221_against_inferno_crd_client_suite_prefetch_subset.json.erb} +0 -46
  11. data/config/presets/server_v221_against_inferno_g31_suite.json.erb +49 -0
  12. data/lib/davinci_crd_test_kit/client/cross_hook_helper.rb +26 -0
  13. data/lib/davinci_crd_test_kit/client/endpoints/custom_service_response.rb +7 -7
  14. data/lib/davinci_crd_test_kit/client/endpoints/gather_response_generation_data.rb +4 -1
  15. data/lib/davinci_crd_test_kit/client/endpoints/hook_request_endpoint.rb +70 -39
  16. data/lib/davinci_crd_test_kit/client/endpoints/mock_service_response.rb +26 -7
  17. data/lib/davinci_crd_test_kit/client/endpoints/mocked_card_responses/external_reference.json +1 -1
  18. data/lib/davinci_crd_test_kit/client/endpoints/mocked_card_responses/launch_smart_app.json +0 -7
  19. data/lib/davinci_crd_test_kit/client/endpoints/scenario_service_response.rb +54 -0
  20. data/lib/davinci_crd_test_kit/client/tagged_request_load_helper.rb +8 -27
  21. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/retrieve_jwks_test.rb +35 -23
  22. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_payload_test.rb +34 -21
  23. data/lib/davinci_crd_test_kit/client/v2.0.1/cds-services-v201.json +20 -20
  24. data/lib/davinci_crd_test_kit/client/v2.0.1/client_appointment_book_group.rb +12 -10
  25. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_discharge_group.rb +12 -10
  26. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_start_group.rb +12 -10
  27. data/lib/davinci_crd_test_kit/client/v2.0.1/client_hooks_group.rb +5 -5
  28. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_dispatch_group.rb +12 -10
  29. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_select_group.rb +12 -10
  30. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_sign_group.rb +12 -10
  31. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_coverage_information.rb +3 -36
  32. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_external_reference.rb +3 -36
  33. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_instructions.rb +3 -36
  34. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_fetched_data_test.rb +4 -13
  35. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_prefetch_equals_queried_test.rb +3 -13
  36. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/client_display_cards_attest.rb +3 -13
  37. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/inferno_response_validation.rb +3 -13
  38. data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_coverage_info_update_test.rb +1 -1
  39. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/attestation_instructions.rb +10 -0
  40. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_authorized_scope_attestation_test.rb +45 -0
  41. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_coverage_based_invocation_attestation_test.rb +44 -0
  42. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_data_element_expectations_attestation_test.rb +44 -0
  43. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_hook_invocation_logging_attestation_test.rb +43 -0
  44. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_must_support_exposure_attestation_test.rb +43 -0
  45. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_must_support_use_attestation_test.rb +41 -0
  46. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_order_sign_support_attestation_test.rb +42 -0
  47. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_prefetch_key_omission_attestation_test.rb +42 -0
  48. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_resource_identifiers_attestation_test.rb +43 -0
  49. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_response_case_distinction_attestation_test.rb +43 -0
  50. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_security_and_privacy_attestation_test.rb +43 -0
  51. data/lib/davinci_crd_test_kit/client/v2.2.1/attestations/client_workflow_integration_attestation_test.rb +44 -0
  52. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/decode_auth_token_test.rb +1 -1
  53. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/retrieve_jwks_test.rb +29 -18
  54. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_payload_test.rb +35 -22
  55. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-prefetch-subset-v221.json +47 -47
  56. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-v221.json +50 -50
  57. data/lib/davinci_crd_test_kit/client/v2.2.1/client_appointment_book_group.rb +24 -15
  58. data/lib/davinci_crd_test_kit/client/v2.2.1/client_attestations_group.rb +49 -0
  59. data/lib/davinci_crd_test_kit/client/v2.2.1/client_cross_hook_group.rb +22 -6
  60. data/lib/davinci_crd_test_kit/client/v2.2.1/client_cross_hook_interaction_group.rb +98 -0
  61. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_discharge_group.rb +19 -11
  62. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_start_group.rb +19 -11
  63. data/lib/davinci_crd_test_kit/client/v2.2.1/client_fhir_api_group.rb +14 -12
  64. data/lib/davinci_crd_test_kit/client/v2.2.1/client_hooks_group.rb +25 -5
  65. data/lib/davinci_crd_test_kit/client/v2.2.1/client_long_running_hook_group.rb +3 -2
  66. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_dispatch_group.rb +23 -15
  67. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_select_group.rb +19 -11
  68. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_sign_group.rb +23 -15
  69. data/lib/davinci_crd_test_kit/client/v2.2.1/client_registration_group.rb +6 -0
  70. data/lib/davinci_crd_test_kit/client/v2.2.1/client_scenarios_group.rb +26 -0
  71. data/lib/davinci_crd_test_kit/client/v2.2.1/client_self_pay_hook_group.rb +36 -0
  72. data/lib/davinci_crd_test_kit/client/v2.2.1/client_unknown_content_hook_group.rb +34 -0
  73. data/lib/davinci_crd_test_kit/client/v2.2.1/crd_client_suite.rb +24 -3
  74. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_card_must_support_coverage_information_test.rb +1 -1
  75. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_fhirpath_collection_as_comma_delimited_string_test.rb +4 -11
  76. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_hook_instances_unique_test.rb +1 -9
  77. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_location_address_propagation_test.rb +6 -2
  78. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_prefetch_complete_and_subset_test.rb +3 -12
  79. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/appointment_book_receive_request_test.rb +8 -89
  80. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/base_hook_invocation_receive_request_test.rb +163 -0
  81. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/cross_hooks_receive_request_test.rb +97 -0
  82. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_discharge_receive_request_test.rb +8 -90
  83. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_start_receive_request_test.rb +8 -90
  84. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_dispatch_receive_request_test.rb +8 -98
  85. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_select_receive_request_test.rb +8 -98
  86. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_sign_receive_request_test.rb +8 -98
  87. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_long_running_receive_request_test.rb +10 -2
  88. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_skip_long_running_attestation_test.rb +11 -6
  89. data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_service_registration_attestation_test.rb +2 -1
  90. data/lib/davinci_crd_test_kit/client/v2.2.1/self_pay/client_self_pay_no_request_test.rb +30 -0
  91. data/lib/davinci_crd_test_kit/client/v2.2.1/self_pay/client_self_pay_workflow_test.rb +55 -0
  92. data/lib/davinci_crd_test_kit/client/v2.2.1/unknown_content/client_unknown_content_attestation_test.rb +99 -0
  93. data/lib/davinci_crd_test_kit/client/v2.2.1/unknown_content/client_unknown_content_receive_request_test.rb +62 -0
  94. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_conformance_test.rb +1 -1
  95. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_coverage_verification_test.rb +10 -2
  96. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_data_fetch_verification_test.rb +1 -1
  97. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_granted_scopes_test.rb +1 -1
  98. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_complete_test.rb +7 -1
  99. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_profiles_test.rb +1 -1
  100. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_requested_version_test.rb +1 -1
  101. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_secured_transport_test.rb +1 -1
  102. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/client_display_cards_attest.rb +54 -21
  103. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/hook_response_support_coverage_information_test.rb +1 -1
  104. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/inferno_response_validation.rb +6 -3
  105. data/lib/davinci_crd_test_kit/cross_suite/cards_identification.rb +18 -0
  106. data/lib/davinci_crd_test_kit/cross_suite/logical_models_override_helper.rb +30 -13
  107. data/lib/davinci_crd_test_kit/cross_suite/prefetch_completeness_checker.rb +25 -11
  108. data/lib/davinci_crd_test_kit/cross_suite/prefetch_profile_validation.rb +2 -0
  109. data/lib/davinci_crd_test_kit/cross_suite/requests_logical_model_validation.rb +28 -28
  110. data/lib/davinci_crd_test_kit/cross_suite/response_logical_model_validation.rb +211 -43
  111. data/lib/davinci_crd_test_kit/cross_suite/tags.rb +7 -0
  112. data/lib/davinci_crd_test_kit/requirements/cds-hooks_3.0.0-ballot_requirements.xlsx +0 -0
  113. data/lib/davinci_crd_test_kit/requirements/davinci_crd_test_kit_requirements.csv +6 -2
  114. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_requirements_coverage.csv +107 -107
  115. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_v221_requirements_coverage.csv +101 -97
  116. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_requirements_coverage.csv +18 -18
  117. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_v221_requirements_coverage.csv +43 -39
  118. data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.2.1_requirements.xlsx +0 -0
  119. data/lib/davinci_crd_test_kit/server/jobs/invoke_hook.rb +3 -3
  120. data/lib/davinci_crd_test_kit/server/jobs/invoke_hook_no_special_requests.rb +17 -0
  121. data/lib/davinci_crd_test_kit/server/jobs/invoke_hook_with_bad_auth.rb +14 -0
  122. data/lib/davinci_crd_test_kit/server/server_abstract_invoke_hook_test.rb +24 -6
  123. data/lib/davinci_crd_test_kit/server/server_hook_helper.rb +2 -2
  124. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_server_suite.rb +1 -1
  125. data/lib/davinci_crd_test_kit/server/v2.0.1/server_hooks_group.rb +5 -5
  126. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_server_suite.rb +3 -0
  127. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_standard_prefetch_expressions_test.rb +165 -0
  128. data/lib/davinci_crd_test_kit/server/v2.2.1/interaction/server_invoke_hook_single_request_test.rb +22 -0
  129. data/lib/davinci_crd_test_kit/server/v2.2.1/server_appointment_book_group.rb +10 -102
  130. data/lib/davinci_crd_test_kit/server/v2.2.1/server_demonstrate_hook_response_group.rb +3 -2
  131. data/lib/davinci_crd_test_kit/server/v2.2.1/server_discovery_group.rb +2 -0
  132. data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_discharge_group.rb +10 -97
  133. data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_start_group.rb +10 -97
  134. data/lib/davinci_crd_test_kit/server/v2.2.1/server_hooks_group.rb +5 -5
  135. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_dispatch_group.rb +10 -103
  136. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_select_group.rb +12 -116
  137. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_sign_group.rb +12 -121
  138. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_response_group.rb +23 -0
  139. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/coverage_info_reason_test.rb +108 -0
  140. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/coverage_not_found_group.rb +116 -0
  141. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/no_active_coverage_group.rb +115 -0
  142. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/no_member_found_group.rb +117 -0
  143. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/technical_issues_group.rb +121 -0
  144. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/technical_issues_invoke_test.rb +22 -0
  145. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_context_validation_test.rb +1 -0
  146. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_optional_fields_validation_test.rb +1 -0
  147. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_required_fields_validation_test.rb +1 -0
  148. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/additional_orders_validation_test.rb +78 -35
  149. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_card_absence_test.rb +76 -0
  150. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_validation_test.rb +70 -124
  151. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +83 -39
  152. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/external_reference_card_validation_test.rb +59 -17
  153. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/form_completion_response_validation_test.rb +80 -45
  154. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/hook_request_resource_resolution.rb +37 -0
  155. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/instructions_card_received_test.rb +57 -6
  156. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/launch_smart_app_card_validation_test.rb +56 -17
  157. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/propose_alternate_request_card_validation_test.rb +52 -25
  158. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/service_response_validation_test.rb +17 -51
  159. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_cds_hooks_elements_test.rb +1 -1
  160. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_configuration_test.rb +1 -1
  161. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_context_test.rb +1 -1
  162. data/lib/davinci_crd_test_kit/version.rb +2 -2
  163. metadata +54 -16
  164. data/config/presets/inferno_crd_server_suite_v221.json.erb +0 -94
  165. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/card_optional_fields_validation_test.rb +0 -57
  166. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_received_test.rb +0 -65
@@ -4,12 +4,11 @@ require_relative 'verify_request/service_request_required_fields_validation_test
4
4
  require_relative 'verify_request/service_request_optional_fields_validation_test'
5
5
  require_relative 'verify_request/service_request_context_validation_test'
6
6
  require_relative 'verify_response/service_response_validation_test'
7
- require_relative 'verify_response/card_optional_fields_validation_test'
8
7
  require_relative 'verify_response/external_reference_card_validation_test'
9
8
  require_relative 'verify_response/launch_smart_app_card_validation_test'
10
9
  require_relative 'verify_response/instructions_card_received_test'
11
- require_relative 'verify_response/coverage_information_system_action_received_test'
12
10
  require_relative 'verify_response/coverage_information_system_action_validation_test'
11
+ require_relative 'verify_response/coverage_information_card_absence_test'
13
12
  require_relative 'verify_response/coverage_info_configuration_test'
14
13
  require_relative 'verify_response/propose_alternate_request_card_validation_test'
15
14
  require_relative 'verify_response/additional_orders_validation_test'
@@ -79,6 +78,7 @@ module DaVinciCRDTestKit
79
78
 
80
79
  group do
81
80
  title 'Requests'
81
+ simulation_verification
82
82
 
83
83
  test from: :crd_v221_service_request_required_fields_validation,
84
84
  config: {
@@ -102,84 +102,11 @@ module DaVinciCRDTestKit
102
102
  group do
103
103
  title 'Responses'
104
104
 
105
- test from: :crd_v221_service_response_validation,
106
- config: {
107
- outputs: {
108
- valid_cards: {
109
- name: :order_sign_valid_cards
110
- },
111
- valid_system_actions: {
112
- name: :order_sign_valid_system_actions
113
- }
114
- }
115
- }
116
- test from: :crd_v221_card_optional_fields_validation,
117
- config: {
118
- inputs: {
119
- valid_cards: {
120
- name: :order_sign_valid_cards
121
- }
122
- },
123
- outputs: {
124
- valid_cards_with_links: {
125
- name: :order_sign_valid_cards_with_links
126
- },
127
- valid_cards_with_suggestions: {
128
- name: :order_sign_valid_cards_with_suggestions
129
- }
130
- }
131
- }
132
- test from: :crd_v221_external_reference_card_validation,
133
- config: {
134
- inputs: {
135
- valid_cards_with_links: {
136
- name: :order_sign_valid_cards_with_links
137
- }
138
- }
139
- }
140
- test from: :crd_v221_launch_smart_app_card_validation,
141
- config: {
142
- inputs: {
143
- valid_cards_with_links: {
144
- name: :order_sign_valid_cards_with_links
145
- }
146
- }
147
- }
148
- test from: :crd_v221_valid_instructions_card_received,
149
- config: {
150
- inputs: {
151
- valid_cards: {
152
- name: :order_sign_valid_cards
153
- }
154
- }
155
- }
156
- test from: :crd_v221_coverage_info_system_action_received,
157
- config: {
158
- inputs: {
159
- valid_system_actions: {
160
- name: :order_sign_valid_system_actions
161
- }
162
- },
163
- outputs: {
164
- coverage_info: {
165
- name: :order_sign_coverage_info
166
- }
167
- }
168
- },
169
- verifies_requirements: [
170
- 'hl7.fhir.us.davinci-crd_2.2.1@resp-26'
171
- ]
172
- test from: :crd_v221_coverage_info_system_action_validation,
173
- config: {
174
- inputs: {
175
- coverage_info: {
176
- name: :order_sign_coverage_info
177
- }
178
- }
179
- },
180
- verifies_requirements: [
181
- 'hl7.fhir.us.davinci-crd_2.2.1@resp-25'
182
- ]
105
+ test from: :crd_v221_service_response_validation
106
+ test from: :crd_v221_external_reference_card_validation
107
+ test from: :crd_v221_launch_smart_app_card_validation
108
+ test from: :crd_v221_valid_instructions_card_received
109
+ test from: :crd_v221_coverage_info_system_action_validation
183
110
  test from: :crd_v221_all_responses_include_coverage_information,
184
111
  verifies_requirements: [
185
112
  'hl7.fhir.us.davinci-crd_2.2.1@hook-16',
@@ -190,47 +117,11 @@ module DaVinciCRDTestKit
190
117
  'hl7.fhir.us.davinci-crd_2.2.1@hook-39',
191
118
  'hl7.fhir.us.davinci-crd_2.2.1@resp-29'
192
119
  ]
193
- test from: :crd_v221_propose_alternate_request_card_validation,
194
- config: {
195
- inputs: {
196
- valid_cards_with_suggestions: {
197
- name: :order_sign_valid_cards_with_suggestions
198
- },
199
- contexts: {
200
- name: :order_sign_contexts
201
- }
202
- }
203
- }
204
- test from: :crd_v221_additional_orders_card_validation,
205
- config: {
206
- inputs: {
207
- valid_cards_with_suggestions: {
208
- name: :order_sign_valid_cards_with_suggestions
209
- }
210
- }
211
- }
212
- test from: :crd_v221_request_form_completion_response_validation,
213
- config: {
214
- inputs: {
215
- valid_system_actions: {
216
- name: :order_sign_valid_system_actions
217
- },
218
- valid_cards_with_suggestions: {
219
- name: :order_sign_valid_cards_with_suggestions
220
- }
221
- }
222
- }
223
- test from: :crd_v221_create_or_update_coverage_info_response_validation,
224
- config: {
225
- inputs: {
226
- valid_system_actions: {
227
- name: :order_sign_valid_system_actions
228
- },
229
- valid_cards_with_suggestions: {
230
- name: :order_sign_valid_cards_with_suggestions
231
- }
232
- }
233
- }
120
+ test from: :crd_v221_coverage_information_card_absence
121
+ test from: :crd_v221_propose_alternate_request_card_validation
122
+ test from: :crd_v221_additional_orders_card_validation
123
+ test from: :crd_v221_request_form_completion_response_validation
124
+ test from: :crd_v221_create_or_update_coverage_info_response_validation
234
125
  test from: :crd_v221_coverage_info_configuration
235
126
  test from: :crd_v221_unknown_configuration
236
127
  test from: :crd_v221_unknown_context
@@ -0,0 +1,23 @@
1
+ require_relative 'specific_coverage_responses/technical_issues_group'
2
+ require_relative 'specific_coverage_responses/no_member_found_group'
3
+ require_relative 'specific_coverage_responses/coverage_not_found_group'
4
+ require_relative 'specific_coverage_responses/no_active_coverage_group'
5
+
6
+ module DaVinciCRDTestKit
7
+ module V221
8
+ class SpecificCoverageResponseGroup < Inferno::TestGroup
9
+ title 'Specific Coverage Responses'
10
+ id :crd_v221_specific_coverage_responses
11
+
12
+ description <<~DESCRIPTION
13
+ This group verifies the ability of a server to return specific
14
+ coverage-info responses in particular situations.
15
+ DESCRIPTION
16
+
17
+ group from: :crd_v221_server_technical_issues_group
18
+ group from: :crd_v221_server_no_member_found_group
19
+ group from: :crd_v221_server_coverage_not_found_group
20
+ group from: :crd_v221_server_no_active_coverage_group
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,108 @@
1
+ module DaVinciCRDTestKit
2
+ module V221
3
+ # Users of this test need to set config options for coverage_code, reason_code, and optionally require_reason_text
4
+ class CoverageInfoReasonTest < Inferno::Test
5
+ id :crd_v221_coverage_info_reason
6
+ title 'Coverage Information responses have the expected coverage and reason codes'
7
+
8
+ description <<~DESCRIPTION
9
+ This test verifies that the Coverage Information responses received contain Coverage Information extensions
10
+ with the expected coverage and reason codes.
11
+ DESCRIPTION
12
+
13
+ input :coverage_info
14
+
15
+ COVERAGE_INFO_EXTENSION_URL =
16
+ 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/ext-coverage-information'.freeze
17
+
18
+ run do
19
+ coverage_info_actions = JSON.parse(coverage_info)
20
+
21
+ skip_if coverage_info_actions.blank?, 'No Coverage Information system actions received'
22
+
23
+ coverage_info_actions.each_with_index do |action, index|
24
+ coverage_info_extensions(action['resource']).each do |extension|
25
+ unless expected_coverage? extension
26
+ coverage_code = coverage_extension_value(extension)
27
+ add_message(
28
+ 'error',
29
+ "Coverage should be `#{expected_coverage_code}`, but found `#{coverage_code}` in action ##{index + 1}"
30
+ )
31
+ end
32
+
33
+ unless expected_reason? extension
34
+ reason_code =
35
+ reason_extension_values(extension)
36
+ &.map { |reason| "`#{reason}`" }
37
+ &.join(', ') || 'no reason'
38
+ add_message(
39
+ 'error',
40
+ "Coverage reason should be `#{expected_reason_code}`, but found #{reason_code} in action ##{index + 1}"
41
+ )
42
+
43
+ next
44
+ end
45
+
46
+ next unless require_reason_text?
47
+ next if reason_text?(extension)
48
+
49
+ add_message(
50
+ 'error',
51
+ "`#{expected_reason_code}` coverage reason contains no additional details in `text` field " \
52
+ "in action ##{index + 1}"
53
+ )
54
+ end
55
+ end
56
+
57
+ assert_no_error_messages(
58
+ "Not all coverage info extensions had `#{expected_coverage_code}` coverage " \
59
+ "with a reason of `#{expected_reason_code}`"
60
+ )
61
+ end
62
+
63
+ def coverage_info_extensions(resource)
64
+ resource['extension'].select { |extension| extension['url'] == COVERAGE_INFO_EXTENSION_URL }
65
+ end
66
+
67
+ def coverage_extension_value(coverage_info_extension)
68
+ coverage_info_extension['extension']
69
+ .find { |extension| extension['url'] == 'covered' }
70
+ &.dig('valueCode')
71
+ end
72
+
73
+ def expected_coverage?(coverage_info_extension)
74
+ coverage_extension_value(coverage_info_extension) == expected_coverage_code
75
+ end
76
+
77
+ def reason_extension_values(coverage_info_extension)
78
+ coverage_info_extension['extension']
79
+ .find { |extension| extension['url'] == 'reason' }
80
+ &.dig('valueCodeableConcept', 'coding')
81
+ &.map { |coding| coding['code'] }
82
+ end
83
+
84
+ def expected_reason?(coverage_info_extension)
85
+ reason_extension_values(coverage_info_extension)&.include? expected_reason_code
86
+ end
87
+
88
+ def reason_text?(coverage_info_extension)
89
+ coverage_info_extension['extension']
90
+ .find { |extension| extension['url'] == 'reason' }
91
+ &.dig('valueCodeableConcept', 'text')
92
+ &.present?
93
+ end
94
+
95
+ def expected_coverage_code
96
+ config.options[:expected_coverage_code]
97
+ end
98
+
99
+ def expected_reason_code
100
+ config.options[:expected_reason_code]
101
+ end
102
+
103
+ def require_reason_text?
104
+ config.options[:require_reason_text] || false
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,116 @@
1
+ require_relative '../interaction/server_invoke_hook_single_request_test'
2
+ require_relative 'coverage_info_reason_test'
3
+
4
+ module DaVinciCRDTestKit
5
+ module V221
6
+ class CoverageNotFoundGroup < Inferno::TestGroup
7
+ title 'Coverage Not Found'
8
+ id :crd_v221_server_coverage_not_found_group
9
+ description %(
10
+ This group of tests allows the system to demonstrate its ability to respond to a CRD Hook invocation
11
+ with a `not-covered` coverage determination when the patient can be resolved but coverage cannot be found
12
+ or cannot be resolved to a single coverage.
13
+
14
+ For these tests, provide a hook request body that represents a resolvable patient for whom the CRD Server
15
+ cannot find coverage or cannot resolve to a single coverage. The tests then verify that a Coverage
16
+ Information systemAction is received with `not-covered` coverage for `coverage-not-found` reason.
17
+ )
18
+
19
+ config options: { hook_name: COVERAGE_NOT_FOUND_TAG }
20
+ run_as_group
21
+
22
+ group do
23
+ title 'Interaction'
24
+
25
+ test from: :crd_v221_server_invoke_hook_single_request_test,
26
+ title: 'Inferno invokes the selected hook to elicit coverage not found response',
27
+ description: <<~DESCRIPTION,
28
+ This test initiates a POST request to a specified CDS Service using the JSON body provided
29
+ by the user. The request body should represent a resolvable patient for whom coverage cannot be
30
+ found or cannot be resolved to a single coverage.
31
+ DESCRIPTION
32
+ config: {
33
+ inputs: {
34
+ service_ids: {
35
+ name: :coverage_not_found_service_ids,
36
+ title: 'Service id to use for the "Coverage Not Found" test',
37
+ description: %(
38
+ If blank, Inferno will attempt to infer the service id to use by finding a service entry
39
+ in the Discovery response for the hook indicated in the provided request body. If it
40
+ cannot be inferred, the tests will be skipped.
41
+ )
42
+ },
43
+ service_request_bodies: {
44
+ name: :coverage_not_found_request_body,
45
+ title: 'Request body to use for the "Coverage Not Found" test',
46
+ description: %(
47
+ Provide a single JSON request body to submit for the hook invocation. The type of hook
48
+ invoked will be inferred based on the `hook` element in the request. The body should be
49
+ constructed so that it represents a resolvable patient for whom coverage cannot be found.
50
+ )
51
+ }
52
+ }
53
+ }
54
+ end
55
+
56
+ group do
57
+ title 'Requests'
58
+ simulation_verification
59
+
60
+ test from: :crd_v221_service_request_required_fields_validation,
61
+ config: {
62
+ outputs: {
63
+ contexts: {
64
+ name: :coverage_not_found_contexts
65
+ }
66
+ }
67
+ }
68
+ test from: :crd_v221_service_request_context_validation,
69
+ config: {
70
+ inputs: {
71
+ contexts: {
72
+ name: :coverage_not_found_contexts
73
+ },
74
+ request_body: {
75
+ name: :coverage_not_found_request_body
76
+ }
77
+ }
78
+ }
79
+ end
80
+
81
+ group do
82
+ title 'Responses'
83
+
84
+ test from: :crd_v221_service_response_validation
85
+ test from: :crd_v221_coverage_info_system_action_validation,
86
+ config: {
87
+ outputs: {
88
+ coverage_info: {
89
+ name: :coverage_not_found_coverage_info
90
+ }
91
+ }
92
+ }
93
+ test from: :crd_v221_coverage_info_reason,
94
+ title: 'Coverage Information responses have not-covered coverage for coverage-not-found reason',
95
+ description: <<~DESCRIPTION,
96
+ This test verifies that the Coverage Information responses received contain Coverage Information
97
+ extensions with `not-covered` coverage and a `coverage-not-found` reason.
98
+ DESCRIPTION
99
+ config: {
100
+ inputs: {
101
+ coverage_info: {
102
+ name: :coverage_not_found_coverage_info
103
+ }
104
+ },
105
+ options: {
106
+ expected_coverage_code: 'not-covered',
107
+ expected_reason_code: 'coverage-not-found'
108
+ }
109
+ },
110
+ verifies_requirements: [
111
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-45'
112
+ ]
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,115 @@
1
+ require_relative '../interaction/server_invoke_hook_single_request_test'
2
+ require_relative 'coverage_info_reason_test'
3
+
4
+ module DaVinciCRDTestKit
5
+ module V221
6
+ class NoActiveCoverageGroup < Inferno::TestGroup
7
+ title 'No Active Coverage'
8
+ id :crd_v221_server_no_active_coverage_group
9
+ description %(
10
+ This group of tests allows the system to demonstrate its ability to respond to a CRD Hook invocation
11
+ with a `not-covered` coverage determination when the patient can be resolved but does not have active
12
+ coverage.
13
+
14
+ For these tests, provide a hook request body that represents a resolvable patient without active
15
+ coverage. The tests then verify that a Coverage Information systemAction is received with `not-covered`
16
+ coverage for `no-active-coverage` reason.
17
+ )
18
+
19
+ config options: { hook_name: NO_ACTIVE_COVERAGE_TAG }
20
+ run_as_group
21
+
22
+ group do
23
+ title 'Interaction'
24
+
25
+ test from: :crd_v221_server_invoke_hook_single_request_test,
26
+ title: 'Inferno invokes the selected hook to elicit no active coverage response',
27
+ description: <<~DESCRIPTION,
28
+ This test initiates a POST request to a specified CDS Service using the JSON body provided
29
+ by the user. The request body should represent a resolvable patient without active coverage.
30
+ DESCRIPTION
31
+ config: {
32
+ inputs: {
33
+ service_ids: {
34
+ name: :no_active_coverage_service_ids,
35
+ title: 'Service id to use for the "No Active Coverage" test',
36
+ description: %(
37
+ If blank, Inferno will attempt to infer the service id to use by finding a service entry
38
+ in the Discovery response for the hook indicated in the provided request body. If it
39
+ cannot be inferred, the tests will be skipped.
40
+ )
41
+ },
42
+ service_request_bodies: {
43
+ name: :no_active_coverage_request_body,
44
+ title: 'Request body to use for the "No Active Coverage" test',
45
+ description: %(
46
+ Provide a single JSON request body to submit for the hook invocation. The type of hook
47
+ invoked will be inferred based on the `hook` element in the request. The body should be
48
+ constructed so that it represents a resolvable patient without active coverage.
49
+ )
50
+ }
51
+ }
52
+ }
53
+ end
54
+
55
+ group do
56
+ title 'Requests'
57
+ simulation_verification
58
+
59
+ test from: :crd_v221_service_request_required_fields_validation,
60
+ config: {
61
+ outputs: {
62
+ contexts: {
63
+ name: :no_active_coverage_contexts
64
+ }
65
+ }
66
+ }
67
+ test from: :crd_v221_service_request_context_validation,
68
+ config: {
69
+ inputs: {
70
+ contexts: {
71
+ name: :no_active_coverage_contexts
72
+ },
73
+ request_body: {
74
+ name: :no_active_coverage_request_body
75
+ }
76
+ }
77
+ }
78
+ end
79
+
80
+ group do
81
+ title 'Responses'
82
+
83
+ test from: :crd_v221_service_response_validation
84
+ test from: :crd_v221_coverage_info_system_action_validation,
85
+ config: {
86
+ outputs: {
87
+ coverage_info: {
88
+ name: :no_active_coverage_coverage_info
89
+ }
90
+ }
91
+ }
92
+ test from: :crd_v221_coverage_info_reason,
93
+ title: 'Coverage Information responses have not-covered coverage for no-active-coverage reason',
94
+ description: <<~DESCRIPTION,
95
+ This test verifies that the Coverage Information responses received contain Coverage Information
96
+ extensions with `not-covered` coverage and a `no-active-coverage` reason.
97
+ DESCRIPTION
98
+ config: {
99
+ inputs: {
100
+ coverage_info: {
101
+ name: :no_active_coverage_coverage_info
102
+ }
103
+ },
104
+ options: {
105
+ expected_coverage_code: 'not-covered',
106
+ expected_reason_code: 'no-active-coverage'
107
+ }
108
+ },
109
+ verifies_requirements: [
110
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-45'
111
+ ]
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,117 @@
1
+ require_relative '../interaction/server_invoke_hook_single_request_test'
2
+ require_relative 'coverage_info_reason_test'
3
+
4
+ module DaVinciCRDTestKit
5
+ module V221
6
+ class NoMemberFoundGroup < Inferno::TestGroup
7
+ title 'No Member Found'
8
+ id :crd_v221_server_no_member_found_group
9
+ description %(
10
+ This group of tests allows the system to demonstrate its ability to respond to a CRD Hook invocation
11
+ with a `not-covered` coverage determination when it is unable to resolve the patient for a
12
+ non-technical reason.
13
+
14
+ For these tests, provide a hook request body that represents a patient/member the CRD Server cannot
15
+ resolve for a non-technical reason.
16
+
17
+ The tests then verify that a Coverage Information systemAction is received with `not-covered` coverage
18
+ for `no-member-found` reasons.
19
+ )
20
+
21
+ config options: { hook_name: NO_MEMBER_FOUND_TAG }
22
+ run_as_group
23
+
24
+ group do
25
+ title 'Interaction'
26
+
27
+ test from: :crd_v221_server_invoke_hook_single_request_test,
28
+ title: 'Inferno invokes the selected hook to elicit unresolved member response',
29
+ description: <<~DESCRIPTION,
30
+ This test initiates a POST request to a specified CDS Service using the JSON body provided
31
+ by the user. The request body should represent an unrecognized member.
32
+ DESCRIPTION
33
+ config: {
34
+ inputs: {
35
+ service_ids: {
36
+ name: :no_member_found_service_ids,
37
+ title: 'Service id to use for the "No Member Found" test',
38
+ description: %(
39
+ If blank, Inferno will attempt to infer the service id to use by finding a service entry
40
+ in the Discovery response for the hook indicated in the provided request body. If it
41
+ cannot be inferred, the tests will be skipped.
42
+ )
43
+ },
44
+ service_request_bodies: {
45
+ name: :no_member_found_request_body,
46
+ title: 'Request body to use for the "No Member Found" test',
47
+ description: %(
48
+ Provide a single JSON request body to submit for the hook invocation. The type of hook
49
+ invoked will be inferred based on the `hook` element in the request. The body should be
50
+ constructed so that the CRD Server is unable to resolve the patient/member.
51
+ )
52
+ }
53
+ }
54
+ }
55
+ end
56
+
57
+ group do
58
+ title 'Requests'
59
+ simulation_verification
60
+
61
+ test from: :crd_v221_service_request_required_fields_validation,
62
+ config: {
63
+ outputs: {
64
+ contexts: {
65
+ name: :no_member_found_contexts
66
+ }
67
+ }
68
+ }
69
+ test from: :crd_v221_service_request_context_validation,
70
+ config: {
71
+ inputs: {
72
+ contexts: {
73
+ name: :no_member_found_contexts
74
+ },
75
+ request_body: {
76
+ name: :no_member_found_request_body
77
+ }
78
+ }
79
+ }
80
+ end
81
+
82
+ group do
83
+ title 'Responses'
84
+
85
+ test from: :crd_v221_service_response_validation
86
+ test from: :crd_v221_coverage_info_system_action_validation,
87
+ config: {
88
+ outputs: {
89
+ coverage_info: {
90
+ name: :no_member_found_coverage_info
91
+ }
92
+ }
93
+ }
94
+ test from: :crd_v221_coverage_info_reason,
95
+ title: 'Coverage Information responses have not-covered coverage for no-member-found reason',
96
+ description: <<~DESCRIPTION,
97
+ This test verifies that the Coverage Information responses received contain Coverage Information
98
+ extensions with `not-covered` coverage and a `no-member-found` reason.
99
+ DESCRIPTION
100
+ config: {
101
+ inputs: {
102
+ coverage_info: {
103
+ name: :no_member_found_coverage_info
104
+ }
105
+ },
106
+ options: {
107
+ expected_coverage_code: 'not-covered',
108
+ expected_reason_code: 'no-member-found'
109
+ }
110
+ },
111
+ verifies_requirements: [
112
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-44'
113
+ ]
114
+ end
115
+ end
116
+ end
117
+ end