davinci_dtr_test_kit 0.13.0 → 0.14.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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_completion_group.rb +23 -0
  3. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_followup_questions_group.rb +26 -0
  4. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_request_test.rb +93 -0
  5. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_request_validation_test.rb +62 -0
  6. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_retrieval_group.rb +23 -0
  7. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_response_validation_test.rb +66 -0
  8. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_dinner_questionnaire_workflow_group.rb +76 -0
  9. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group.rb +27 -0
  10. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_questionnaire_request_test.rb +63 -0
  11. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_initial_retrieval_group.rb +24 -0
  12. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_request_test.rb +148 -0
  13. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_questionnaire_workflow_group.rb +75 -0
  14. data/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_questionnaire_workflow_group.rb +22 -38
  15. data/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_dinner_questionnaire_package_request_test.rb +13 -16
  16. data/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_questionnaire_workflow_group.rb +9 -31
  17. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → full_ehr}/dtr_full_ehr_launch_attestation_test.rb +7 -6
  18. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → full_ehr}/dtr_full_ehr_prepopulation_attestation_test.rb +7 -7
  19. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → full_ehr}/dtr_full_ehr_prepopulation_override_attestation_test.rb +7 -7
  20. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static/dtr_full_ehr_dinner_questionnaire_package_request_test.rb → full_ehr/dtr_full_ehr_questionnaire_package_request_test.rb} +2 -3
  21. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static/dtr_full_ehr_dinner_static_questionnaire_response_conformance_test.rb → full_ehr/dtr_full_ehr_questionnaire_response_conformance_test.rb} +7 -3
  22. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static/dtr_full_ehr_dinner_static_questionnaire_response_correctness_test.rb → full_ehr/dtr_full_ehr_questionnaire_response_correctness_test.rb} +14 -7
  23. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → full_ehr}/dtr_full_ehr_rendering_enabled_questions_attestation_test.rb +7 -7
  24. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_saving_questionnaire_response_group.rb +29 -0
  25. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → full_ehr}/dtr_full_ehr_store_attestation_test.rb +7 -7
  26. data/lib/davinci_dtr_test_kit/client_groups/resp_assist_device/dtr_questionnaire_rendering_attestation_test.rb +7 -6
  27. data/lib/davinci_dtr_test_kit/client_groups/resp_assist_device/dtr_resp_questionnaire_package_request_test.rb +15 -18
  28. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_basic_conformance_test.rb +5 -1
  29. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_pre_population_test.rb +12 -5
  30. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → smart_app}/dtr_smart_app_prepopulation_attestation_test.rb +7 -7
  31. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → smart_app}/dtr_smart_app_prepopulation_override_attestation_test.rb +7 -6
  32. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → smart_app}/dtr_smart_app_questionnaire_response_save_test.rb +17 -7
  33. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → smart_app}/dtr_smart_app_rendering_enabled_questions_attestation_test.rb +7 -7
  34. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_saving_questionnaire_response_group.rb +27 -0
  35. data/lib/davinci_dtr_test_kit/cql_test.rb +37 -140
  36. data/lib/davinci_dtr_test_kit/create_test.rb +25 -0
  37. data/lib/davinci_dtr_test_kit/docs/dtr_full_ehr_suite_description_v201.md +95 -37
  38. data/lib/davinci_dtr_test_kit/docs/dtr_light_ehr_suite_description_v201.md +11 -6
  39. data/lib/davinci_dtr_test_kit/docs/dtr_payer_server_suite_description_v201.md +32 -29
  40. data/lib/davinci_dtr_test_kit/docs/dtr_smart_app_suite_description_v201.md +48 -32
  41. data/lib/davinci_dtr_test_kit/dtr_full_ehr_suite.rb +13 -17
  42. data/lib/davinci_dtr_test_kit/dtr_light_ehr_suite.rb +67 -2
  43. data/lib/davinci_dtr_test_kit/dtr_payer_server_suite.rb +9 -20
  44. data/lib/davinci_dtr_test_kit/dtr_questionnaire_response_validation.rb +18 -10
  45. data/lib/davinci_dtr_test_kit/dtr_smart_app_suite.rb +32 -59
  46. data/lib/davinci_dtr_test_kit/endpoints/cors.rb +20 -0
  47. data/lib/davinci_dtr_test_kit/endpoints/mock_authorization/authorize_endpoint.rb +32 -0
  48. data/lib/davinci_dtr_test_kit/endpoints/mock_authorization/simple_token_endpoint.rb +19 -0
  49. data/lib/davinci_dtr_test_kit/endpoints/mock_authorization/token_endpoint.rb +116 -0
  50. data/lib/davinci_dtr_test_kit/endpoints/mock_authorization.rb +83 -0
  51. data/lib/davinci_dtr_test_kit/endpoints/mock_ehr/fhir_get_endpoint.rb +95 -0
  52. data/lib/davinci_dtr_test_kit/endpoints/mock_ehr/questionnaire_response_endpoint.rb +22 -0
  53. data/lib/davinci_dtr_test_kit/endpoints/mock_ehr.rb +25 -0
  54. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_next_question_endpoint.rb +11 -0
  55. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_questionnaire_package_endpoint.rb +11 -0
  56. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/next_question_endpoint.rb +162 -0
  57. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/next_question_proxy_endpoint.rb +36 -0
  58. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/questionnaire_package_endpoint.rb +62 -0
  59. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/questionnaire_package_proxy_endpoint.rb +38 -0
  60. data/lib/davinci_dtr_test_kit/endpoints/mock_payer.rb +36 -0
  61. data/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_burrito.json +10 -2
  62. data/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_hamburger.json +10 -2
  63. data/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_initial.json +10 -2
  64. data/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/questionnaire_dinner_order_adaptive.json +4 -3
  65. data/lib/davinci_dtr_test_kit/fixtures.rb +24 -1
  66. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_libraries_test.rb +2 -2
  67. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_questionnaire_expressions_test.rb +4 -3
  68. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_questionnaire_extensions_test.rb +3 -2
  69. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_expressions_test.rb +6 -6
  70. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_extensions_test.rb +6 -5
  71. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_group.rb +2 -2
  72. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_bundles_validation_test.rb +6 -9
  73. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_search_validation_test.rb +15 -12
  74. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_validation_test.rb +33 -23
  75. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_next_response_complete_test.rb +4 -4
  76. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_next_response_validation_test.rb +16 -12
  77. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_libraries_test.rb +2 -2
  78. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_questionnaire_expressions_test.rb +5 -4
  79. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_questionnaire_extensions_test.rb +4 -3
  80. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_response_validation_test.rb +32 -25
  81. data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_read.rb +29 -0
  82. data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_validation.rb +35 -0
  83. data/lib/davinci_dtr_test_kit/profiles/communication_request_group.rb +39 -0
  84. data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_read.rb +29 -0
  85. data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_validation.rb +35 -0
  86. data/lib/davinci_dtr_test_kit/profiles/coverage_group.rb +38 -0
  87. data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_read.rb +29 -0
  88. data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_validation.rb +35 -0
  89. data/lib/davinci_dtr_test_kit/profiles/device_request_group.rb +39 -0
  90. data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_read.rb +29 -0
  91. data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_validation.rb +35 -0
  92. data/lib/davinci_dtr_test_kit/profiles/encounter_group.rb +39 -0
  93. data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_read.rb +29 -0
  94. data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_validation.rb +35 -0
  95. data/lib/davinci_dtr_test_kit/profiles/medication_request_group.rb +39 -0
  96. data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_read.rb +29 -0
  97. data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_validation.rb +35 -0
  98. data/lib/davinci_dtr_test_kit/profiles/nutrition_order_group.rb +39 -0
  99. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_context_search.rb +35 -0
  100. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_create.rb +26 -0
  101. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_patient_search.rb +55 -0
  102. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_read.rb +22 -0
  103. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_update.rb +26 -0
  104. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_validation.rb +37 -0
  105. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response_group.rb +66 -0
  106. data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_read.rb +29 -0
  107. data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_validation.rb +35 -0
  108. data/lib/davinci_dtr_test_kit/profiles/service_request_group.rb +39 -0
  109. data/lib/davinci_dtr_test_kit/profiles/task/task_create.rb +26 -0
  110. data/lib/davinci_dtr_test_kit/profiles/task/task_read.rb +29 -0
  111. data/lib/davinci_dtr_test_kit/profiles/task/task_update.rb +26 -0
  112. data/lib/davinci_dtr_test_kit/profiles/task/task_validation.rb +35 -0
  113. data/lib/davinci_dtr_test_kit/profiles/task_group.rb +52 -0
  114. data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_read.rb +29 -0
  115. data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_validation.rb +35 -0
  116. data/lib/davinci_dtr_test_kit/profiles/vision_prescription_group.rb +39 -0
  117. data/lib/davinci_dtr_test_kit/read_test.rb +22 -0
  118. data/lib/davinci_dtr_test_kit/tags.rb +5 -7
  119. data/lib/davinci_dtr_test_kit/update_test.rb +25 -0
  120. data/lib/davinci_dtr_test_kit/validation_test.rb +19 -4
  121. data/lib/davinci_dtr_test_kit/version.rb +1 -1
  122. metadata +109 -20
  123. data/lib/davinci_dtr_test_kit/ext/inferno_core/record_response_route.rb +0 -98
  124. data/lib/davinci_dtr_test_kit/ext/inferno_core/request.rb +0 -19
  125. data/lib/davinci_dtr_test_kit/ext/inferno_core/runnable.rb +0 -35
  126. data/lib/davinci_dtr_test_kit/mock_auth_server.rb +0 -228
  127. data/lib/davinci_dtr_test_kit/mock_ehr.rb +0 -105
  128. data/lib/davinci_dtr_test_kit/mock_payer.rb +0 -100
