davinci_crd_test_kit 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/davinci_crd_test_kit/card_responses/propose_alternate_request.json +2 -52
- data/lib/davinci_crd_test_kit/card_responses/request_form_completion.json +46 -31
- data/lib/davinci_crd_test_kit/cards_validation.rb +8 -4
- data/lib/davinci_crd_test_kit/client_hooks_group.rb +22 -660
- data/lib/davinci_crd_test_kit/client_tests/appointment_book_receive_request_test.rb +17 -6
- data/lib/davinci_crd_test_kit/client_tests/client_appointment_book_group.rb +70 -0
- data/lib/davinci_crd_test_kit/client_tests/client_encounter_discharge_group.rb +71 -0
- data/lib/davinci_crd_test_kit/client_tests/client_encounter_start_group.rb +70 -0
- data/lib/davinci_crd_test_kit/client_tests/client_order_dispatch_group.rb +70 -0
- data/lib/davinci_crd_test_kit/client_tests/client_order_select_group.rb +72 -0
- data/lib/davinci_crd_test_kit/client_tests/client_order_sign_group.rb +71 -0
- data/lib/davinci_crd_test_kit/client_tests/decode_auth_token_test.rb +43 -23
- data/lib/davinci_crd_test_kit/client_tests/encounter_discharge_receive_request_test.rb +19 -6
- data/lib/davinci_crd_test_kit/client_tests/encounter_start_receive_request_test.rb +18 -6
- data/lib/davinci_crd_test_kit/client_tests/hook_request_optional_fields_test.rb +26 -10
- data/lib/davinci_crd_test_kit/client_tests/hook_request_required_fields_test.rb +20 -11
- data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_context_test.rb +14 -10
- data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_prefetch_test.rb +27 -110
- data/lib/davinci_crd_test_kit/client_tests/order_dispatch_receive_request_test.rb +18 -6
- data/lib/davinci_crd_test_kit/client_tests/order_select_receive_request_test.rb +18 -6
- data/lib/davinci_crd_test_kit/client_tests/order_sign_receive_request_test.rb +18 -6
- data/lib/davinci_crd_test_kit/client_tests/retrieve_jwks_test.rb +66 -29
- data/lib/davinci_crd_test_kit/client_tests/submitted_response_validation.rb +44 -0
- data/lib/davinci_crd_test_kit/client_tests/token_header_test.rb +45 -14
- data/lib/davinci_crd_test_kit/client_tests/token_payload_test.rb +43 -26
- data/lib/davinci_crd_test_kit/crd_client_suite.rb +0 -4
- data/lib/davinci_crd_test_kit/hook_request_field_validation.rb +240 -50
- data/lib/davinci_crd_test_kit/mock_service_response.rb +134 -120
- data/lib/davinci_crd_test_kit/routes/hook_request_endpoint.rb +26 -42
- data/lib/davinci_crd_test_kit/server_encounter_discharge_group.rb +24 -0
- data/lib/davinci_crd_test_kit/server_encounter_start_group.rb +24 -0
- data/lib/davinci_crd_test_kit/server_order_select_group.rb +24 -0
- data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_received_test.rb +4 -1
- data/lib/davinci_crd_test_kit/server_tests/service_request_optional_fields_validation_test.rb +8 -10
- data/lib/davinci_crd_test_kit/server_tests/service_request_required_fields_validation_test.rb +5 -10
- data/lib/davinci_crd_test_kit/tags.rb +6 -6
- data/lib/davinci_crd_test_kit/version.rb +1 -1
- metadata +9 -2
@@ -7,10 +7,11 @@ module DaVinciCRDTestKit
|
|
7
7
|
id :crd_encounter_start_request
|
8
8
|
title 'Request received for encounter-start hook'
|
9
9
|
description %(
|
10
|
-
This test waits for
|
11
|
-
hook
|
10
|
+
This test waits for multiple incoming [encounter-start](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#encounter-start)
|
11
|
+
hook requests and responds to the client with the response types selected as an input.
|
12
12
|
)
|
13
|
-
|
13
|
+
|
14
|
+
config options: { accepts_multiple_requests: true }
|
14
15
|
|
15
16
|
input :iss
|
16
17
|
input :encounter_start_selected_response_types,
|
@@ -20,7 +21,8 @@ module DaVinciCRDTestKit
|
|
20
21
|
response type that will be returned for this hook is the `Instructions` card type.
|
21
22
|
),
|
22
23
|
type: 'checkbox',
|
23
|
-
default: ['instructions'],
|
24
|
+
default: ['coverage_information', 'external_reference', 'instructions'],
|
25
|
+
optional: true,
|
24
26
|
options: {
|
25
27
|
list_options: [
|
26
28
|
{
|
@@ -49,6 +51,14 @@ module DaVinciCRDTestKit
|
|
49
51
|
}
|
50
52
|
]
|
51
53
|
}
|
54
|
+
input :encounter_start_custom_response,
|
55
|
+
title: 'Custom response for encounter-start hook requests',
|
56
|
+
description: %(
|
57
|
+
A JSON string may be provided here to replace the normal response
|
58
|
+
from the hook request endpoint
|
59
|
+
),
|
60
|
+
type: 'textarea',
|
61
|
+
optional: true
|
52
62
|
|
53
63
|
run do
|
54
64
|
wait(
|
@@ -56,11 +66,13 @@ module DaVinciCRDTestKit
|
|
56
66
|
message: %(
|
57
67
|
**Encounter Start CDS Service Test**:
|
58
68
|
|
59
|
-
Invoke the encounter-start hook and send
|
69
|
+
Invoke the encounter-start hook and send requests to:
|
60
70
|
|
61
71
|
`#{encounter_start_url}`
|
62
72
|
|
63
|
-
Inferno will process the
|
73
|
+
Inferno will process the requests and return CDS cards if successful.
|
74
|
+
|
75
|
+
[Click here](#{resume_pass_url}?token=enounter-start%20#{iss}) when you have finished submitting requests.
|
64
76
|
)
|
65
77
|
)
|
66
78
|
end
|
@@ -2,7 +2,8 @@ require_relative '../client_hook_request_validation'
|
|
2
2
|
|
3
3
|
module DaVinciCRDTestKit
|
4
4
|
class HookRequestOptionalFieldsTest < Inferno::Test
|
5
|
-
include
|
5
|
+
include ClientHookRequestValidation
|
6
|
+
include URLs
|
6
7
|
|
7
8
|
id :crd_hook_request_optional_fields
|
8
9
|
title 'Hook request contains optional fields'
|
@@ -22,20 +23,35 @@ module DaVinciCRDTestKit
|
|
22
23
|
)
|
23
24
|
optional
|
24
25
|
|
26
|
+
def hook_name
|
27
|
+
config.options[:hook_name]
|
28
|
+
end
|
29
|
+
|
25
30
|
output :client_fhir_server
|
26
31
|
output :client_access_token,
|
27
32
|
optional: true
|
28
33
|
|
29
|
-
uses_request :hook_request
|
30
|
-
|
31
34
|
run do
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
load_tagged_requests(hook_name)
|
36
|
+
skip_if requests.empty?, "No #{hook_name} requests were made in a previous test as expected."
|
37
|
+
client_fhir_server = nil
|
38
|
+
requests.each_with_index do |request, index|
|
39
|
+
@request_number = index + 1
|
40
|
+
request_body = json_parse(request.request_body)
|
41
|
+
if request_body.blank?
|
42
|
+
add_message('error', "#{request_number}Hook request body cannot be empty.")
|
43
|
+
next
|
44
|
+
end
|
45
|
+
|
46
|
+
fhir_server_info = hook_request_optional_fields_check(request_body)
|
47
|
+
client_fhir_server ||= fhir_server_info
|
48
|
+
end
|
49
|
+
|
50
|
+
unless client_fhir_server.nil?
|
51
|
+
output client_fhir_server: client_fhir_server[:fhir_server_uri],
|
52
|
+
client_access_token: client_fhir_server[:fhir_access_token]
|
53
|
+
end
|
54
|
+
no_error_validation('Some service requests contain invalid optional fields.')
|
39
55
|
end
|
40
56
|
end
|
41
57
|
end
|
@@ -2,7 +2,7 @@ require_relative '../client_hook_request_validation'
|
|
2
2
|
|
3
3
|
module DaVinciCRDTestKit
|
4
4
|
class HookRequestRequiredFieldsTest < Inferno::Test
|
5
|
-
include
|
5
|
+
include ClientHookRequestValidation
|
6
6
|
include URLs
|
7
7
|
|
8
8
|
id :crd_hook_request_required_fields
|
@@ -20,21 +20,30 @@ module DaVinciCRDTestKit
|
|
20
20
|
a request for
|
21
21
|
)
|
22
22
|
|
23
|
-
uses_request :hook_request
|
24
|
-
|
25
|
-
def hook_url
|
26
|
-
base_url + config.options[:hook_path]
|
27
|
-
end
|
28
|
-
|
29
23
|
def hook_name
|
30
24
|
config.options[:hook_name]
|
31
25
|
end
|
32
26
|
|
33
|
-
|
34
|
-
assert_valid_json(request.request_body)
|
35
|
-
request_body = JSON.parse(request.request_body)
|
27
|
+
output :contexts, :prefetches
|
36
28
|
|
37
|
-
|
29
|
+
run do
|
30
|
+
load_tagged_requests(hook_name)
|
31
|
+
skip_if requests.empty?, "No #{hook_name} requests were made in a previous test as expected."
|
32
|
+
contexts = []
|
33
|
+
prefetches = []
|
34
|
+
requests.each_with_index do |request, index|
|
35
|
+
@request_number = index + 1
|
36
|
+
request_body = json_parse(request.request_body)
|
37
|
+
next if request_body.blank?
|
38
|
+
|
39
|
+
contexts << request_body['context'] if request_body['context'].is_a?(Hash)
|
40
|
+
prefetches << request_body['prefetch'] if request_body['prefetch'].is_a?(Hash)
|
41
|
+
hook_request_required_fields_check(request_body, hook_name)
|
42
|
+
end
|
43
|
+
|
44
|
+
output contexts: contexts.to_json,
|
45
|
+
prefetches: prefetches.to_json
|
46
|
+
no_error_validation('Some service requests made are not valid.')
|
38
47
|
end
|
39
48
|
end
|
40
49
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../client_hook_request_validation'
|
2
|
+
|
2
3
|
module DaVinciCRDTestKit
|
3
4
|
class HookRequestValidContextTest < Inferno::Test
|
4
5
|
include URLs
|
@@ -33,9 +34,8 @@ module DaVinciCRDTestKit
|
|
33
34
|
The client must provide its FHIR server URL and access token in the hook request in order to run
|
34
35
|
this test.
|
35
36
|
)
|
36
|
-
uses_request :hook_request
|
37
37
|
|
38
|
-
input :client_fhir_server
|
38
|
+
input :contexts, :client_fhir_server
|
39
39
|
input :client_access_token,
|
40
40
|
optional: true
|
41
41
|
|
@@ -49,14 +49,18 @@ module DaVinciCRDTestKit
|
|
49
49
|
end
|
50
50
|
|
51
51
|
run do
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
52
|
+
hook_contexts = json_parse(contexts)
|
53
|
+
if hook_contexts
|
54
|
+
skip_if(hook_contexts.none?(&:present?), "No #{hook_name} requests contained the `context` field.")
|
55
|
+
hook_contexts.each_with_index do |context, index|
|
56
|
+
@request_number = index + 1
|
57
|
+
if context.blank?
|
58
|
+
add_message('error', "#{request_number}Missing required context field.")
|
59
|
+
next
|
60
|
+
end
|
61
|
+
hook_request_context_check(context, hook_name)
|
62
|
+
end
|
63
|
+
end
|
60
64
|
no_error_validation('Context is not valid.')
|
61
65
|
end
|
62
66
|
end
|
@@ -1,7 +1,8 @@
|
|
1
|
-
require_relative '../
|
1
|
+
require_relative '../client_hook_request_validation'
|
2
2
|
|
3
3
|
module DaVinciCRDTestKit
|
4
4
|
class HookRequestValidPrefetchTest < Inferno::Test
|
5
|
+
include ClientHookRequestValidation
|
5
6
|
include URLs
|
6
7
|
|
7
8
|
id :crd_hook_request_valid_prefetch
|
@@ -19,7 +20,7 @@ module DaVinciCRDTestKit
|
|
19
20
|
)
|
20
21
|
optional
|
21
22
|
|
22
|
-
|
23
|
+
input :contexts, :prefetches
|
23
24
|
|
24
25
|
def hook_name
|
25
26
|
config.options[:hook_name]
|
@@ -31,121 +32,37 @@ module DaVinciCRDTestKit
|
|
31
32
|
)))['services']
|
32
33
|
end
|
33
34
|
|
34
|
-
def
|
35
|
-
{
|
36
|
-
|
37
|
-
'PractitionerRole' => 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitionerrole',
|
38
|
-
'Patient' => 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-patient',
|
39
|
-
'Coverage' => 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-coverage',
|
40
|
-
'RelatedPerson' => 'http://hl7.org/fhir/StructureDefinition/RelatedPerson',
|
41
|
-
'Encounter' => 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-encounter',
|
42
|
-
'DeviceRequest' => 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-devicerequest',
|
43
|
-
'MedicationRequest' => 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-medicationrequest',
|
44
|
-
'NutritionOrder' => 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-nutritionorder',
|
45
|
-
'ServiceRequest' => 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-servicerequest',
|
46
|
-
'VisionPrescription' => 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-visionprescription'
|
47
|
-
}
|
48
|
-
end
|
49
|
-
|
50
|
-
def validate_prefetch_coverage(received_resource, advertised_prefetch_key,
|
51
|
-
received_context_patient_id, advertised_status)
|
52
|
-
assert_resource_type('Bundle', resource: received_resource)
|
53
|
-
assert(received_resource.entry.any?, 'Bundle of coverage resources received from prefetch is empty')
|
54
|
-
coverage_resource = received_resource.entry.first.resource
|
55
|
-
assert_resource_type('Coverage', resource: coverage_resource)
|
56
|
-
assert_valid_resource(resource: coverage_resource,
|
57
|
-
profile_url: structure_definition_map['Coverage'])
|
58
|
-
|
59
|
-
coverage_beneficiary_reference = coverage_resource.beneficiary
|
60
|
-
coverage_beneficiary_patient_id = coverage_beneficiary_reference.reference_id
|
61
|
-
assert(coverage_beneficiary_patient_id.present?,
|
62
|
-
"Could not get beneficiary reference id from `#{advertised_prefetch_key}` field's Coverage resource")
|
63
|
-
|
64
|
-
assert(coverage_beneficiary_patient_id == received_context_patient_id,
|
65
|
-
%(Expected `#{advertised_prefetch_key}` field's Coverage resource to have a `beneficiary` reference id of
|
66
|
-
'#{received_context_patient_id}', instead was '#{coverage_beneficiary_patient_id}'))
|
67
|
-
|
68
|
-
coverage_status = coverage_resource.status
|
69
|
-
assert(coverage_status == advertised_status,
|
70
|
-
%(Expected `#{advertised_prefetch_key}` field's Coverage resource to have a `status` of
|
71
|
-
'#{advertised_status}', instead was '#{coverage_status}'))
|
72
|
-
end
|
73
|
-
|
74
|
-
def validate_prefetch_resource(received_resource, advertised_prefetch_key, context_field_resource_type,
|
75
|
-
context_field_id)
|
76
|
-
assert_resource_type(context_field_resource_type, resource: received_resource)
|
77
|
-
|
78
|
-
if hook_name == 'order-dispatch'
|
79
|
-
assert_valid_resource(resource: received_resource)
|
80
|
-
else
|
81
|
-
assert_valid_resource(resource: received_resource,
|
82
|
-
profile_url: structure_definition_map[context_field_resource_type])
|
83
|
-
end
|
84
|
-
|
85
|
-
received_prefetch_resource_id = received_resource.id
|
86
|
-
assert(received_prefetch_resource_id.present?,
|
87
|
-
"`#{advertised_prefetch_key}` field's FHIR resource does not contain the `id` field")
|
88
|
-
assert(received_prefetch_resource_id == context_field_id,
|
89
|
-
%(Expected `#{advertised_prefetch_key}` field's FHIR resource to have an `id` of '#{context_field_id}',
|
90
|
-
instead was '#{received_prefetch_resource_id}'))
|
35
|
+
def advertised_prefetch_fields
|
36
|
+
advertised_hook_service = cds_services_json.find { |service| service['hook'] == hook_name }
|
37
|
+
advertised_hook_service['prefetch']
|
91
38
|
end
|
92
39
|
|
93
40
|
run do
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
assert(received_prefetch[advertised_prefetch_key].is_a?(Hash),
|
113
|
-
"Prefetch field `#{advertised_prefetch_key}` is not of type `Hash`.")
|
114
|
-
|
115
|
-
received_prefetch_resource = FHIR.from_contents(received_prefetch[advertised_prefetch_key].to_json)
|
116
|
-
|
117
|
-
if advertised_prefetch_template.include?('?')
|
118
|
-
advertised_prefetch_fhir_search = advertised_prefetch_template.gsub(/{|}/, '').split('?')
|
119
|
-
advertised_prefetch_resource_type = advertised_prefetch_fhir_search.first
|
120
|
-
|
121
|
-
if advertised_prefetch_resource_type == 'Coverage'
|
122
|
-
advertised_coverage_query_params = Rack::Utils.parse_nested_query(advertised_prefetch_fhir_search.last)
|
123
|
-
|
124
|
-
advertised_patient_token = advertised_coverage_query_params['patient']
|
125
|
-
advertised_context_patient_id_key = advertised_patient_token.split('.').last
|
126
|
-
received_context_patient_id = received_context[advertised_context_patient_id_key]
|
127
|
-
|
128
|
-
advertised_status_param = advertised_coverage_query_params['status']
|
129
|
-
|
130
|
-
validate_prefetch_coverage(received_prefetch_resource, advertised_prefetch_key, received_context_patient_id,
|
131
|
-
advertised_status_param)
|
41
|
+
hook_contexts = json_parse(contexts)
|
42
|
+
hook_prefetches = json_parse(prefetches)
|
43
|
+
|
44
|
+
if hook_contexts && hook_prefetches
|
45
|
+
skip_if(hook_prefetches.none? do |prefetch|
|
46
|
+
prefetch_index = hook_prefetches.find_index(prefetch)
|
47
|
+
prefetch.present? && hook_contexts[prefetch_index].present?
|
48
|
+
end, "No #{hook_name} requests contained both the `context` and `prefetch` field.")
|
49
|
+
|
50
|
+
hook_prefetches.each_with_index do |prefetch, index|
|
51
|
+
@request_number = index + 1
|
52
|
+
context = hook_contexts[index]
|
53
|
+
|
54
|
+
info "#{request_number}Received hook request does not contain the `prefetch` field." if prefetch.blank?
|
55
|
+
if context.blank?
|
56
|
+
info %(#{request_number}Received hook request does not contain the `context` field
|
57
|
+
which is needed to validate the `prefetch` field)
|
132
58
|
end
|
133
|
-
else
|
134
|
-
advertised_prefetch_token = advertised_prefetch_template.gsub(/{|}/, '').split('/')
|
135
|
-
advertised_context_id = advertised_prefetch_token.last.split('.').last
|
136
59
|
|
137
|
-
if
|
138
|
-
|
139
|
-
|
140
|
-
received_context_id = received_context_reference.reference_id
|
141
|
-
else
|
142
|
-
received_context_id = received_context[advertised_context_id]
|
143
|
-
received_context_resource_type = advertised_prefetch_token.first
|
144
|
-
end
|
145
|
-
validate_prefetch_resource(received_prefetch_resource, advertised_prefetch_key,
|
146
|
-
received_context_resource_type, received_context_id)
|
60
|
+
next if prefetch.blank? || context.blank?
|
61
|
+
|
62
|
+
hook_request_prefetch_check(advertised_prefetch_fields, prefetch, context)
|
147
63
|
end
|
148
64
|
end
|
65
|
+
no_error_validation('Prefetch is not valid.')
|
149
66
|
end
|
150
67
|
end
|
151
68
|
end
|
@@ -7,13 +7,14 @@ module DaVinciCRDTestKit
|
|
7
7
|
id :crd_order_dispatch_request
|
8
8
|
title 'Request received for order-dispatch hook'
|
9
9
|
description %(
|
10
|
-
This test waits for
|
11
|
-
hook
|
10
|
+
This test waits for multiple incoming [order-dispatch](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-dispatch)
|
11
|
+
hook requests and responds to the client with the response types selected as an input. This hook is a 'primary'
|
12
12
|
hook, meaning that CRD Servers SHALL, at minimum, return a [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-ext-coverage-information.html)
|
13
13
|
system action for these hooks, even if the response indicates that further information is needed or that the
|
14
14
|
level of detail provided is insufficient to determine coverage.
|
15
15
|
)
|
16
|
-
|
16
|
+
|
17
|
+
config options: { accepts_multiple_requests: true }
|
17
18
|
|
18
19
|
input :iss
|
19
20
|
input :order_dispatch_selected_response_types,
|
@@ -23,7 +24,8 @@ module DaVinciCRDTestKit
|
|
23
24
|
response type that will be returned for this hook is the `Coverage Information` card type.
|
24
25
|
),
|
25
26
|
type: 'checkbox',
|
26
|
-
default: ['coverage_information'],
|
27
|
+
default: ['coverage_information', 'external_reference', 'instructions'],
|
28
|
+
optional: true,
|
27
29
|
options: {
|
28
30
|
list_options: [
|
29
31
|
{
|
@@ -60,6 +62,14 @@ module DaVinciCRDTestKit
|
|
60
62
|
}
|
61
63
|
]
|
62
64
|
}
|
65
|
+
input :order_dispatch_custom_response,
|
66
|
+
title: 'Custom response for order-dispatch hook requests',
|
67
|
+
description: %(
|
68
|
+
A JSON string may be provided here to replace the normal response
|
69
|
+
from the hook request endpoint
|
70
|
+
),
|
71
|
+
type: 'textarea',
|
72
|
+
optional: true
|
63
73
|
|
64
74
|
run do
|
65
75
|
wait(
|
@@ -67,11 +77,13 @@ module DaVinciCRDTestKit
|
|
67
77
|
message: %(
|
68
78
|
**Order Dispatch CDS Service Test**:
|
69
79
|
|
70
|
-
Invoke the order-dispatch hook and send
|
80
|
+
Invoke the order-dispatch hook and send requests to:
|
71
81
|
|
72
82
|
`#{order_dispatch_url}`
|
73
83
|
|
74
|
-
Inferno will process the
|
84
|
+
Inferno will process the requests and return CDS cards if successful.
|
85
|
+
|
86
|
+
[Click here](#{resume_pass_url}?token=order-dispatch%20#{iss}) when you have finished submitting requests.
|
75
87
|
)
|
76
88
|
)
|
77
89
|
end
|
@@ -7,10 +7,11 @@ module DaVinciCRDTestKit
|
|
7
7
|
id :crd_order_select_request
|
8
8
|
title 'Request received for order-select hook'
|
9
9
|
description %(
|
10
|
-
This test waits for
|
11
|
-
hook
|
10
|
+
This test waits for multiple incoming [order-select](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-select)
|
11
|
+
hook requests and responds to the client with the response types selected as an input.
|
12
12
|
)
|
13
|
-
|
13
|
+
|
14
|
+
config options: { accepts_multiple_requests: true }
|
14
15
|
|
15
16
|
input :iss
|
16
17
|
input :order_select_selected_response_types,
|
@@ -20,7 +21,8 @@ module DaVinciCRDTestKit
|
|
20
21
|
response type that will be returned for this hook is the `Instructions` card type.
|
21
22
|
),
|
22
23
|
type: 'checkbox',
|
23
|
-
default: ['instructions'],
|
24
|
+
default: ['coverage_information', 'external_reference', 'instructions'],
|
25
|
+
optional: true,
|
24
26
|
options: {
|
25
27
|
list_options: [
|
26
28
|
{
|
@@ -57,6 +59,14 @@ module DaVinciCRDTestKit
|
|
57
59
|
}
|
58
60
|
]
|
59
61
|
}
|
62
|
+
input :order_select_custom_response,
|
63
|
+
title: 'Custom response for order-select hook requests',
|
64
|
+
description: %(
|
65
|
+
A JSON string may be provided here to replace the normal response
|
66
|
+
from the hook request endpoint
|
67
|
+
),
|
68
|
+
type: 'textarea',
|
69
|
+
optional: true
|
60
70
|
|
61
71
|
run do
|
62
72
|
wait(
|
@@ -64,11 +74,13 @@ module DaVinciCRDTestKit
|
|
64
74
|
message: %(
|
65
75
|
**Order Select CDS Service Test**:
|
66
76
|
|
67
|
-
Invoke the order-select hook and send
|
77
|
+
Invoke the order-select hook and send requests to:
|
68
78
|
|
69
79
|
`#{order_select_url}`
|
70
80
|
|
71
|
-
Inferno will process the
|
81
|
+
Inferno will process the requests and return CDS cards if successful.
|
82
|
+
|
83
|
+
[Click here](#{resume_pass_url}?token=order-select%20#{iss}) when you have finished submitting requests.
|
72
84
|
)
|
73
85
|
)
|
74
86
|
end
|
@@ -7,13 +7,14 @@ module DaVinciCRDTestKit
|
|
7
7
|
id :crd_order_sign_request
|
8
8
|
title 'Request received for order-sign hook'
|
9
9
|
description %(
|
10
|
-
This test waits for
|
11
|
-
hook
|
10
|
+
This test waits for multiple incoming [order-sign](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-sign)
|
11
|
+
hook requests and responds to the client with the response types selected as an input. This hook is a 'primary'
|
12
12
|
hook, meaning that CRD Servers SHALL, at minimum, return a [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-ext-coverage-information.html)
|
13
13
|
system action for these hooks, even if the response indicates that further information is needed or that the
|
14
14
|
level of detail provided is insufficient to determine coverage.
|
15
15
|
)
|
16
|
-
|
16
|
+
|
17
|
+
config options: { accepts_multiple_requests: true }
|
17
18
|
|
18
19
|
input :iss
|
19
20
|
input :order_sign_selected_response_types,
|
@@ -23,7 +24,8 @@ module DaVinciCRDTestKit
|
|
23
24
|
response type that will be returned for this hook is the `Coverage Information` card type.
|
24
25
|
),
|
25
26
|
type: 'checkbox',
|
26
|
-
default: ['coverage_information'],
|
27
|
+
default: ['coverage_information', 'external_reference', 'instructions'],
|
28
|
+
optional: true,
|
27
29
|
options: {
|
28
30
|
list_options: [
|
29
31
|
{
|
@@ -60,6 +62,14 @@ module DaVinciCRDTestKit
|
|
60
62
|
}
|
61
63
|
]
|
62
64
|
}
|
65
|
+
input :order_sign_custom_response,
|
66
|
+
title: 'Custom response for order-sign hook requests',
|
67
|
+
description: %(
|
68
|
+
A JSON string may be provided here to replace the normal response
|
69
|
+
from the hook request endpoint
|
70
|
+
),
|
71
|
+
type: 'textarea',
|
72
|
+
optional: true
|
63
73
|
|
64
74
|
run do
|
65
75
|
wait(
|
@@ -67,11 +77,13 @@ module DaVinciCRDTestKit
|
|
67
77
|
message: %(
|
68
78
|
**Order Sign CDS Service Test**:
|
69
79
|
|
70
|
-
Invoke the order-sign hook and send
|
80
|
+
Invoke the order-sign hook and send requests to:
|
71
81
|
|
72
82
|
`#{order_sign_url}`
|
73
83
|
|
74
|
-
Inferno will process the
|
84
|
+
Inferno will process the requests and return CDS cards if successful.
|
85
|
+
|
86
|
+
[Click here](#{resume_pass_url}?token=order-sign%20#{iss}) when you have finished submitting requests.
|
75
87
|
)
|
76
88
|
)
|
77
89
|
end
|