davinci_dtr_test_kit 0.14.2 → 0.15.0

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 (158) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/full_ehr_postman_dinner_order_example_postman.json +19 -0
  3. data/config/presets/full_ehr_postman_respiratory_device_example.json +15 -0
  4. data/config/presets/light_ehr_ref_server_local.json +105 -0
  5. data/config/presets/light_ehr_ref_server_prod.json +85 -0
  6. data/config/presets/payer_server_adaptive_client_flow.json +37 -0
  7. data/config/presets/payer_server_adaptive_manual_flow.json +44 -0
  8. data/config/presets/payer_server_run_against_smart_app_tests.json +35 -0
  9. data/config/presets/smart_app_postman_dinner_order_example.json +44 -0
  10. data/config/presets/smart_app_postman_respiratory_device_example.json +43 -0
  11. data/lib/davinci_dtr_test_kit/auth_groups/token_validation_test.rb +1 -1
  12. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_expressions_test.rb +22 -0
  13. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_extensions_test.rb +19 -0
  14. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_libraries_test.rb +21 -0
  15. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_package_validation_test.rb +39 -0
  16. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_full_ehr_custom_static_workflow_group.rb +121 -0
  17. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_smart_app_custom_static_workflow_group.rb +91 -0
  18. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_completion_group.rb → dtr_adaptive_completion_group.rb} +4 -4
  19. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_followup_questions_group.rb → dtr_adaptive_followup_questions_group.rb} +4 -4
  20. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_next_question_request_test.rb → dtr_adaptive_next_question_request_test.rb} +2 -2
  21. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_next_question_request_validation_test.rb → dtr_adaptive_next_question_request_validation_test.rb} +2 -2
  22. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_next_question_retrieval_group.rb → dtr_adaptive_next_question_retrieval_group.rb} +8 -8
  23. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_response_validation_test.rb → dtr_adaptive_response_validation_test.rb} +3 -3
  24. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_full_ehr_adaptive_dinner_questionnaire_workflow_group.rb → dtr_full_ehr_adaptive_dinner_workflow_group.rb} +12 -12
  25. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group.rb → dtr_full_ehr_adaptive_initial_retrieval_group.rb} +10 -10
  26. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_full_ehr_adaptive_questionnaire_request_test.rb → dtr_full_ehr_adaptive_request_test.rb} +2 -2
  27. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_smart_app_questionnaire_workflow_group.rb → dtr_smart_app_adaptive_dinner_workflow_group.rb} +24 -18
  28. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_initial_retrieval_group.rb +24 -0
  29. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_smart_app_adaptive_questionnaire_request_test.rb → dtr_smart_app_adaptive_request_test.rb} +2 -2
  30. data/lib/davinci_dtr_test_kit/client_groups/dinner_static/{dtr_full_ehr_questionnaire_workflow_group.rb → dtr_full_ehr_static_dinner_workflow_group.rb} +13 -13
  31. data/lib/davinci_dtr_test_kit/client_groups/dinner_static/{dtr_smart_app_questionnaire_workflow_group.rb → dtr_smart_app_static_dinner_workflow_group.rb} +18 -13
  32. data/lib/davinci_dtr_test_kit/client_groups/{full_ehr/dtr_full_ehr_rendering_enabled_questions_attestation_test.rb → dinner_static/dtr_static_dinner_enabled_questions_attestation_test.rb} +2 -2
  33. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_launch_attestation_test.rb +8 -3
  34. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_attestation_test.rb +1 -1
  35. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_override_attestation_test.rb +1 -1
  36. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_package_request_test.rb +1 -1
  37. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_conformance_test.rb +6 -1
  38. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_correctness_test.rb +10 -22
  39. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_saving_questionnaire_response_group.rb +4 -4
  40. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_store_attestation_test.rb +1 -1
  41. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_smart_ehr_launch.rb +18 -0
  42. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/fhir_context_coverage_test.rb +42 -0
  43. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/fhir_context_references_test.rb +60 -0
  44. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/fhir_launch_context_test.rb +23 -0
  45. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_package_group.rb → respiratory/dtr_respiratory_questionnaire_package_group.rb} +5 -5
  46. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_resp_questionnaire_package_request_test.rb → respiratory/dtr_respiratory_questionnaire_package_request_test.rb} +2 -2
  47. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_response_group.rb → respiratory/dtr_respiratory_questionnaire_response_group.rb} +7 -7
  48. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_response_save_test.rb → respiratory/dtr_respiratory_questionnaire_response_save_test.rb} +2 -2
  49. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_rendering_attestation_test.rb → respiratory/dtr_respiratory_rendering_attestation_test.rb} +2 -2
  50. data/lib/davinci_dtr_test_kit/client_groups/respiratory/dtr_respiratory_rendering_group.rb +14 -0
  51. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_smart_app_questionnaire_workflow_group.rb → respiratory/dtr_smart_app_respiratory_workflow_group.rb} +8 -8
  52. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_prepopulation_attestation_test.rb +31 -0
  53. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_prepopulation_override_attestation_test.rb +35 -0
  54. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_package_request_validation_test.rb +1 -1
  55. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_basic_conformance_test.rb +8 -4
  56. data/lib/davinci_dtr_test_kit/client_groups/shared/{dtr_questionnaire_response_pre_population_test.rb → dtr_questionnaire_response_prepopulation_test.rb} +2 -2
  57. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_rendering_attestation_test.rb +30 -0
  58. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_attestation_test.rb +1 -1
  59. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_override_attestation_test.rb +1 -1
  60. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static/dtr_smart_app_dinner_questionnaire_package_request_test.rb → smart_app/dtr_smart_app_questionnaire_package_request_test.rb} +6 -6
  61. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_questionnaire_response_correctness_test.rb +28 -0
  62. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_questionnaire_response_save_test.rb +2 -2
  63. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_saving_questionnaire_response_group.rb +3 -7
  64. data/lib/davinci_dtr_test_kit/cql_test.rb +58 -0
  65. data/lib/davinci_dtr_test_kit/docs/dtr_light_ehr_suite_description_v201.md +9 -6
  66. data/lib/davinci_dtr_test_kit/dtr_full_ehr_suite.rb +19 -6
  67. data/lib/davinci_dtr_test_kit/dtr_light_ehr_suite.rb +42 -36
  68. data/lib/davinci_dtr_test_kit/dtr_payer_server_suite.rb +0 -2
  69. data/lib/davinci_dtr_test_kit/dtr_questionnaire_response_validation.rb +50 -4
  70. data/lib/davinci_dtr_test_kit/dtr_smart_app_suite.rb +9 -9
  71. data/lib/davinci_dtr_test_kit/endpoints/mock_authorization.rb +10 -2
  72. data/lib/davinci_dtr_test_kit/endpoints/mock_ehr.rb +17 -1
  73. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/questionnaire_package_endpoint.rb +7 -1
  74. data/lib/davinci_dtr_test_kit/fixtures.rb +6 -6
  75. data/lib/davinci_dtr_test_kit/igs/davinci_dtr_2.0.1.tgz +0 -0
  76. data/lib/davinci_dtr_test_kit/metadata.rb +104 -0
  77. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_libraries_test.rb +1 -1
  78. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_questionnaire_expressions_test.rb +1 -1
  79. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_questionnaire_extensions_test.rb +1 -1
  80. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_bundles_validation_test.rb +1 -1
  81. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_search_validation_test.rb +1 -1
  82. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_validation_test.rb +4 -15
  83. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_static_group.rb +1 -1
  84. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_libraries_test.rb +1 -1
  85. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_questionnaire_expressions_test.rb +1 -1
  86. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_questionnaire_extensions_test.rb +1 -1
  87. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_request_test.rb +1 -1
  88. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_response_validation_test.rb +4 -15
  89. data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_must_support_test.rb +46 -0
  90. data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_read.rb +6 -3
  91. data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_validation.rb +9 -8
  92. data/lib/davinci_dtr_test_kit/profiles/communication_request/metadata.yml +135 -0
  93. data/lib/davinci_dtr_test_kit/profiles/communication_request_group.rb +9 -0
  94. data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_must_support_test.rb +54 -0
  95. data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_read.rb +5 -3
  96. data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_validation.rb +9 -8
  97. data/lib/davinci_dtr_test_kit/profiles/coverage/metadata.yml +133 -0
  98. data/lib/davinci_dtr_test_kit/profiles/coverage_group.rb +8 -0
  99. data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_must_support_test.rb +45 -0
  100. data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_read.rb +6 -3
  101. data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_validation.rb +9 -8
  102. data/lib/davinci_dtr_test_kit/profiles/device_request/metadata.yml +130 -0
  103. data/lib/davinci_dtr_test_kit/profiles/device_request_group.rb +9 -0
  104. data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_must_support_test.rb +58 -0
  105. data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_read.rb +6 -3
  106. data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_validation.rb +9 -8
  107. data/lib/davinci_dtr_test_kit/profiles/encounter/metadata.yml +169 -0
  108. data/lib/davinci_dtr_test_kit/profiles/encounter_group.rb +9 -0
  109. data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_must_support_test.rb +50 -0
  110. data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_read.rb +6 -3
  111. data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_validation.rb +9 -8
  112. data/lib/davinci_dtr_test_kit/profiles/medication_request/metadata.yml +159 -0
  113. data/lib/davinci_dtr_test_kit/profiles/medication_request_group.rb +9 -0
  114. data/lib/davinci_dtr_test_kit/profiles/nutrition_order/metadata.yml +94 -0
  115. data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_must_support_test.rb +45 -0
  116. data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_read.rb +6 -3
  117. data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_validation.rb +9 -8
  118. data/lib/davinci_dtr_test_kit/profiles/nutrition_order_group.rb +9 -0
  119. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_context_search.rb +3 -1
  120. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_create.rb +1 -0
  121. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_must_support_test.rb +54 -0
  122. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_patient_search.rb +3 -1
  123. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_read.rb +2 -1
  124. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_update.rb +1 -0
  125. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_validation.rb +1 -1
  126. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response_group.rb +11 -1
  127. data/lib/davinci_dtr_test_kit/profiles/service_request/metadata.yml +140 -0
  128. data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_must_support_test.rb +47 -0
  129. data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_read.rb +6 -3
  130. data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_validation.rb +9 -8
  131. data/lib/davinci_dtr_test_kit/profiles/service_request_group.rb +9 -0
  132. data/lib/davinci_dtr_test_kit/profiles/task/metadata.yml +165 -0
  133. data/lib/davinci_dtr_test_kit/profiles/task/task_create.rb +1 -0
  134. data/lib/davinci_dtr_test_kit/profiles/task/task_must_support_test.rb +46 -0
  135. data/lib/davinci_dtr_test_kit/profiles/task/task_read.rb +6 -3
  136. data/lib/davinci_dtr_test_kit/profiles/task/task_update.rb +1 -0
  137. data/lib/davinci_dtr_test_kit/profiles/task/task_validation.rb +9 -8
  138. data/lib/davinci_dtr_test_kit/profiles/task_group.rb +11 -1
  139. data/lib/davinci_dtr_test_kit/profiles/vision_prescription/metadata.yml +107 -0
  140. data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_must_support_test.rb +54 -0
  141. data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_read.rb +6 -3
  142. data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_validation.rb +9 -8
  143. data/lib/davinci_dtr_test_kit/profiles/vision_prescription_group.rb +9 -0
  144. data/lib/davinci_dtr_test_kit/read_test.rb +5 -0
  145. data/lib/davinci_dtr_test_kit/requirements/davinci-dtr-test-kit_out_of_scope_requirements.csv +13 -0
  146. data/lib/davinci_dtr_test_kit/requirements/davinci-dtr-test-kit_requirements.csv +374 -0
  147. data/lib/davinci_dtr_test_kit/requirements/generated/davinci-dtr-test-kit_requirements_coverage.csv +372 -0
  148. data/lib/davinci_dtr_test_kit/urls.rb +1 -0
  149. data/lib/davinci_dtr_test_kit/version.rb +2 -1
  150. data/lib/davinci_dtr_test_kit.rb +2 -0
  151. data/lib/inferno_requirements_tools/ext/inferno_core/runnable.rb +22 -0
  152. data/lib/inferno_requirements_tools/rake/rakefile_template +31 -0
  153. data/lib/inferno_requirements_tools/tasks/requirements_coverage.rb +284 -0
  154. data/lib/requirements_config.yaml +25 -0
  155. metadata +88 -37
  156. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_initial_retrieval_group.rb +0 -24
  157. data/lib/davinci_dtr_test_kit/client_groups/resp_assist_device/dtr_questionnaire_rendering_group.rb +0 -14
  158. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_rendering_enabled_questions_attestation_test.rb +0 -30