@@ -0,0 +1,35 @@
1
+ require_relative '../../validation_test'
2
+
3
+ module DaVinciDTRTestKit
4
+ class DeviceRequestValidationTest < Inferno::Test
5
+ include DaVinciDTRTestKit::ValidationTest
6
+
7
+ title 'DeviceRequest resources returned during previous tests conform to the CRD DeviceRequest'
8
+ description %(
9
+ This test verifies resources returned from the read step conform to
10
+ the [CRD DeviceRequest](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-devicerequest).
11
+ Systems must demonstrate at least one valid example in order to pass this test.
12
+
13
+ It verifies the presence of mandatory elements and that elements with
14
+ required bindings contain appropriate values. CodeableConcept element
15
+ bindings will fail if none of their codings have a code/system belonging
16
+ to the bound ValueSet. Quantity, Coding, and code element bindings will
17
+ fail if their code/system are not found in the valueset.
18
+
19
+ )
20
+
21
+ id :device_request_validation
22
+ input :device_request_resources,
23
+ optional: true
24
+
25
+ def resource_type
26
+ 'DeviceRequest'
27
+ end
28
+
29
+ run do
30
+ skip_if(device_request_ids.nil?, "No `#{resource_type}` IDs provided, skipping test.")
31
+ perform_profile_validation_test(device_request_resources, resource_type,
32
+ 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-devicerequest|2.0.1')
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ require_relative 'device_request/device_request_read'
2
+ require_relative 'device_request/device_request_validation'
3
+
4
+ module DaVinciDTRTestKit
5
+ class DeviceRequestGroup < Inferno::TestGroup
6
+ title 'CRD DeviceRequest Tests'
7
+ short_description 'Verify support for the server capabilities required by the CRD DeviceRequest Profile'
8
+ description %(
9
+ # Background
10
+
11
+ The CRD DeviceRequest sequence verifies that the system under test is
12
+ able to provide correct responses for DeviceRequest queries. These queries
13
+ must return resources conforming to the [CRD DeviceRequest Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-devicerequest.html).
14
+
15
+ # Testing Methodology
16
+ ## Read
17
+ First, Inferno will attempt to read each DeviceRequest resource id provided in
18
+ the DeviceRequest IDs input. The server SHOULD be capable of returning a
19
+ DeviceRequest resource using the read interaction.
20
+
21
+ ## Profile Validation
22
+ Each resource returned from the read step SHALL conform to
23
+ the [CRD DeviceRequest Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-devicerequest.html).
24
+ Each element is checked against terminology binding and cardinality requirements.
25
+
26
+ )
27
+ id :device_request_group
28
+ optional
29
+ run_as_group
30
+
31
+ input :device_request_ids,
32
+ title: 'Device Request IDs',
33
+ description: 'Comma separated list of DeviceRequest IDs',
34
+ optional: true
35
+
36
+ test from: :device_request_read
37
+ test from: :device_request_validation
38
+ end
39
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../../read_test'
2
+
3
+ module DaVinciDTRTestKit
4
+ class EncounterReadTest < Inferno::Test
5
+ include DaVinciDTRTestKit::ReadTest
6
+
7
+ title 'Server returns correct Encounter resource from Encounter read interaction'
8
+ description 'A server SHOULD support the Encounter read interaction.'
9
+
10
+ id :encounter_read
11
+ output :encounter_resources
12
+
13
+ def resource_type
14
+ 'Encounter'
15
+ end
16
+
17
+ def encounter_id_list
18
+ return [nil] unless respond_to? :encounter_ids
19
+
20
+ encounter_ids&.split(',')&.map(&:strip)
21
+ end
22
+
23
+ run do
24
+ resources = perform_read_test(encounter_id_list, resource_type)
25
+
26
+ output encounter_resources: resources.to_json
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../../validation_test'
2
+
3
+ module DaVinciDTRTestKit
4
+ class EncounterValidationTest < Inferno::Test
5
+ include DaVinciDTRTestKit::ValidationTest
6
+
7
+ title 'Encounter resources returned during previous tests conform to the CRD Encounter'
8
+ description %(
9
+ This test verifies resources returned from the read step conform to
10
+ the [CRD Encounter](http://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition/profile-encounter).
11
+ Systems must demonstrate at least one valid example in order to pass this test.
12
+
13
+ It verifies the presence of mandatory elements and that elements with
14
+ required bindings contain appropriate values. CodeableConcept element
15
+ bindings will fail if none of their codings have a code/system belonging
16
+ to the bound ValueSet. Quantity, Coding, and code element bindings will
17
+ fail if their code/system are not found in the valueset.
18
+
19
+ )
20
+
21
+ id :encounter_validation
22
+ input :encounter_resources,
23
+ optional: true
24
+
25
+ def resource_type
26
+ 'Encounter'
27
+ end
28
+
29
+ run do
30
+ skip_if(encounter_ids.nil?, "No `#{resource_type}` IDs provided, skipping test.")
31
+ perform_profile_validation_test(encounter_resources, resource_type,
32
+ 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-encounter|2.0.1')
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ require_relative 'encounter/encounter_read'
2
+ require_relative 'encounter/encounter_validation'
3
+
4
+ module DaVinciDTRTestKit
5
+ class EncounterGroup < Inferno::TestGroup
6
+ title 'CRD Encounter Tests'
7
+ short_description 'Verify support for the server capabilities required by the CRD Encounter Profile'
8
+ description %(
9
+ # Background
10
+
11
+ The CRD Encounter sequence verifies that the system under test is
12
+ able to provide correct responses for Encounter queries. These queries
13
+ must return resources conforming to the [CRD Encounter Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-encounter.html).
14
+
15
+ # Testing Methodology
16
+ ## Read
17
+ First, Inferno will attempt to read each Encounter resource id provided in
18
+ the Encounter IDs input. The server SHOULD be capable of returning a
19
+ Encounter resource using the read interaction.
20
+
21
+ ## Profile Validation
22
+ Each resource returned from the read step SHALL conform to
23
+ the [CRD Encounter Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-encounter.html).
24
+ Each element is checked against terminology binding and cardinality requirements.
25
+
26
+ )
27
+ id :encounter_group
28
+ optional
29
+ run_as_group
30
+
31
+ input :encounter_ids,
32
+ title: 'Encounter IDs',
33
+ description: 'Comma separated list of Encounter IDs',
34
+ optional: true
35
+
36
+ test from: :encounter_read
37
+ test from: :encounter_validation
38
+ end
39
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../../read_test'
2
+
3
+ module DaVinciDTRTestKit
4
+ class MedicationRequestReadTest < Inferno::Test
5
+ include DaVinciDTRTestKit::ReadTest
6
+
7
+ title 'Server returns correct MedicationRequest resource from MedicationRequest read interaction'
8
+ description 'A server SHOULD support the MedicationRequest read interaction.'
9
+
10
+ id :medication_request_read
11
+ output :medication_request_resources
12
+
13
+ def resource_type
14
+ 'MedicationRequest'
15
+ end
16
+
17
+ def medication_request_id_list
18
+ return [nil] unless respond_to? :medication_request_ids
19
+
20
+ medication_request_ids&.split(',')&.map(&:strip)
21
+ end
22
+
23
+ run do
24
+ resources = perform_read_test(medication_request_id_list, resource_type)
25
+
26
+ output medication_request_resources: resources.to_json
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../../validation_test'
2
+
3
+ module DaVinciDTRTestKit
4
+ class MedicationRequestValidationTest < Inferno::Test
5
+ include DaVinciDTRTestKit::ValidationTest
6
+
7
+ title 'MedicationRequest resources returned during previous tests conform to the CRD MedicationRequest'
8
+ description %(
9
+ This test verifies resources returned from the read step conform to
10
+ the [CRD MedicationRequest](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-medicationrequest).
11
+ Systems must demonstrate at least one valid example in order to pass this test.
12
+
13
+ It verifies the presence of mandatory elements and that elements with
14
+ required bindings contain appropriate values. CodeableConcept element
15
+ bindings will fail if none of their codings have a code/system belonging
16
+ to the bound ValueSet. Quantity, Coding, and code element bindings will
17
+ fail if their code/system are not found in the valueset.
18
+
19
+ )
20
+
21
+ id :medication_request_validation
22
+ input :medication_request_resources,
23
+ optional: true
24
+
25
+ def resource_type
26
+ 'MedicationRequest'
27
+ end
28
+
29
+ run do
30
+ skip_if(medication_request_ids.nil?, "No `#{resource_type}` IDs provided, skipping test.")
31
+ perform_profile_validation_test(medication_request_resources, resource_type,
32
+ 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-medicationrequest|2.0.1')
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ require_relative 'medication_request/medication_request_read'
2
+ require_relative 'medication_request/medication_request_validation'
3
+
4
+ module DaVinciDTRTestKit
5
+ class MedicationRequestGroup < Inferno::TestGroup
6
+ title 'CRD MedicationRequest Tests'
7
+ short_description 'Verify support for the server capabilities required by the CRD MedicationRequest Profile'
8
+ description %(
9
+ # Background
10
+
11
+ The CRD MedicationRequest sequence verifies that the system under test is
12
+ able to provide correct responses for MedicationRequest queries. These queries
13
+ must return resources conforming to the [CRD MedicationRequest Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-medicationrequest.html).
14
+
15
+ # Testing Methodology
16
+ ## Read
17
+ First, Inferno will attempt to read each MedicationRequest resource id provided in
18
+ the MedicationRequest IDs input. The server SHOULD be capable of returning a
19
+ MedicationRequest resource using the read interaction.
20
+
21
+ ## Profile Validation
22
+ Each resource returned from the read step SHALL conform to
23
+ the [CRD MedicationRequest Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-medicationrequest.html).
24
+ Each element is checked against terminology binding and cardinality requirements.
25
+
26
+ )
27
+ id :medication_request_group
28
+ optional
29
+ run_as_group
30
+
31
+ input :medication_request_ids,
32
+ title: 'Medication Request IDs',
33
+ description: 'Comma separated list of MedicationRequest IDs',
34
+ optional: true
35
+
36
+ test from: :medication_request_read
37
+ test from: :medication_request_validation
38
+ end
39
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../../read_test'
2
+
3
+ module DaVinciDTRTestKit
4
+ class NutritionOrderReadTest < Inferno::Test
5
+ include DaVinciDTRTestKit::ReadTest
6
+
7
+ title 'Server returns correct NutritionOrder resource from NutritionOrder read interaction'
8
+ description 'A server SHOULD support the NutritionOrder read interaction.'
9
+
10
+ id :nutrition_order_read
11
+ output :nutrition_order_resources
12
+
13
+ def resource_type
14
+ 'NutritionOrder'
15
+ end
16
+
17
+ def nutrition_order_id_list
18
+ return [nil] unless respond_to? :nutrition_order_ids
19
+
20
+ nutrition_order_ids&.split(',')&.map(&:strip)
21
+ end
22
+
23
+ run do
24
+ resources = perform_read_test(nutrition_order_id_list, resource_type)
25
+
26
+ output nutrition_order_resources: resources.to_json
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../../validation_test'
2
+
3
+ module DaVinciDTRTestKit
4
+ class NutritionOrderValidationTest < Inferno::Test
5
+ include DaVinciDTRTestKit::ValidationTest
6
+
7
+ title 'NutritionOrder resources returned during previous tests conform to the CRD NutritionOrder'
8
+ description %(
9
+ This test verifies resources returned from the read step conform to
10
+ the [CRD NutritionOrder](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-nutritionorder).
11
+ Systems must demonstrate at least one valid example in order to pass this test.
12
+
13
+ It verifies the presence of mandatory elements and that elements with
14
+ required bindings contain appropriate values. CodeableConcept element
15
+ bindings will fail if none of their codings have a code/system belonging
16
+ to the bound ValueSet. Quantity, Coding, and code element bindings will
17
+ fail if their code/system are not found in the valueset.
18
+
19
+ )
20
+
21
+ id :nutrition_order_validation
22
+ input :nutrition_order_resources,
23
+ optional: true
24
+
25
+ def resource_type
26
+ 'NutritionOrder'
27
+ end
28
+
29
+ run do
30
+ skip_if(nutrition_order_ids.nil?, "No `#{resource_type}` IDs provided, skipping test.")
31
+ perform_profile_validation_test(nutrition_order_resources, resource_type,
32
+ 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-nutritionorder|2.0.1')
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ require_relative 'nutrition_order/nutrition_order_read'
2
+ require_relative 'nutrition_order/nutrition_order_validation'
3
+
4
+ module DaVinciDTRTestKit
5
+ class NutritionOrderGroup < Inferno::TestGroup
6
+ title 'CRD NutritionOrder Tests'
7
+ short_description 'Verify support for the server capabilities required by the CRD NutritionOrder Profile'
8
+ description %(
9
+ # Background
10
+
11
+ The CRD NutritionOrder sequence verifies that the system under test is
12
+ able to provide correct responses for NutritionOrder queries. These queries
13
+ must return resources conforming to the [CRD NutritionOrder Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-nutritionorder.html).
14
+
15
+ # Testing Methodology
16
+ ## Read
17
+ First, Inferno will attempt to read each NutritionOrder resource id provided in
18
+ the NutritionOrder IDs input. The server SHOULD be capable of returning a
19
+ NutritionOrder resource using the read interaction.
20
+
21
+ ## Profile Validation
22
+ Each resource returned from the read step SHALL conform to
23
+ the [CRD NutritionOrder Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-communicationrequest.html).
24
+ Each element is checked against terminology binding and cardinality requirements.
25
+
26
+ )
27
+ id :nutrition_order_group
28
+ optional
29
+ run_as_group
30
+
31
+ input :nutrition_order_ids,
32
+ title: 'Nutrition Order IDs',
33
+ description: 'Comma separated list of NutritionOrder IDs',
34
+ optional: true
35
+
36
+ test from: :nutrition_order_read
37
+ test from: :nutrition_order_validation
38
+ end
39
+ end
@@ -0,0 +1,35 @@
1
+ module DaVinciDTRTestKit
2
+ class QuestionnaireResponseContextSearchTest < Inferno::Test
3
+ include USCoreTestKit::SearchTest
4
+
5
+ title 'Server returns valid results for QuestionnaireResponse search by context'
6
+ description %(
7
+ A server SHALL support searching by
8
+ context on the QuestionnaireResponse resource. This test
9
+ will pass if resources are returned and match the search criteria. If
10
+ none are returned, the test is skipped.
11
+ )
12
+
13
+ id :questionnaire_response_context_search
14
+
15
+ def self.properties
16
+ @properties ||= USCoreTestKit::SearchTestProperties.new(
17
+ resource_type: 'QuestionnaireResponse',
18
+ search_param_names: ['context']
19
+ )
20
+ end
21
+
22
+ def self.metadata
23
+ @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
24
+ aliases: true))
25
+ end
26
+
27
+ def scratch_resources
28
+ scratch[:questionnaire_response_resources] ||= {}
29
+ end
30
+
31
+ run do
32
+ run_search_test
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../../create_test'
2
+
3
+ module DaVinciDTRTestKit
4
+ class QuestionnaireResponseCreateTest < Inferno::Test
5
+ include DaVinciDTRTestKit::CreateTest
6
+
7
+ title 'Server is capable of creating a QuestionnaireResponse resource from QuestionnaireResponse create interaction'
8
+ description 'A sever SHALL support the QuestionnaireResponse create interaction'
9
+
10
+ id :questionnaire_response_create
11
+ input :create_questionnaire_resources,
12
+ type: 'textarea',
13
+ title: 'Create QuestionnaireResponse Resources',
14
+ description:
15
+ 'Provide a list of QuestionnaireResponse resources to create. e.g., [json_resource_1, json_resource_2]',
16
+ optional: true
17
+
18
+ def resource_type
19
+ 'QuestionnaireResponse'
20
+ end
21
+
22
+ run do
23
+ perform_create_test(create_questionnaire_resources, resource_type)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,55 @@
1
+ module DaVinciDTRTestKit
2
+ class QuestionnaireResponsePatientSearchTest < Inferno::Test
3
+ include USCoreTestKit::SearchTest
4
+
5
+ title 'Server returns valid results for QuestionnaireResponse search by patient'
6
+ description %(
7
+ A server SHALL support searching by
8
+ patient on the QuestionnaireResponse resource. This test
9
+ will pass if resources are returned and match the search criteria. If
10
+ none are returned, the test is skipped.
11
+
12
+ This test verifies that the server supports searching by reference using
13
+ the form `patient=[id]` as well as `patient=Patient/[id]`. The two
14
+ different forms are expected to return the same number of results. US
15
+ Core requires that both forms are supported by US Core responders.
16
+
17
+ Because this is the first search of the sequence, resources in the
18
+ response will be used for subsequent tests.
19
+
20
+ Additionally, this test will check that GET and POST search methods
21
+ return the same number of results. Search by POST is required by the
22
+ FHIR R4 specification, and these tests interpret search by GET as a
23
+ requirement of US Core v3.1.1.
24
+ )
25
+
26
+ id :questionnaire_response_patient_search
27
+ input :patient_ids,
28
+ title: 'Patient IDs',
29
+ description: 'Comma separated list of Patient IDs used to search for QuestionnaireResponses'
30
+
31
+ def self.properties
32
+ @properties ||= USCoreTestKit::SearchTestProperties.new(
33
+ first_search: true,
34
+ resource_type: 'QuestionnaireResponse',
35
+ search_param_names: ['patient'],
36
+ saves_delayed_references: true,
37
+ test_reference_variants: true,
38
+ test_post_search: true
39
+ )
40
+ end
41
+
42
+ def self.metadata
43
+ @metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
44
+ aliases: true))
45
+ end
46
+
47
+ def scratch_resources
48
+ scratch[:questionnaire_response_resources] ||= {}
49
+ end
50
+
51
+ run do
52
+ run_search_test
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,22 @@
1
+ module DaVinciDTRTestKit
2
+ class QuestionnaireResponseReadTest < Inferno::Test
3
+ include USCoreTestKit::ReadTest
4
+
5
+ title 'Server returns correct QuestionnaireResponse resource from QuestionnaireResponse read interaction'
6
+ description 'A server SHALL support the QuestionnaireResponse read interaction'
7
+
8
+ id :questionnaire_response_read
9
+
10
+ def resource_type
11
+ 'QuestionnaireResponse'
12
+ end
13
+
14
+ def scratch_resources
15
+ scratch[:questionnaire_response_resources] ||= {}
16
+ end
17
+
18
+ run do
19
+ perform_read_test(all_scratch_resources)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../../update_test'
2
+
3
+ module DaVinciDTRTestKit
4
+ class QuestionnaireResponseUpdateTest < Inferno::Test
5
+ include DaVinciDTRTestKit::UpdateTest
6
+
7
+ title 'Server is capable of updating a QuestionnaireResponse resource from QuestionnaireResponse update interaction'
8
+ description 'A server SHALL support the QuestionnaireResponse update interaction'
9
+
10
+ id :questionnaire_response_update
11
+ input :update_questionnaire_resources,
12
+ type: 'textarea',
13
+ title: 'Update QuestionnaireResponse Resources',
14
+ description:
15
+ 'Provide a list of QuestionnaireResponse resources to update. e.g., [json_resource_1, json_resource_2]',
16
+ optional: true
17
+
18
+ def resource_type
19
+ 'QuestionnaireResponse'
20
+ end
21
+
22
+ run do
23
+ perform_update_test(update_questionnaire_resources, resource_type)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,37 @@
1
+ module DaVinciDTRTestKit
2
+ class QuestionnaireResponseValidationTest < Inferno::Test
3
+ include USCoreTestKit::ValidationTest
4
+
5
+ id :questionnaire_response_validation
6
+ title 'QuestionnaireResponse resources returned during previous tests conform to the DTR Questionnaire Response'
7
+ description %(
8
+ This test verifies resources returned from the first search conform to
9
+ the [DTR Questionnaire Response](https://hl7.org/fhir/us/davinci-dtr/STU2/StructureDefinition-dtr-questionnaireresponse).
10
+ Systems must demonstrate at least one valid example in order to pass this test.
11
+
12
+ It verifies the presence of mandatory elements and that elements with
13
+ required bindings contain appropriate values. CodeableConcept element
14
+ bindings will fail if none of their codings have a code/system belonging
15
+ to the bound ValueSet. Quantity, Coding, and code element bindings will
16
+ fail if their code/system are not found in the valueset.
17
+
18
+ )
19
+
20
+ output :dar_code_found, :dar_extension_found
21
+
22
+ def resource_type
23
+ 'QuestionnaireResponse'
24
+ end
25
+
26
+ def scratch_resources
27
+ scratch[:questionnaire_response_resources] ||= {}
28
+ end
29
+
30
+ run do
31
+ perform_validation_test(scratch_resources[:all] || [],
32
+ 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaireresponse',
33
+ '2.0.1',
34
+ skip_if_empty: true)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,66 @@
1
+ require_relative 'questionnaire_response/questionnaire_response_patient_search'
2
+ require_relative 'questionnaire_response/questionnaire_response_context_search'
3
+ require_relative 'questionnaire_response/questionnaire_response_read'
4
+ require_relative 'questionnaire_response/questionnaire_response_validation'
5
+ require_relative 'questionnaire_response/questionnaire_response_create'
6
+ require_relative 'questionnaire_response/questionnaire_response_update'
7
+
8
+ module DaVinciDTRTestKit
9
+ class QuestionnaireResponseGroup < Inferno::TestGroup
10
+ title 'DTR QuestionnaireResponse Tests'
11
+ short_description 'Verify support for the server capabilities required by the DTR QuestionnaireResponse Profile'
12
+ description %(
13
+ # Background
14
+
15
+ The DTR QuestionnaireResponse sequences verifies that the system under test is able to create and update
16
+ QuestionnaireResponse instances and provide correct responses for QuestionnaireResponse queries. These queries must
17
+ return resources conforming to the [DTR QuestionnaireResponse Profile](http://hl7.org/fhir/us/davinci-dtr/STU2/StructureDefinition-dtr-questionnaireresponse.html).
18
+
19
+ # Testing Methodology
20
+ ## Searching
21
+ This test sequence will first perform each required search associated with this resource. This sequence will perform
22
+ searches with the following parameters:
23
+
24
+ * `patient`
25
+ * `context`
26
+
27
+ ### Search Parameters
28
+ The first search uses the patient(s) from the *Patient IDs* input. Subsequent searches will look for its parameter
29
+ values from the results of the first search. For example, the `context` search in this sequence is performed by
30
+ looking for an existing `context` extension from any of the resources returned in the `patient` search. If a value
31
+ cannot be found this way, the search is skipped.
32
+
33
+ ### Search Validation
34
+ Inferno will retrieve up to the first 20 bundle pages of the reply for QuestionnaireResponse resources and save them
35
+ for subsequent tests. Each of these resources is then checked to see if it matches the searched parameters in
36
+ accordance with [FHIR search guidelines](https://www.hl7.org/fhir/search.html). The test will fail, for example, if
37
+ a search for `context=Coverage/cov015` returns a QuestionnaireResponse without a link to Coverage `cov015` in the
38
+ `context` extension.
39
+
40
+ ## Read
41
+ The ids of each resource returned from the searches are then used to verify that the system under test is able to
42
+ return the correct QuestionnaireResponse resource using the read interaction.
43
+
44
+ ## Profile Validation
45
+ Each resource returned from the search step SHALL conform to the [DTR QuestionnaireResponse Profile](http://hl7.org/fhir/us/davinci-dtr/STU2/StructureDefinition-dtr-questionnaireresponse.html).
46
+ Each element is checked against terminology binding and cardinality requirements.
47
+
48
+ ## Create
49
+ This test sequence will perform create interactions with the provided json QuestionnaireResponse resources. The
50
+ server SHALL be capable of creating a QuestionnaireResponse resource using the create interaction.
51
+
52
+ ## Update
53
+ This test sequence will perform update interactions with the provided json QuestionnaireResponse resources. The
54
+ server SHALL be capable of creating a QuestionnaireResponse resource using the update interaction.
55
+ )
56
+ id :questionnaire_response_group
57
+ run_as_group
58
+
59
+ test from: :questionnaire_response_patient_search
60
+ test from: :questionnaire_response_context_search
61
+ test from: :questionnaire_response_read
62
+ test from: :questionnaire_response_validation
63
+ test from: :questionnaire_response_create
64
+ test from: :questionnaire_response_update
65
+ end
66
+ end