@@ -1,7 +1,8 @@
1
1
  require_relative 'auth_groups/oauth2_authentication_group'
2
- require_relative 'client_groups/resp_assist_device/dtr_smart_app_questionnaire_workflow_group'
3
- require_relative 'client_groups/dinner_static/dtr_smart_app_questionnaire_workflow_group'
4
- require_relative 'client_groups/dinner_adaptive/dtr_smart_app_questionnaire_workflow_group'
2
+ require_relative 'client_groups/respiratory/dtr_smart_app_respiratory_workflow_group'
3
+ require_relative 'client_groups/dinner_static/dtr_smart_app_static_dinner_workflow_group'
4
+ require_relative 'client_groups/dinner_adaptive/dtr_smart_app_adaptive_dinner_workflow_group'
5
+ require_relative 'client_groups/custom_static/dtr_smart_app_custom_static_workflow_group'
5
6
  require_relative 'endpoints/cors'
6
7
  require_relative 'endpoints/mock_authorization'
7
8
  require_relative 'endpoints/mock_authorization/authorize_endpoint'
@@ -21,8 +22,6 @@ module DaVinciDTRTestKit
21
22
  title 'Da Vinci DTR SMART App Test Suite'
22
23
  description File.read(File.join(__dir__, 'docs', 'dtr_smart_app_suite_description_v201.md'))
23
24
 
24
- version VERSION
25
-
26
25
  links [
27
26
  {
28
27
  label: 'Report Issue',
@@ -67,7 +66,7 @@ module DaVinciDTRTestKit
67
66
  suite_endpoint :post, NEXT_PATH, MockPayer::NextQuestionEndpoint
68
67
 
69
68
  # EHR
70
- route(:get, '/fhir/metadata', MockEHR.method(:metadata))
69
+ route(:get, METADATA_PATH, MockEHR.method(:metadata))
71
70
  suite_endpoint :post, QUESTIONNAIRE_RESPONSE_PATH, MockEHR::QuestionnaireResponseEndpoint
72
71
  suite_endpoint :get, FHIR_RESOURCE_PATH, MockEHR::FHIRGetEndpoint
73
72
  suite_endpoint :get, FHIR_SEARCH_PATH, MockEHR::FHIRGetEndpoint
@@ -90,8 +89,8 @@ module DaVinciDTRTestKit
90
89
  Tests in this group validate that the client can complete basic DTR workflows
91
90
  )
92
91
 
93
- group from: :dtr_smart_app_static_dinner_questionnaire_workflow
94
- group from: :dtr_smart_app_adaptive_dinner_questionnaire_workflow
92
+ group from: :dtr_smart_app_custom_static_workflow
93
+ group from: :dtr_smart_app_adaptive_dinner_workflow
95
94
  end
96
95
  group do
97
96
  id :dtr_smart_app_questionnaire_functionality
@@ -100,7 +99,8 @@ module DaVinciDTRTestKit
100
99
  Tests in this group validate that the client can complete additional DTR workflows
101
100
  covering additional must support features of questionnaires.
102
101
  )
103
- group from: :dtr_smart_app_questionnaire_workflow
102
+ group from: :dtr_smart_app_resp_workflow
103
+ group from: :dtr_smart_app_static_dinner_workflow
104
104
  end
105
105
  end
106
106
  end
@@ -62,8 +62,8 @@ module DaVinciDTRTestKit
62
62
  base_url = env_base_url(env, OPENID_CONFIG_PATH)
63
63
  response_body = {
64
64
  issuer: base_url + FHIR_BASE_PATH,
65
- authorization_endpoint: base_url + EHR_AUTHORIZE_PATH,
66
- token_endpoint: base_url + EHR_TOKEN_PATH,
65
+ authorization_endpoint: authorization_endpoint(base_url),
66
+ token_endpoint: token_endpoint(base_url),
67
67
  jwks_uri: base_url + JKWS_PATH,
68
68
  response_types_supported: ['id_token'],
69
69
  subject_types_supported: ['public'],
@@ -79,5 +79,13 @@ module DaVinciDTRTestKit
79
79
  path.gsub!(%r{#{endpoint_path}(/)?}, '')
80
80
  "#{protocol}://#{host + path}"
81
81
  end
82
+
83
+ def authorization_endpoint(base_url)
84
+ base_url + EHR_AUTHORIZE_PATH
85
+ end
86
+
87
+ def token_endpoint(base_url)
88
+ base_url + EHR_TOKEN_PATH
89
+ end
82
90
  end
83
91
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../endpoints/mock_authorization'
4
+
3
5
  module DaVinciDTRTestKit
4
6
  module MockEHR
5
7
  RESOURCE_SERVER_BASE = ENV.fetch('FHIR_REFERENCE_SERVER')
@@ -13,9 +15,23 @@ module DaVinciDTRTestKit
13
15
  client
14
16
  end
15
17
 
16
- def metadata(_env)
18
+ def metadata(env)
17
19
  cs = resource_server_client.capability_statement
18
20
  if cs.present?
21
+ # Overwrite the OAuth URIs returned by the reference server to point to the suite endpoints instead
22
+ oauth_uris_url = 'http://fhir-registry.smarthealthit.org/StructureDefinition/oauth-uris'
23
+ base_url = MockAuthorization.env_base_url(env, METADATA_PATH)
24
+ sec_ext = cs.rest.first&.security&.extension&.delete_if { |e| e.url == oauth_uris_url }
25
+ sec_ext&.push(
26
+ FHIR::Extension.new(
27
+ url: oauth_uris_url,
28
+ extension: [
29
+ FHIR::Extension.new(url: 'authorize', valueUri: MockAuthorization.authorization_endpoint(base_url)),
30
+ FHIR::Extension.new(url: 'token', valueUri: MockAuthorization.token_endpoint(base_url))
31
+ ]
32
+ )
33
+ )
34
+
19
35
  [200, { 'Content-Type' => 'application/fhir+json', 'Access-Control-Allow-Origin' => '*' }, [cs.to_json]]
20
36
  else
21
37
  [500, { 'Access-Control-Allow-Origin' => '*' }, ['Unexpected error occurred while fetching metadata']]
@@ -19,7 +19,13 @@ module DaVinciDTRTestKit
19
19
  response.status = 200
20
20
  response.format = 'application/fhir+json'
21
21
  response.headers['Access-Control-Allow-Origin'] = '*'
22
- response.body = build_questionnaire_package_response.to_json
22
+ response.body = custom_response.presence || build_questionnaire_package_response.to_json
23
+ end
24
+
25
+ def custom_response
26
+ @custom_response ||= JSON.parse(result.input_json)
27
+ .find { |input| input['name'].include?('custom_questionnaire_package_response') }
28
+ &.dig('value')
23
29
  end
24
30
 
25
31
  def update_result
@@ -8,7 +8,7 @@ module DaVinciDTRTestKit
8
8
  FIXTURE_CONFIG = [
9
9
  {
10
10
  group_ids: [
11
- 'dtr_smart_app_questionnaire_workflow',
11
+ 'dtr_smart_app_resp_workflow',
12
12
  'dtr_full_ehr_questionnaire_workflow'
13
13
  ],
14
14
  questionnaire_package: File.join('respiratory_assist_device', 'questionnaire_package.json'),
@@ -16,23 +16,23 @@ module DaVinciDTRTestKit
16
16
  },
17
17
  {
18
18
  group_ids: [
19
- 'dtr_smart_app_static_dinner_questionnaire_workflow',
20
- 'dtr_full_ehr_static_dinner_questionnaire_workflow'
19
+ 'dtr_smart_app_static_dinner_workflow',
20
+ 'dtr_full_ehr_static_dinner_workflow'
21
21
  ],
22
22
  questionnaire_package: File.join('dinner_static', 'questionnaire_dinner_order_static.json'),
23
23
  questionnaire_response: File.join('dinner_static', 'questionnaire_response_dinner_order_static.json')
24
24
  },
25
25
  {
26
26
  group_ids: [
27
- 'dtr_full_ehr_adaptive_questionnaire_retrieval',
28
- 'dtr_smart_app_adaptive_questionnaire_retrieval'
27
+ 'dtr_full_ehr_adaptive_retrieval',
28
+ 'dtr_smart_app_adaptive_retrieval'
29
29
  ],
30
30
  questionnaire_package: File.join('dinner_adaptive', 'questionnaire_dinner_order_adaptive.json'),
31
31
  next_question: File.join('dinner_adaptive', 'dinner_order_adaptive_next_question_initial.json')
32
32
  },
33
33
  {
34
34
  group_ids: [
35
- 'dtr_adaptive_questionnaire_followup_questions'
35
+ 'dtr_adaptive_followup_questions'
36
36
  ],
37
37
  next_question: {
38
38
  bean_burrito: File.join('dinner_adaptive', 'dinner_order_adaptive_next_question_burrito.json'),
@@ -0,0 +1,104 @@
1
+ require_relative 'version'
2
+
3
+ module DaVinciDTRTestKit
4
+ class Metadata < Inferno::TestKit
5
+ id :davinci_dtr_test_kit
6
+ title 'DDa Vinci Documentation Templates and Rules (DTR) Test Kit'
7
+ description <<~DESCRIPTION
8
+ The Da Vinci Documentation Templates and Rules (DTR) Test Kit validates
9
+ the conformance of DTR SMART app client and payer server implementations to
10
+ [version 2.0.1 of the Da Vinci DTR Implementation
11
+ Guide](https://hl7.org/fhir/us/davinci-dtr/STU2/).
12
+
13
+ <!-- break -->
14
+
15
+ ## Status
16
+
17
+ These tests are a **DRAFT** intended to allow DTR implementers to perform
18
+ preliminary checks of their implementations against the DTR IG requirements and
19
+ provide feedback on the tests. Future versions of these tests may validate other
20
+ requirements and may change how these are tested.
21
+
22
+ ## Test Scope and Limitations
23
+
24
+ The DTR Test Kit includes suites for the following DTR actors:
25
+ - **DTR Payer Server**: verifies the ability of a payer server to respond
26
+ to requests for questionnaires.
27
+ - **DTR SMART App**: verifies the ability of a SMART app to launch, get questionnaires
28
+ from a payer server, render them, and allow users to complete them.
29
+ - **Full DTR EHR**: verifies the ability of a EHR to get questionnaires
30
+ from a payer server, render them, and allow users to complete them.
31
+ - **Light DTR EHR**: verifies the ability of a EHR to launch a DTR SMART
32
+ app and respond to FHIR data gathering requests.
33
+
34
+ Documentation of the current tests and their limitations can be found in each
35
+ suite's description when the tests are run and can also be viewed in the
36
+ source code:
37
+ - [SMART App Test Suite Limitations](https://github.com/inferno-framework/davinci-dtr-test-kit/blob/main/lib/davinci_dtr_test_kit/docs/dtr_smart_app_suite_description_v201.md)
38
+ - [Payer Server Test Suite Limitations](https://github.com/inferno-framework/davinci-dtr-test-kit/blob/main/lib/davinci_dtr_test_kit/docs/dtr_payer_server_suite_description_v201.md)
39
+ - [Full DTR EHR Test Suite Limitations](https://github.com/inferno-framework/davinci-dtr-test-kit/blob/main/lib/davinci_dtr_test_kit/docs/dtr_full_ehr_suite_description_v201.md)
40
+ - [Light DTR EHR Test Suite Limitations](https://github.com/inferno-framework/davinci-dtr-test-kit/blob/main/lib/davinci_dtr_test_kit/docs/dtr_light_ehr_suite_description_v201.md)
41
+
42
+ ### Test Scope
43
+
44
+ To validate the behavior of the system under test, Inferno will act as an
45
+ exchange partner. Specifically,
46
+
47
+ - **When testing a DTR SMART app client**: Inferno will simulate both a payer
48
+ server that can return questionnaires and a Light DTR EHR that can respond
49
+ to queries for clinical data used to pre-populate questionnaire responses.
50
+ Inferno uses the SMART App Launch framework to establish a connection with
51
+ the app under test, either in EHR Launch or Standalone Launch mode. The app
52
+ will be expected to initiate requests to Inferno and demonstrate its ability
53
+ to react to the returned responses. Over the course of these interactions,
54
+ Inferno will seek to observe the conformant completion of a questionnaire
55
+ including pre-population, as well as the ability of the app to correctly
56
+ render the questionnaire and allow users to interact with it.
57
+ - **When testing a DTR payer server**: Inferno will simulate a DTR app
58
+ by requesting questionnaires from the server under test. The server
59
+ will be expected to respond to these requests from Inferno. Over the course
60
+ of these interactions, Inferno will seek to observe the ability of the
61
+ server under test to return conformant questionnaires.
62
+ - **When testing a Full DTR EHR client**: Inferno will simulate a payer
63
+ server that can return questionnaires. The EHR will be expected to initiate
64
+ requests to Inferno and demonstrate its ability to react to the returned
65
+ responses. Over the course of these interactions,
66
+ Inferno will seek to observe the conformant completion of a questionnaire
67
+ including fetch, as well as the ability of the app to correctly
68
+ render the questionnaire and allow users to interact with it.
69
+ - **When testing a Light DTR EHR server**: Inferno will simulate a DTR SMART app
70
+ that tested servers can launch and that will request FHIR data from and create
71
+ and update QuestionnaireResponse and Task instances on the server under test.
72
+ Over the course of these interactions, Inferno will seek to observe the ability of the
73
+ server under test to conformantly serve as a FHIR server for a DTR SMART App.
74
+
75
+ ### Known Limitations
76
+
77
+ - **SMART app tests**:
78
+ - Some questionnaire features, including adaptive questionnaires, are not yet tested.
79
+ - Inferno uses a single FHIR endpoint to simulate both the payer and the EHR.
80
+ - **Payer server tests**:
81
+ - Inferno checks that CQL is used for pre-population in the questionnaires returned by the
82
+ payer server, but does not currently validate the correctness or executability of that CQL.
83
+ - **Full EHR tests**:
84
+ - Some questionnaire features are not yet tested.
85
+ - Non-standard approach to accessing QuestionnaireResponse instances for validation.
86
+ - **Light EHR tests**:
87
+ - `fhirContext` not tested as a part of the Light EHR's SMART App launch process.
88
+
89
+ ## Reporting Issues
90
+
91
+ Please report any issues with this set of tests in the [GitHub
92
+ Issues](https://github.com/inferno-framework/davinci-dtr-test-kit/issues)
93
+ section of the
94
+ [open-source code repository](https://github.com/inferno-framework/davinci-dtr-test-kit).
95
+ DESCRIPTION
96
+ suite_ids [:dtr_payer_server, :dtr_smart_app, :dtr_full_ehr, :dtr_light_ehr]
97
+ tags ['Da Vinci', 'DTR']
98
+ last_updated LAST_UPDATED
99
+ version VERSION
100
+ maturity 'Low'
101
+ authors ['Karl Naden', 'Tom Strassner', 'Robert Passas', 'Vanessa Fotso', 'Elsa Perelli']
102
+ repo 'https://github.com/inferno-framework/davinci-dtr-test-kit'
103
+ end
104
+ end
@@ -12,7 +12,7 @@ module DaVinciDTRTestKit
12
12
 
13
13
  run do
14
14
  skip_if retrieval_method == 'Static', 'Performing only static flow tests - only one flow is required.'
15
- skip_if scratch[:adaptive_questionnaire_bundles].nil?, 'No questionnaire bundle returned.'
15
+ skip_if scratch[:adaptive_questionnaire_bundles].blank?, 'No questionnaire bundle returned.'
16
16
  check_libraries(scratch[:adaptive_questionnaire_bundles])
17
17
  end
18
18
  end
@@ -12,7 +12,7 @@ module DaVinciDTRTestKit
12
12
 
13
13
  run do
14
14
  skip_if retrieval_method == 'Static', 'Performing only static flow tests - only one flow is required.'
15
- skip_if scratch[:adaptive_questionnaire_bundles].nil?, 'No questionnaire bundle returned.'
15
+ skip_if scratch[:adaptive_questionnaire_bundles].blank?, 'No questionnaire bundle returned.'
16
16
  questionnaires = extract_questionnaires_from_bundles(scratch[:adaptive_questionnaire_bundles])
17
17
  verify_questionnaire_items(questionnaires)
18
18
  scratch[:adaptive_questionnaire_bundles] = nil
@@ -12,7 +12,7 @@ module DaVinciDTRTestKit
12
12
 
13
13
  run do
14
14
  skip_if retrieval_method == 'Static', 'Performing only static flow tests - only one flow is required.'
15
- skip_if scratch[:adaptive_questionnaire_bundles].nil?, 'No questionnaire bundle returned.'
15
+ skip_if scratch[:adaptive_questionnaire_bundles].blank?, 'No questionnaire bundle returned.'
16
16
  questionnaires = extract_questionnaires_from_bundles(scratch[:adaptive_questionnaire_bundles])
17
17
  verify_questionnaire_extensions(questionnaires)
18
18
  end
@@ -22,7 +22,7 @@ module DaVinciDTRTestKit
22
22
  skip_if retrieval_method == 'Static', 'Performing only static flow tests - only one flow is required.'
23
23
  test_passed = true
24
24
  profile_url = 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/DTR-QPackageBundle|2.0.1'
25
- assert !scratch[:adaptive_questionnaire_bundles].nil?, 'No resources to validate.'
25
+ assert scratch[:adaptive_questionnaire_bundles].present?, 'No resources to validate.'
26
26
  scratch[:adaptive_questionnaire_bundles].each_with_index do |bundle, index|
27
27
  resource_is_valid = validate_resource(bundle, :bundle, profile_url, index)
28
28
  test_passed = false unless resource_is_valid
@@ -22,7 +22,7 @@ module DaVinciDTRTestKit
22
22
  skip_if retrieval_method == 'Static', 'Performing only static flow tests - only one flow is required.'
23
23
  test_passed = true
24
24
  profile_url = 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search|2.0.1'
25
- assert !scratch[:adaptive_questionnaire_bundles].nil?, 'No questionnaire bundles to validate.'
25
+ assert scratch[:adaptive_questionnaire_bundles].present?, 'No questionnaire bundles to validate.'
26
26
 
27
27
  questionnaires = scratch[:adaptive_questionnaire_bundles].filter_map do |bundle|
28
28
  bundle.entry&.filter_map { |entry| entry.resource if entry.resource&.resourceType == 'Questionnaire' }
@@ -1,7 +1,9 @@
1
1
  require_relative '../validation_test'
2
+ require_relative '../cql_test'
2
3
  module DaVinciDTRTestKit
3
4
  class PayerAdaptiveFormQuestionnaireResponseTest < Inferno::Test
4
5
  include DaVinciDTRTestKit::ValidationTest
6
+ include DaVinciDTRTestKit::CQLTest
5
7
  id :payer_server_adaptive_response_validation_test
6
8
  title 'Validate that the adaptive response conforms to the DTR Questionnaire Package operation definition'
7
9
  # output :questionnaire_response
@@ -38,21 +40,8 @@ module DaVinciDTRTestKit
38
40
  assert_response_status([200, 201], response: req.response)
39
41
 
40
42
  resource = FHIR.from_contents(req.response_body)
41
- if resource&.resourceType == 'Parameters'
42
- scratch[:adaptive_questionnaire_bundles] = resource.parameter.filter_map do |param|
43
- param.resource if param.resource&.resourceType == 'Bundle'
44
- end
45
- assert_valid_resource(resource:,
46
- profile_url: 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-output-parameters|2.0.1')
47
- questionnaire_bundle = resource.parameter.find { |param| param.resource.resourceType == 'Bundle' }&.resource
48
- assert questionnaire_bundle, 'No questionnaire bundle found in the response'
49
- elsif resource&.resourceType == 'Bundle'
50
- scratch[:adaptive_questionnaire_bundles] = [resource]
51
- assert_valid_resource(resource:,
52
- profile_url: 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/DTR-QPackageBundle|2.0.1')
53
- else
54
- assert(false, "Unexpected resourceType: #{resource&.resourceType}. Expected Parameters or Bundle")
55
- end
43
+
44
+ perform_questionnaire_package_validation(resource, 'adaptive')
56
45
  end
57
46
  end
58
47
  end
@@ -43,7 +43,7 @@ module DaVinciDTRTestKit
43
43
  :access_token,
44
44
  :initial_static_questionnaire_request
45
45
 
46
- test from: :dtr_v201_payer_static_questionnaire_request_test, receives_request: :static_questionnaire_request
46
+ test from: :dtr_v201_payer_static_request_test, receives_request: :static_questionnaire_request
47
47
  test from: :dtr_v201_payer_static_form_request_validation_test
48
48
  test from: :dtr_v201_payer_static_form_response_test
49
49
  test from: :dtr_v201_payer_static_form_libraries_test
@@ -12,7 +12,7 @@ module DaVinciDTRTestKit
12
12
 
13
13
  run do
14
14
  skip_if retrieval_method == 'Adaptive', 'Performing only adaptive flow tests - only one flow is required.'
15
- skip_if scratch[:static_questionnaire_bundles].nil?, 'No questionnaire bundle returned.'
15
+ skip_if scratch[:static_questionnaire_bundles].blank?, 'No questionnaire bundle returned.'
16
16
  check_libraries(scratch[:static_questionnaire_bundles])
17
17
  end
18
18
  end
@@ -12,7 +12,7 @@ module DaVinciDTRTestKit
12
12
 
13
13
  run do
14
14
  skip_if retrieval_method == 'Adaptive', 'Performing only adaptive flow tests - only one flow is required.'
15
- skip_if scratch[:static_questionnaire_bundles].nil?, 'No questionnaire bundle returned.'
15
+ skip_if scratch[:static_questionnaire_bundles].blank?, 'No questionnaire bundle returned.'
16
16
  questionnaires = extract_questionnaires_from_bundles(scratch[:static_questionnaire_bundles])
17
17
  verify_questionnaire_items(questionnaires, final_cql_test: true)
18
18
  scratch[:static_questionnaire_bundles] = nil
@@ -12,7 +12,7 @@ module DaVinciDTRTestKit
12
12
 
13
13
  run do
14
14
  skip_if retrieval_method == 'Adaptive', 'Performing only adaptive flow tests - only one flow is required.'
15
- skip_if scratch[:static_questionnaire_bundles].nil?, 'No questionnaire bundle returned.'
15
+ skip_if scratch[:static_questionnaire_bundles].blank?, 'No questionnaire bundle returned.'
16
16
  questionnaires = extract_questionnaires_from_bundles(scratch[:static_questionnaire_bundles])
17
17
  verify_questionnaire_extensions(questionnaires)
18
18
  end
@@ -7,7 +7,7 @@ module DaVinciDTRTestKit
7
7
  description %(
8
8
  Inferno will validate questionnaires returned by the payer server.
9
9
  )
10
- id :dtr_v201_payer_static_questionnaire_request_test
10
+ id :dtr_v201_payer_static_request_test
11
11
  config options: { accepts_multiple_requests: false }
12
12
  input :initial_static_questionnaire_request, :access_token, :retrieval_method, :url
13
13
 
@@ -1,9 +1,11 @@
1
1
  require_relative '../urls'
2
2
  require_relative '../validation_test'
3
+ require_relative '../cql_test'
3
4
  module DaVinciDTRTestKit
4
5
  class PayerStaticFormResponseTest < Inferno::Test
5
6
  include URLs
6
7
  include DaVinciDTRTestKit::ValidationTest
8
+ include DaVinciDTRTestKit::CQLTest
7
9
  id :dtr_v201_payer_static_form_response_test
8
10
  title 'Validate that the static response conforms to the DTR Questionnaire Package operation definition.'
9
11
  description %(
@@ -36,21 +38,8 @@ module DaVinciDTRTestKit
36
38
  assert_response_status([200, 201], response: req.response)
37
39
 
38
40
  resource = FHIR.from_contents(req.response_body)
39
- if resource&.resourceType == 'Parameters'
40
- scratch[:static_questionnaire_bundles] = resource.parameter&.filter_map do |param|
41
- param.resource if param.resource&.resourceType == 'Bundle'
42
- end
43
- assert_valid_resource(resource:,
44
- profile_url: 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-output-parameters|2.0.1')
45
- questionnaire_bundle = resource.parameter.find { |param| param.resource.resourceType == 'Bundle' }&.resource
46
- assert questionnaire_bundle, 'No questionnaire bundle found in the response'
47
- elsif resource&.resourceType == 'Bundle'
48
- scratch[:static_questionnaire_bundles] = [resource]
49
- assert_valid_resource(resource:,
50
- profile_url: 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/DTR-QPackageBundle|2.0.1')
51
- else
52
- assert(false, "Unexpected resourceType: #{resource&.resourceType}. Expected Parameters or Bundle")
53
- end
41
+
42
+ perform_questionnaire_package_validation(resource, 'static')
54
43
  end
55
44
  end
56
45
  end
@@ -0,0 +1,46 @@
1
+ module DaVinciDTRTestKit
2
+ class CommunicationRequestMustSupportTest < Inferno::Test
3
+ include USCoreTestKit::MustSupportTest
4
+
5
+ title 'All must support elements are provided in the CommunicationRequest resources returned'
6
+ description %(
7
+ This test will look through the CommunicationRequest resources
8
+ found previously for the following must support elements:\n
9
+
10
+ * CommunicationRequest.authoredOn
11
+ * CommunicationRequest.basedOn
12
+ * CommunicationRequest.extension:Coverage-Information
13
+ * CommunicationRequest.identifier
14
+ * CommunicationRequest.occurrence[x]
15
+ * CommunicationRequest.payload
16
+ * CommunicationRequest.payload.extension:codeableConcept
17
+ * CommunicationRequest.reasonCode
18
+ * CommunicationRequest.reasonReference
19
+ * CommunicationRequest.recipient
20
+ * CommunicationRequest.requester
21
+ * CommunicationRequest.sender
22
+ * CommunicationRequest.status
23
+ * CommunicationRequest.subject
24
+ )
25
+ verifies_requirements 'hl7.fhir.us.davinci-dtr_2.0.1@355'
26
+ id :communication_request_must_support_test
27
+
28
+ def resource_type
29
+ 'CommunicationRequest'
30
+ end
31
+
32
+ def self.metadata
33
+ @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
34
+ aliases: true))
35
+ end
36
+
37
+ def scratch_resources
38
+ scratch[:communication_requests] ||= {}
39
+ end
40
+
41
+ run do
42
+ skip_if(communication_request_ids.nil?, "No `#{resource_type}` IDs provided, skipping test.")
43
+ perform_must_support_test(all_scratch_resources)
44
+ end
45
+ end
46
+ end
@@ -6,6 +6,7 @@ module DaVinciDTRTestKit
6
6
 
7
7
  title 'Server returns correct CommunicationRequest resource from CommunicationRequest read interaction'
8
8
  description 'A server SHOULD support the CommunicationRequest read interaction.'
9
+ verifies_requirements 'hl7.fhir.us.davinci-dtr_2.0.1@275'
9
10
 
10
11
  id :communication_request_read
11
12
  output :communication_request_resources
@@ -14,6 +15,10 @@ module DaVinciDTRTestKit
14
15
  'CommunicationRequest'
15
16
  end
16
17
 
18
+ def scratch_resources
19
+ scratch[:communication_requests] ||= {}
20
+ end
21
+
17
22
  def communication_request_id_list
18
23
  return [nil] unless respond_to? :communication_request_ids
19
24
 
@@ -21,9 +26,7 @@ module DaVinciDTRTestKit
21
26
  end
22
27
 
23
28
  run do
24
- resources = perform_read_test(communication_request_id_list, resource_type)
25
-
26
- output communication_request_resources: resources.to_json
29
+ perform_read_test(communication_request_id_list, resource_type)
27
30
  end
28
31
  end
29
32
  end
@@ -1,8 +1,6 @@
1
- require_relative '../../validation_test'
2
-
3
1
  module DaVinciDTRTestKit
4
2
  class CommunicationRequestValidationTest < Inferno::Test
5
- include DaVinciDTRTestKit::ValidationTest
3
+ include USCoreTestKit::ValidationTest
6
4
 
7
5
  title 'CommunicationRequest resources returned during previous tests conform to the CRD CommunicationRequest'
8
6
  description %(
@@ -19,17 +17,20 @@ fail if their code/system are not found in the valueset.
19
17
  )
20
18
 
21
19
  id :communication_request_validation
22
- input :communication_request_resources,
23
- optional: true
24
20
 
25
21
  def resource_type
26
22
  'CommunicationRequest'
27
23
  end
28
24
 
25
+ def scratch_resources
26
+ scratch[:communication_requests] ||= {}
27
+ end
28
+
29
29
  run do
30
- skip_if(communication_request_ids.nil?, "No `#{resource_type}` IDs provided, skipping test.")
31
- perform_profile_validation_test(communication_request_resources, resource_type,
32
- 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-communicationrequest|2.0.1')
30
+ perform_validation_test(scratch_resources[:all] || [],
31
+ 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-communicationrequest',
32
+ '2.0.1',
33
+ skip_if_empty: true)
33
34
  end
34
35
  end
35
36
  end