davinci_pdex_test_kit 0.10.0 → 0.10.1
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.
- checksums.yaml +4 -4
- data/lib/davinci_pdex_test_kit/mock_server.rb +42 -13
- data/lib/davinci_pdex_test_kit/pdex_payer_client/client_validation_test.rb +13 -50
- data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/initial_scratch_storing.rb +7 -9
- data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/initial_wait_test.rb +2 -0
- data/lib/davinci_pdex_test_kit/pdex_payer_client_suite.rb +15 -5
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{coverage_to_link_has_minimal_data_test.rb → coverage_to_link_minimal_data_validation.rb} +28 -3
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{coverage_to_link_must_support_test.rb → coverage_to_link_must_support_validation.rb} +28 -2
- data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit_group.rb +2 -2
- data/lib/davinci_pdex_test_kit/pdex_payer_server/export_patient_group.rb +8 -33
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{abstract_member_match_request_local_references_test.rb → member_match_request_local_references_validation.rb} +31 -5
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{abstract_member_match_request_conformance_test.rb → member_match_request_profile_validation.rb} +30 -3
- data/lib/davinci_pdex_test_kit/pdex_payer_server/multiple_member_matches_group.rb +10 -13
- data/lib/davinci_pdex_test_kit/pdex_payer_server/no_member_matches_group.rb +10 -15
- data/lib/davinci_pdex_test_kit/pdex_payer_server/patient_operation_in_capability_statement_validation.rb +59 -0
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_clinical_data.rb → workflow_clinical_data_group.rb} +4 -4
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_everything.rb → workflow_everything_group.rb} +10 -24
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_export.rb → workflow_export_group.rb} +2 -2
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_member_match.rb → workflow_member_match_group.rb} +23 -36
- data/lib/davinci_pdex_test_kit/pdex_payer_server_suite.rb +13 -12
- data/lib/davinci_pdex_test_kit/tags.rb +3 -1
- data/lib/davinci_pdex_test_kit/urls.rb +14 -4
- data/lib/davinci_pdex_test_kit/version.rb +1 -1
- metadata +25 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7e3411ffd5e3404e6a91b2717f1bef55706856f3b2ff240b285305aa171f308
|
4
|
+
data.tar.gz: 46503fe353d59752b9c1fb607e7bfd9ae5c66535a4a70e3f21f16ddeac2049fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1de8d2ae27f2250c259517e878b8d5b45239525f09b7a6091fd317dd4dfa8172291829882c2eb7bfb5fe509f53d50034acdbec6c700a969f6468ee98daacab3b
|
7
|
+
data.tar.gz: 89898d10b981dae40d94f949b1b95a6d19e65c8fe2f21e7ff6155e436a106854de78803022a48c1c2a05f504ad20e64d7c85ea06a596d9daf331dd6a1e04c391
|
@@ -17,7 +17,7 @@ module DaVinciPDexTestKit
|
|
17
17
|
@server_proxy ||= Faraday.new(
|
18
18
|
url: ENV.fetch('FHIR_REFERENCE_SERVER'),
|
19
19
|
params: {},
|
20
|
-
headers: {'Content-Type' => 'application/json', 'Authorization' => 'Bearer SAMPLE_TOKEN'},
|
20
|
+
headers: {'Content-Type' => 'application/json', 'Authorization' => 'Bearer SAMPLE_TOKEN', 'Host' => ENV.fetch('HOST_HEADER')},
|
21
21
|
)
|
22
22
|
end
|
23
23
|
|
@@ -60,16 +60,38 @@ module DaVinciPDexTestKit
|
|
60
60
|
request.response_body = replace_bundle_urls(FHIR.from_contents(response.body)).to_json
|
61
61
|
end
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
63
|
+
def export_response(request, test = nil, test_result = nil)
|
64
|
+
headers_as_hash = request.request_headers.map { |header| {"#{header.name}": header.value}}.reduce({}) { |reduced, curr| reduced.merge(curr)}
|
65
|
+
response = server_proxy.get do |req|
|
66
|
+
req.url 'Group/pdex-Group/$export' #TODO: change from static response
|
67
|
+
req.headers = headers_as_hash.merge(server_proxy.headers)
|
68
|
+
end
|
69
|
+
request.status = response.status
|
70
|
+
request.response_headers = response.env.response_headers
|
71
|
+
request.response_header("content-location").value.gsub!(/(.*)\?/, "#{new_link}/$export-poll-status?")
|
72
|
+
request.response_body = response.body
|
73
|
+
end
|
74
|
+
|
75
|
+
def export_status_response(request, test = nil, test_result = nil)
|
76
|
+
headers_as_hash = request.request_headers.map { |header| {"#{header.name}": header.value}}.reduce({}) { |reduced, curr| reduced.merge(curr)}
|
77
|
+
response = server_proxy.get do |req|
|
78
|
+
req.url '$export-poll-status'
|
79
|
+
req.params = request.query_parameters
|
80
|
+
req.headers = headers_as_hash.merge(server_proxy.headers)
|
81
|
+
end
|
82
|
+
request.status = response.status
|
83
|
+
request.response_headers = response.env.response_headers
|
84
|
+
request.response_body = response.status.to_i == 200 ? replace_export_urls(JSON.parse(response.body)).to_json : response.body
|
85
|
+
request.response_header("content-length").value = request.response_body.length
|
86
|
+
end
|
87
|
+
|
88
|
+
def binary_read_response(request, test = nil, test_result = nil)
|
89
|
+
binary_id = request.url.split('/').last
|
90
|
+
response = server_proxy.get('Binary/'+binary_id)
|
91
|
+
request.status = response.status
|
92
|
+
request.response_headers = response.headers
|
93
|
+
request.response_body = response.body
|
94
|
+
end
|
73
95
|
|
74
96
|
def member_match_response(request, test = nil, test_result = nil)
|
75
97
|
#remove token from request as well
|
@@ -170,7 +192,7 @@ module DaVinciPDexTestKit
|
|
170
192
|
|
171
193
|
def replace_bundle_urls(bundle)
|
172
194
|
reference_server_base = ENV.fetch('FHIR_REFERENCE_SERVER')
|
173
|
-
bundle
|
195
|
+
bundle&.link.map! {|link| {relation: link.relation, url: link.url.gsub(reference_server_base, new_link)}}
|
174
196
|
bundle&.entry&.map! do |bundled_resource|
|
175
197
|
{fullUrl: bundled_resource.fullUrl.gsub(reference_server_base, new_link),
|
176
198
|
resource: bundled_resource.resource,
|
@@ -180,8 +202,15 @@ module DaVinciPDexTestKit
|
|
180
202
|
bundle
|
181
203
|
end
|
182
204
|
|
205
|
+
def replace_export_urls(export_status_output)
|
206
|
+
reference_server_base = ENV.fetch('FHIR_REFERENCE_SERVER')
|
207
|
+
export_status_output['output'].map! { |binary| {type: binary["type"], url: binary["url"].gsub(reference_server_base, new_link)} }
|
208
|
+
export_status_output['request'] = new_link + '/Patient/$export'
|
209
|
+
export_status_output
|
210
|
+
end
|
211
|
+
|
183
212
|
def new_link
|
184
|
-
"#{Inferno::Application['base_url']}
|
213
|
+
"#{Inferno::Application['base_url']}\/custom\/pdex_payer_client\/fhir"
|
185
214
|
end
|
186
215
|
|
187
216
|
# @private
|
@@ -14,54 +14,13 @@ module DaVinciPDexTestKit
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
# ndjson_list = JSON.parse(export_payload)
|
21
|
-
# request_resources = ndjson_list['output'].map do |resource_binary|
|
22
|
-
# retrieved_resources = Faraday.new(
|
23
|
-
# url: resource_binary['url'],
|
24
|
-
# headers: {'Content-Type' => 'application/json',
|
25
|
-
# 'Authorization' => 'Bearer SAMPLE_TOKEN'}
|
26
|
-
# ).get
|
27
|
-
# connect_bundle(retrieved_resources.env.response_body)
|
28
|
-
# end
|
29
|
-
# puts request_resources
|
30
|
-
# request_resources.flatten
|
31
|
-
# else
|
32
|
-
# nil
|
33
|
-
# end
|
34
|
-
# end
|
35
|
-
|
36
|
-
# def connect_bundle(export_binary)
|
37
|
-
# export_binary.split(/(?<=}\n)(?={)/).map { |str| FHIR.from_contents(str)}
|
38
|
-
# end
|
39
|
-
|
40
|
-
# def collect_export_payload
|
41
|
-
# url = export_request&.response_header('content-location')&.value
|
42
|
-
# attempts = 0
|
43
|
-
# return nil if url.nil?
|
44
|
-
# while attempts < 5
|
45
|
-
# request_attempt = Faraday.new(
|
46
|
-
# url: url,
|
47
|
-
# headers: {'Content-Type' => 'application/json',
|
48
|
-
# 'Authorization' => 'Bearer SAMPLE_TOKEN',
|
49
|
-
# 'Prefer' => 'respond-async',
|
50
|
-
# 'Accept' => 'application/fhir+json'}
|
51
|
-
# ).get
|
52
|
-
# if request_attempt.status != 200
|
53
|
-
# attempts += 1
|
54
|
-
# sleep(2)
|
55
|
-
# else
|
56
|
-
# return request_attempt.env.response_body
|
57
|
-
# end
|
58
|
-
# end
|
59
|
-
# return nil
|
60
|
-
# end
|
17
|
+
def connect_bundle(export_binary)
|
18
|
+
export_binary.split(/(?<=}\n)(?={)/).map { |str| FHIR.from_contents(str)}
|
19
|
+
end
|
61
20
|
|
62
|
-
|
63
|
-
|
64
|
-
|
21
|
+
def export_resources
|
22
|
+
@export_resources ||= (load_tagged_requests(BINARY_TAG).map { |binary_read| binary_read.response_body.split("\n") }.flatten).map { |resource_in_binary| FHIR.from_contents(resource_in_binary)}
|
23
|
+
end
|
65
24
|
|
66
25
|
def previous_clinical_data_requests
|
67
26
|
@previous_clinical_data_requests ||= load_tagged_requests(SUBMIT_TAG) + [everything_request].compact
|
@@ -75,9 +34,13 @@ module DaVinciPDexTestKit
|
|
75
34
|
@member_match_request ||= load_tagged_requests(MEMBER_MATCH_TAG).first
|
76
35
|
end
|
77
36
|
|
78
|
-
|
79
|
-
|
80
|
-
|
37
|
+
def export_request
|
38
|
+
@export_request ||= load_tagged_requests(EXPORT_TAG).first
|
39
|
+
end
|
40
|
+
|
41
|
+
def export_status_request
|
42
|
+
@export_status_request ||= load_tagged_requests(EXPORT_STATUS_TAG).first
|
43
|
+
end
|
81
44
|
|
82
45
|
# def patient_id_from_match_request
|
83
46
|
# @patient_id_from_match_request ||= member_match_request ? "999" : nil #TODO: Change from static response
|
@@ -17,15 +17,13 @@ module DaVinciPDexTestKit
|
|
17
17
|
scratch[resource.resourceType.to_sym] |= [resource]
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
# info "Found an $export request, but no resources found. It may not have had enough time to build"
|
28
|
-
# end
|
20
|
+
if !export_resources.empty?
|
21
|
+
info "Attempted an $export request"
|
22
|
+
export_resources.each do |resource|
|
23
|
+
scratch[resource.resourceType.to_sym] ||= []
|
24
|
+
scratch[resource.resourceType.to_sym] |= [resource]
|
25
|
+
end
|
26
|
+
end
|
29
27
|
if everything_request
|
30
28
|
info "Attempted an $everything request"
|
31
29
|
end
|
data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/initial_wait_test.rb
CHANGED
@@ -19,6 +19,8 @@ module DaVinciPDexTestKit
|
|
19
19
|
Submit PDex requests via at least one of the following methods:
|
20
20
|
* Single Resource API: `#{submit_url}`, with `:endpoint` replaced with the endpoint you want to reach
|
21
21
|
* $everything method: `#{everything_url}`, with `:patient` replaced with the patient you are matching
|
22
|
+
* $export method: `#{export_url}`, see workflow process at the [Bulk Data IG](https://hl7.org/fhir/uv/bulkdata/STU2/)
|
23
|
+
* $export-poll-status: `#{export_status_url}`, then continue to make reads from the binaries if a payload is delivered
|
22
24
|
|
23
25
|
and [click here](#{resume_clinical_data_url}?token=#{access_token}) when done.
|
24
26
|
)
|
@@ -88,21 +88,31 @@ module DaVinciPDexTestKit
|
|
88
88
|
resumes: method(:test_resumes?) do |request|
|
89
89
|
PDexPayerClientSuite.extract_bearer_token(request)
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
record_response_route :get, SUBMIT_PATH, SUBMIT_TAG, method(:claim_response),
|
93
93
|
resumes: method(:test_resumes?) do |request|
|
94
94
|
PDexPayerClientSuite.extract_bearer_token(request)
|
95
95
|
end
|
96
96
|
|
97
|
+
record_response_route :get, BINARY_PATH, BINARY_TAG, method(:binary_read_response),
|
98
|
+
resumes: method(:test_resumes?) do |request|
|
99
|
+
PDexPayerClientSuite.extract_bearer_token(request)
|
100
|
+
end
|
101
|
+
|
97
102
|
record_response_route :get, EVERYTHING_PATH, EVERYTHING_TAG, method(:everything_response),
|
98
103
|
resumes: method(:test_resumes?) do |request|
|
99
104
|
PDexPayerClientSuite.extract_bearer_token(request)
|
100
105
|
end
|
101
106
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
107
|
+
record_response_route :get, EXPORT_PATH, EXPORT_TAG, method(:export_response),
|
108
|
+
resumes: method(:test_resumes?) do |request|
|
109
|
+
PDexPayerClientSuite.extract_bearer_token(request)
|
110
|
+
end
|
111
|
+
|
112
|
+
record_response_route :get, EXPORT_STATUS_PATH, EXPORT_STATUS_TAG, method(:export_status_response),
|
113
|
+
resumes: method(:test_resumes?) do |request|
|
114
|
+
PDexPayerClientSuite.extract_bearer_token(request)
|
115
|
+
end
|
106
116
|
|
107
117
|
record_response_route :post, MEMBER_MATCH_PATH, MEMBER_MATCH_TAG, method(:member_match_response),
|
108
118
|
resumes: method(:test_resumes?) do |request|
|
@@ -1,9 +1,34 @@
|
|
1
1
|
|
2
2
|
module DaVinciPDexTestKit
|
3
3
|
module PDexPayerServer
|
4
|
-
class CoverageToLinkHasMinimalDataTest < Inferno::Test
|
5
4
|
|
6
|
-
|
5
|
+
# Factorized test for Member Match Request CoverageToLink parameter validation on PDex v2.0.0 and HRex v1.0.0.
|
6
|
+
#
|
7
|
+
# See https://hl7.org/fhir/us/davinci-hrex/STU1/OperationDefinition-member-match.html#notes.
|
8
|
+
#
|
9
|
+
# ==== Inputs
|
10
|
+
#
|
11
|
+
# +member_match_request+ - Parameters FHIR resource JSON text with CoverageToLink parameter
|
12
|
+
#
|
13
|
+
# ==== Outputs
|
14
|
+
#
|
15
|
+
# (none)
|
16
|
+
#
|
17
|
+
# ==== Required Config
|
18
|
+
#
|
19
|
+
# (none)
|
20
|
+
#
|
21
|
+
# ==== Required Scratch
|
22
|
+
#
|
23
|
+
# (none)
|
24
|
+
#
|
25
|
+
# ==== Notes
|
26
|
+
#
|
27
|
+
# Skips if no CoverageToLink parameter provided.
|
28
|
+
#
|
29
|
+
class CoverageToLinkMinimalDataValidation < Inferno::Test
|
30
|
+
|
31
|
+
id :pdex_coverage_to_link_minimal_data_validation
|
7
32
|
title '[USER INPUT VALIDATION] CoverageToLink parameter should not include any data elements not marked as mustSupport'
|
8
33
|
optional
|
9
34
|
description %{
|
@@ -45,7 +70,7 @@ module DaVinciPDexTestKit
|
|
45
70
|
assert !coverage.network, 'CoverageToLink parameter has unecessary network field'
|
46
71
|
assert coverage.costToBeneficiary.nil? || coverage.costToBeneficiary.empty?, 'CoverageToLink parameter has unnecessary costToBeneficiary field'
|
47
72
|
assert coverage.subrogation.nil?, 'CoverageToLink parameter has unnecessary subrogation field'
|
48
|
-
assert
|
73
|
+
assert coverage.contract.nil? || coverage.contract.empty?, 'CoverageToLink parameter has uncessary contract field'
|
49
74
|
end
|
50
75
|
|
51
76
|
end
|
@@ -1,9 +1,35 @@
|
|
1
1
|
|
2
2
|
module DaVinciPDexTestKit
|
3
3
|
module PDexPayerServer
|
4
|
-
class CoverageToLinkMustSupportTest < Inferno::Test
|
5
4
|
|
6
|
-
|
5
|
+
# Factorized test for Member Match Request CoverageToLink parameter validation on PDex v2.0.0 and HRex v1.0.0.
|
6
|
+
#
|
7
|
+
# See Documentation for CoverageToLink parameter at
|
8
|
+
# https://hl7.org/fhir/us/davinci-hrex/STU1/OperationDefinition-member-match.html#membermatch
|
9
|
+
#
|
10
|
+
# ==== Inputs
|
11
|
+
#
|
12
|
+
# +member_match_request+ - Parameters FHIR resource JSON text with CoverageToLink parameter
|
13
|
+
#
|
14
|
+
# ==== Outputs
|
15
|
+
#
|
16
|
+
# (none)
|
17
|
+
#
|
18
|
+
# ==== Required Config
|
19
|
+
#
|
20
|
+
# (none)
|
21
|
+
#
|
22
|
+
# ==== Required Scratch
|
23
|
+
#
|
24
|
+
# (none)
|
25
|
+
#
|
26
|
+
# ==== Notes
|
27
|
+
#
|
28
|
+
# Fails if no CoverageToLink parameter provided.
|
29
|
+
#
|
30
|
+
class CoverageToLinkMustSupportValidation < Inferno::Test
|
31
|
+
|
32
|
+
id :pdex_coverage_to_link_must_support_validation
|
7
33
|
title '[USER INPUT VALIDATION] CoverageToLink parameter is optional for generic FHIR clients, but required for Payer systems.'
|
8
34
|
description 'See [CoverageToLink parameter documentation](https://hl7.org/fhir/us/davinci-hrex/STU1/OperationDefinition-member-match.html).'
|
9
35
|
optional
|
@@ -17,7 +17,8 @@ module DaVinciPDexTestKit
|
|
17
17
|
module PDexPayerServer
|
18
18
|
|
19
19
|
# PDex PriorAuthorization Profile for ExplanationOfBenefit Resource Test Group
|
20
|
-
class
|
20
|
+
class ExplanationOfBenefitGroup < Inferno::TestGroup
|
21
|
+
id :pdex_explanation_of_benefit_group
|
21
22
|
title 'PDex Prior Authorization Tests'
|
22
23
|
short_description 'Verify support for the server capabilities required by the PDex Prior Authorization Profile.'
|
23
24
|
description %(
|
@@ -81,7 +82,6 @@ The test will attempt to read each reference found and will fail if no
|
|
81
82
|
read succeeds.
|
82
83
|
)
|
83
84
|
|
84
|
-
id :pdex_explanation_of_benefit
|
85
85
|
run_as_group
|
86
86
|
|
87
87
|
def self.metadata
|
@@ -2,12 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'tls_test_kit'
|
4
4
|
|
5
|
-
require 'bulk_data_test_kit/v1.0.1/bulk_data_export_operation_support_test'
|
5
|
+
# require 'bulk_data_test_kit/v1.0.1/bulk_data_export_operation_support_test'
|
6
6
|
require 'bulk_data_test_kit/v1.0.1/bulk_data_no_auth_test'
|
7
7
|
require 'bulk_data_test_kit/v1.0.1/bulk_data_export_kick_off_test'
|
8
8
|
require 'bulk_data_test_kit/v1.0.1/bulk_data_status_check_test'
|
9
9
|
require 'bulk_data_test_kit/v1.0.1/bulk_data_output_check_test'
|
10
10
|
|
11
|
+
require_relative 'patient_operation_in_capability_statement_validation'
|
12
|
+
|
11
13
|
module DaVinciPDexTestKit
|
12
14
|
module PDexPayerServer
|
13
15
|
class ExportPatientGroup < Inferno::TestGroup
|
@@ -37,38 +39,11 @@ module DaVinciPDexTestKit
|
|
37
39
|
|
38
40
|
output :patient_requires_access_token, :patient_status_output, :patient_bulk_download_url
|
39
41
|
|
40
|
-
test from: :
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
Given flexibility in the FHIR specification for declaring constrained
|
47
|
-
OperationDefinitions, this test only verifies that the server declares
|
48
|
-
any operation on the Patient resource. It does not verify that it
|
49
|
-
declares the standard Patient export OperationDefinition provided in the
|
50
|
-
Bulk Data specification, nor does it attempt to resolve any non-standard
|
51
|
-
OperationDefinitions to verify if it is a constrained version of the
|
52
|
-
standard OperationDefintion.
|
53
|
-
|
54
|
-
This test will provide a warning if no operations are declared at
|
55
|
-
`Patient/$export`, via the
|
56
|
-
`CapabilityStatement.rest.resource.operation.name` element. It will
|
57
|
-
also provide an informational message if an operation on the Patient
|
58
|
-
resource exists, but does not point to the standard OperationDefinition
|
59
|
-
canonical URL:
|
60
|
-
http://hl7.org/fhir/uv/bulkdata/OperationDefinition/patient-export
|
61
|
-
|
62
|
-
Additionally, this test provides a warning if the bulk data server does
|
63
|
-
not include the following URL in its `CapabilityStatement.instantiates`
|
64
|
-
element: http://hl7.org/fhir/uv/bulkdata/CapabilityStatement/bulk-data
|
65
|
-
DESCRIPTION
|
66
|
-
id :bulk_data_patient_export_operation_support
|
67
|
-
|
68
|
-
config(
|
69
|
-
options: { resource_type: 'Patient', require_absolute_urls_in_output: true }
|
70
|
-
)
|
71
|
-
end
|
42
|
+
test from: :patient_operation_in_capability_statement_validation,
|
43
|
+
title: 'Bulk Data Server declares support for Patient export operation in CapabilityStatement',
|
44
|
+
config: {
|
45
|
+
options: { operation_name: 'export', operation_url: 'http://hl7.org/fhir/uv/bulkdata/OperationDefinition/patient-export' }
|
46
|
+
}
|
72
47
|
|
73
48
|
test from: :bulk_data_kick_off,
|
74
49
|
id: :pdex_export_patient_kick_off,
|
@@ -1,18 +1,44 @@
|
|
1
1
|
module DaVinciPDexTestKit
|
2
2
|
module PDexPayerServer
|
3
3
|
|
4
|
-
#
|
5
|
-
|
6
|
-
|
4
|
+
# Factorized test for Member Match Request Profile local references on PDex v2.0.0 and HRex v1.0.0.
|
5
|
+
#
|
6
|
+
# See http://hl7.org/fhir/us/davinci-hrex/STU1/OperationDefinition-member-match.html#resolving-parameter-references
|
7
|
+
#
|
8
|
+
# ==== Inputs
|
9
|
+
#
|
10
|
+
# +member_match_request+ - *Optional:* FHIR Parameters resource JSON text
|
11
|
+
#
|
12
|
+
# ==== Outputs
|
13
|
+
#
|
14
|
+
# (none)
|
15
|
+
#
|
16
|
+
# ==== Required Config
|
17
|
+
#
|
18
|
+
# (none)
|
19
|
+
#
|
20
|
+
# ==== Required Scratch
|
21
|
+
#
|
22
|
+
# (none)
|
23
|
+
#
|
24
|
+
# ==== Notes
|
25
|
+
#
|
26
|
+
# Skips if no input provided. This test does not validate all requirements of a Member Match Request
|
27
|
+
# resource.
|
28
|
+
#
|
29
|
+
class MemberMatchRequestLocalReferencesValidation < Inferno::Test
|
30
|
+
id :pdex_member_match_request_local_references_validation
|
31
|
+
|
7
32
|
title '[USER INPUT VALIDATION] Member match request only uses local references'
|
33
|
+
|
8
34
|
description %{
|
9
35
|
This test confirms that all Patient references inside the Consent and CoverageToMatch parameters are local references to the MemberPatient
|
10
36
|
parameter. See
|
11
|
-
[resolving parameter references](
|
37
|
+
[resolving parameter references](https://hl7.org/fhir/us/davinci-hrex/STU1/OperationDefinition-member-match.html#resolving-parameter-references)
|
12
38
|
from the HRex 1.0.0. Implementation Guide.
|
13
39
|
}
|
14
40
|
|
15
|
-
input :member_match_request
|
41
|
+
input :member_match_request
|
16
42
|
|
17
43
|
# @param member_match_request_parameters [FHIR::Parameters]
|
18
44
|
def assert_local_patient_references(member_match_request_parameters)
|
@@ -1,9 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DaVinciPDexTestKit
|
2
4
|
module PDexPayerServer
|
3
5
|
|
4
|
-
#
|
5
|
-
|
6
|
-
|
6
|
+
# Factorized test for Member Match Request Profile validation on PDex v2.0.0 and HRex v1.0.0.
|
7
|
+
#
|
8
|
+
# http://hl7.org/fhir/us/davinci-hrex/STU1/StructureDefinition-hrex-parameters-member-match-in.html
|
9
|
+
#
|
10
|
+
# ==== Inputs
|
11
|
+
#
|
12
|
+
# +member_match_request+ - *Optional:* JSON text to validate against profile
|
13
|
+
#
|
14
|
+
# ==== Outputs
|
15
|
+
#
|
16
|
+
# (none)
|
17
|
+
#
|
18
|
+
# ==== Required Config
|
19
|
+
#
|
20
|
+
# (none)
|
21
|
+
#
|
22
|
+
# ==== Required Scratch
|
23
|
+
#
|
24
|
+
# (none)
|
25
|
+
#
|
26
|
+
# ==== Notes
|
27
|
+
#
|
28
|
+
# Skips if no input provided. This test does not validate all requirements of a Member Match Request
|
29
|
+
# resource.
|
30
|
+
#
|
31
|
+
class MemberMatchRequestProfileValidation < Inferno::Test
|
32
|
+
id :pdex_member_match_request_profile_validation
|
33
|
+
|
7
34
|
input :member_match_request
|
8
35
|
|
9
36
|
def assert_local_patient_references(member_match_request_parameters)
|
@@ -1,14 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative '
|
3
|
-
require_relative '
|
4
|
-
require_relative '
|
5
|
-
require_relative '
|
2
|
+
require_relative 'member_match_request_profile_validation'
|
3
|
+
require_relative 'member_match_request_local_references_validation'
|
4
|
+
require_relative 'coverage_to_link_minimal_data_validation'
|
5
|
+
require_relative 'coverage_to_link_must_support_validation'
|
6
6
|
|
7
7
|
module DaVinciPDexTestKit
|
8
8
|
module PDexPayerServer
|
9
9
|
class MultipleMemberMatchesGroup < Inferno::TestGroup
|
10
10
|
|
11
|
-
id :
|
11
|
+
id :pdex_multiple_member_matches_group
|
12
12
|
title '$member-match with multiple matches'
|
13
13
|
|
14
14
|
run_as_group
|
@@ -21,8 +21,8 @@ module DaVinciPDexTestKit
|
|
21
21
|
|
22
22
|
group_config = { inputs: { member_match_request: { name: :multiple_member_match_request } } }
|
23
23
|
|
24
|
-
test from: :
|
25
|
-
id :
|
24
|
+
test from: :pdex_member_match_request_profile_validation do
|
25
|
+
id :multiple_member_match_request_profile_test
|
26
26
|
config(group_config)
|
27
27
|
title '[USER INPUT VALIDATION] Member match request for multiple matches is valid'
|
28
28
|
description %{
|
@@ -35,13 +35,10 @@ module DaVinciPDexTestKit
|
|
35
35
|
# Inherits
|
36
36
|
end
|
37
37
|
|
38
|
-
test from: :
|
39
|
-
id :multiple_member_match_request_local_references
|
40
|
-
config(group_config)
|
41
|
-
end
|
38
|
+
test from: :pdex_member_match_request_local_references_validation, config: group_config
|
42
39
|
|
43
|
-
test from: :
|
44
|
-
test from: :
|
40
|
+
test from: :pdex_coverage_to_link_minimal_data_validation, config: group_config
|
41
|
+
test from: :pdex_coverage_to_link_must_support_validation, config: group_config
|
45
42
|
|
46
43
|
test do
|
47
44
|
id :member_match_has_multiple_matches
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative '
|
3
|
-
require_relative '
|
4
|
-
require_relative '
|
5
|
-
require_relative '
|
2
|
+
require_relative 'member_match_request_profile_validation'
|
3
|
+
require_relative 'member_match_request_local_references_validation'
|
4
|
+
require_relative 'coverage_to_link_minimal_data_validation'
|
5
|
+
require_relative 'coverage_to_link_must_support_validation'
|
6
6
|
|
7
7
|
module DaVinciPDexTestKit
|
8
8
|
module PDexPayerServer
|
9
9
|
class NoMemberMatchesGroup < Inferno::TestGroup
|
10
|
-
id :
|
10
|
+
id :pdex_no_member_matches_group
|
11
11
|
title '$member-match with no matches'
|
12
12
|
|
13
13
|
run_as_group
|
@@ -20,8 +20,8 @@ module DaVinciPDexTestKit
|
|
20
20
|
|
21
21
|
group_config = { inputs: { member_match_request: { name: :no_member_match_request } } }
|
22
22
|
|
23
|
-
test from: :
|
24
|
-
id :
|
23
|
+
test from: :pdex_member_match_request_profile_validation do
|
24
|
+
id :no_member_match_request_profile_test
|
25
25
|
config(group_config)
|
26
26
|
|
27
27
|
title '[USER INPUT VALIDATION] Member match request for no matches is valid'
|
@@ -31,17 +31,12 @@ module DaVinciPDexTestKit
|
|
31
31
|
ensuring subsequent tests can accurately simulate content. It also checks conformance to the [Parameters Resource](https://hl7.org/fhir/R4/parameters.html),
|
32
32
|
mandatory elements, and terminology. It also checks that the Patient reference with the Consent and CoverageToMatch parameters are local references.
|
33
33
|
}
|
34
|
-
|
35
|
-
# Inherits run
|
36
34
|
end
|
37
35
|
|
38
|
-
test from: :
|
39
|
-
id :no_member_match_request_local_references
|
40
|
-
config(group_config)
|
41
|
-
end
|
36
|
+
test from: :pdex_member_match_request_local_references_validation, config: group_config
|
42
37
|
|
43
|
-
test from: :
|
44
|
-
test from: :
|
38
|
+
test from: :pdex_coverage_to_link_minimal_data_validation, config: group_config
|
39
|
+
test from: :pdex_coverage_to_link_must_support_validation, config: group_config
|
45
40
|
|
46
41
|
|
47
42
|
test do
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DaVinciPDexTestKit
|
4
|
+
module PDexPayerServer
|
5
|
+
# Factorized test for asserting a patient resource opeartion in a Capability Statement
|
6
|
+
#
|
7
|
+
# ==== Inputs
|
8
|
+
#
|
9
|
+
# (none)
|
10
|
+
#
|
11
|
+
# ==== Outputs
|
12
|
+
#
|
13
|
+
# (none)
|
14
|
+
#
|
15
|
+
# ==== Required Config
|
16
|
+
#
|
17
|
+
# options:
|
18
|
+
# operation_name: operation to check for, i.e: 'member-match'
|
19
|
+
# operation_url: operation definition canonical URL
|
20
|
+
#
|
21
|
+
# ==== Required Scratch
|
22
|
+
#
|
23
|
+
# (none)
|
24
|
+
#
|
25
|
+
# ==== Notes
|
26
|
+
#
|
27
|
+
# Requires an Inferno fhir client configured.
|
28
|
+
#
|
29
|
+
class PatientOperationInCapabilityStatementValidation < Inferno::Test
|
30
|
+
id :patient_operation_in_capability_statement_validation
|
31
|
+
|
32
|
+
description %{
|
33
|
+
The [CapabilityStatement](https://hl7.org/fhir/R4/capabilitystatement.html) must declare support for the
|
34
|
+
patient resource-level operation in `CapabilityStatement.rest[].resource(type: Patient).operation` by
|
35
|
+
having both name (without `$`) and definition (canonical URL). See the operation definition for these
|
36
|
+
values.
|
37
|
+
|
38
|
+
The operation shall only be declared in one object in the `rest` array.
|
39
|
+
}
|
40
|
+
|
41
|
+
run do
|
42
|
+
fhir_get_capability_statement
|
43
|
+
|
44
|
+
assert_response_status(200)
|
45
|
+
assert_resource_type(:capability_statement)
|
46
|
+
|
47
|
+
assert(
|
48
|
+
resource.rest&.one? do |rest_metadata|
|
49
|
+
rest_metadata.resource&.find{|resource_metadata| resource_metadata.type == 'Patient'}
|
50
|
+
&.operation&.any? do |operation_metadata|
|
51
|
+
operation_metadata.name == config.options[:operation_name] &&
|
52
|
+
operation_metadata.definition == config.options[:operation_url]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
module DaVinciPDexTestKit
|
4
4
|
module PDexPayerServer
|
5
|
-
class
|
6
|
-
id :
|
5
|
+
class WorkflowClinicalDataGroup < Inferno::TestGroup
|
6
|
+
id :pdex_workflow_clinical_data_group
|
7
7
|
title 'Server can respond to search requests for clinical data on the matched patient'
|
8
8
|
short_title 'Clinical data query'
|
9
9
|
description %{
|
@@ -26,7 +26,7 @@ module DaVinciPDexTestKit
|
|
26
26
|
optional: true
|
27
27
|
|
28
28
|
test do
|
29
|
-
id :
|
29
|
+
id :workflow_clinical_encounter_query_test
|
30
30
|
title 'Server can provide clinical Encounter data from matched member identifier'
|
31
31
|
description %{
|
32
32
|
Server receives request `GET [baseURL]/Encounter?subject=Patient/[id]` and returns 200.
|
@@ -44,7 +44,7 @@ module DaVinciPDexTestKit
|
|
44
44
|
end
|
45
45
|
|
46
46
|
test do
|
47
|
-
id :
|
47
|
+
id :workflow_clinical_encounter_test
|
48
48
|
title 'Server returned Search bundle with valid Encounter data'
|
49
49
|
description %{
|
50
50
|
Server returned search Bundle of Encounters with least 1 resource entry.
|
@@ -1,11 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'patient_operation_in_capability_statement_validation'
|
4
|
+
|
3
5
|
module DaVinciPDexTestKit
|
4
6
|
module PDexPayerServer
|
5
|
-
class
|
7
|
+
class WorkflowEverythingGroup < Inferno::TestGroup
|
6
8
|
title 'Server can respond to $everything requests on matched patient'
|
7
9
|
short_title '$everything'
|
8
|
-
id :
|
10
|
+
id :pdex_workflow_everything_group
|
9
11
|
optional
|
10
12
|
description %{
|
11
13
|
# Background
|
@@ -25,30 +27,15 @@ module DaVinciPDexTestKit
|
|
25
27
|
description: 'Manual Patient ID for testing Clinical Query and $everything $export without $member-match.',
|
26
28
|
optional: true
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
fhir_get_capability_statement
|
34
|
-
|
35
|
-
assert_response_status 200
|
36
|
-
assert(
|
37
|
-
resource.rest.one? do |rest_metadata|
|
38
|
-
rest_metadata.resource.select { |resource_metadata| resource_metadata.type == 'Patient' }.first
|
39
|
-
.operation.any? do |operation_metadata|
|
40
|
-
operation_metadata.name == 'everything' && operation_metadata.definition == 'http://hl7.org/fhir/OperationDefinition/Patient-everything'
|
41
|
-
end
|
42
|
-
end
|
43
|
-
)
|
44
|
-
end
|
45
|
-
end
|
30
|
+
test from: :patient_operation_in_capability_statement_validation,
|
31
|
+
title: 'Server declares support for Patient everything operation in CapabilityStatement',
|
32
|
+
config: {
|
33
|
+
options: { operation_name: 'everything', operation_url: 'http://hl7.org/fhir/OperationDefinition/Patient-everything' }
|
34
|
+
}
|
46
35
|
|
47
36
|
test do
|
48
37
|
title 'Server can handle GET /Patient/[ID]/$everything'
|
49
38
|
|
50
|
-
# input :patient_id # borrows properties from workflow_clinical_data
|
51
|
-
|
52
39
|
makes_request :pdex_patient_everything
|
53
40
|
|
54
41
|
run do
|
@@ -69,9 +56,9 @@ module DaVinciPDexTestKit
|
|
69
56
|
uses_request :pdex_patient_everything
|
70
57
|
|
71
58
|
run do
|
72
|
-
skip_if response[:status] != 200, 'Skipped because previous test did not pass'
|
73
59
|
skip_if !patient_id
|
74
60
|
'No Patient ID was derived from $member-match nor supplied from user input'
|
61
|
+
skip_if response[:status] != 200, 'Skipped because previous test did not pass'
|
75
62
|
|
76
63
|
assert_valid_resource
|
77
64
|
assert_resource_type(:bundle)
|
@@ -84,7 +71,6 @@ module DaVinciPDexTestKit
|
|
84
71
|
end
|
85
72
|
end
|
86
73
|
|
87
|
-
|
88
74
|
# TODO: convert to attestation
|
89
75
|
# test do
|
90
76
|
# title %{
|
data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_export.rb → workflow_export_group.rb}
RENAMED
@@ -7,8 +7,8 @@ require_relative 'export_validation_group'
|
|
7
7
|
|
8
8
|
module DaVinciTestKit
|
9
9
|
module PDexPayerServer
|
10
|
-
class
|
11
|
-
id :
|
10
|
+
class WorkflowExportGroup < Inferno::TestGroup
|
11
|
+
id :pdex_workflow_export_group
|
12
12
|
title 'Server can respond to FHIR Bulk $export requests on the matched patient'
|
13
13
|
short_title 'Bulk $export'
|
14
14
|
optional
|
@@ -1,15 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative '
|
3
|
-
require_relative '
|
4
|
-
require_relative '
|
5
|
-
require_relative '
|
2
|
+
require_relative 'member_match_request_profile_validation'
|
3
|
+
require_relative 'member_match_request_local_references_validation'
|
4
|
+
require_relative 'coverage_to_link_minimal_data_validation'
|
5
|
+
require_relative 'coverage_to_link_must_support_validation'
|
6
|
+
|
7
|
+
require_relative 'patient_operation_in_capability_statement_validation'
|
6
8
|
|
7
9
|
module DaVinciPDexTestKit
|
8
10
|
module PDexPayerServer
|
9
|
-
class
|
11
|
+
class WorkflowMemberMatchGroup < Inferno::TestGroup
|
10
12
|
title 'Server can return a matching member in response to $member-match request'
|
11
13
|
short_title '$member-match'
|
12
|
-
id :
|
14
|
+
id :pdex_workflow_member_match_group
|
13
15
|
description %{
|
14
16
|
# Background
|
15
17
|
|
@@ -36,35 +38,20 @@ module DaVinciPDexTestKit
|
|
36
38
|
|
37
39
|
run_as_group
|
38
40
|
|
39
|
-
# TODO factorize cap statement tests
|
40
|
-
test do
|
41
|
-
id :member_match_in_capability_statement
|
42
|
-
title 'Server asserts Patient $member_match operation in capability statement.'
|
43
|
-
|
44
|
-
run do
|
45
|
-
fhir_get_capability_statement
|
46
|
-
|
47
|
-
assert_response_status(200)
|
48
|
-
assert_resource_type(:capability_statement)
|
49
|
-
|
50
|
-
assert(
|
51
|
-
resource.rest.one? do |rest_metadata|
|
52
|
-
rest_metadata.resource.select { |resource_metadata| resource_metadata.type == 'Patient' }.first
|
53
|
-
.operation.any? do |operation_metadata|
|
54
|
-
operation_metadata.name == 'member-match' && operation_metadata.definition == 'http://hl7.org/fhir/us/davinci-hrex/OperationDefinition/member-match'
|
55
|
-
end
|
56
|
-
end
|
57
|
-
)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
41
|
input :member_match_request,
|
62
42
|
title: 'Member Match Request for one match',
|
63
43
|
description: "A JSON payload for server's $member-match endpoint that has **exactly one match**",
|
64
44
|
type: 'textarea'
|
65
45
|
|
66
|
-
test from: :
|
67
|
-
|
46
|
+
test from: :patient_operation_in_capability_statement_validation,
|
47
|
+
id: :member_match_operation_in_capability_statement_test,
|
48
|
+
title: 'Server declares support for Patient member match operation in CapabilityStatement',
|
49
|
+
config: {
|
50
|
+
options: { operation_name: 'member-match', operation_url: 'http://hl7.org/fhir/us/davinci-hrex/OperationDefinition/member-match' }
|
51
|
+
}
|
52
|
+
|
53
|
+
test from: :pdex_member_match_request_profile_validation do
|
54
|
+
id :member_match_request_profile_test
|
68
55
|
title '[USER INPUT VALIDATION] Member match request for exactly one match is valid'
|
69
56
|
description %{
|
70
57
|
This test validates the conformity of the user input to the
|
@@ -74,16 +61,16 @@ module DaVinciPDexTestKit
|
|
74
61
|
}
|
75
62
|
end
|
76
63
|
|
77
|
-
test from: :
|
78
|
-
id :
|
64
|
+
test from: :pdex_member_match_request_local_references_validation do
|
65
|
+
id :member_match_request_local_references_test
|
79
66
|
title '[USER INPUT VALIDATION] Member match request only uses local references'
|
80
67
|
end
|
81
68
|
|
82
|
-
test from: :
|
83
|
-
test from: :
|
69
|
+
test from: :pdex_coverage_to_link_minimal_data_validation
|
70
|
+
test from: :pdex_coverage_to_link_must_support_validation
|
84
71
|
|
85
72
|
test do
|
86
|
-
id :
|
73
|
+
id :member_match_on_server_test
|
87
74
|
title 'Server handles $member-match operation successfully'
|
88
75
|
description 'Server receives request `POST [baseURL]/Patient/$member-match` and returns 200'
|
89
76
|
|
@@ -98,7 +85,7 @@ module DaVinciPDexTestKit
|
|
98
85
|
end
|
99
86
|
|
100
87
|
test do
|
101
|
-
id :
|
88
|
+
id :member_match_response_profile_test
|
102
89
|
title 'Server $member-match response conforms to profile'
|
103
90
|
description %{
|
104
91
|
The response body from the previous POST request to $member-match must be valid FHIR JSON conforming to
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'pdex_payer_server/
|
4
|
-
require_relative 'pdex_payer_server/
|
5
|
-
require_relative 'pdex_payer_server/
|
6
|
-
require_relative 'pdex_payer_server/
|
3
|
+
require_relative 'pdex_payer_server/workflow_member_match_group'
|
4
|
+
require_relative 'pdex_payer_server/workflow_clinical_data_group'
|
5
|
+
require_relative 'pdex_payer_server/workflow_everything_group'
|
6
|
+
require_relative 'pdex_payer_server/workflow_export_group'
|
7
7
|
|
8
8
|
require_relative 'pdex_payer_server/no_member_matches_group'
|
9
9
|
require_relative 'pdex_payer_server/multiple_member_matches_group'
|
@@ -12,7 +12,7 @@ require_relative 'pdex_payer_server/explanation_of_benefit_group'
|
|
12
12
|
|
13
13
|
module DaVinciPDexTestKit
|
14
14
|
class PDexPayerServerSuite < Inferno::TestSuite
|
15
|
-
id :
|
15
|
+
id :pdex_payer_server_suite
|
16
16
|
title 'Da Vinci PDex Payer Server Test Suite'
|
17
17
|
description File.read(File.join(__dir__, 'docs', 'payer_server_suite_description_v200.md'))
|
18
18
|
|
@@ -125,10 +125,10 @@ module DaVinciPDexTestKit
|
|
125
125
|
See the corresponding test group's description for the testing methodology of each part.
|
126
126
|
)
|
127
127
|
|
128
|
-
group from: :
|
129
|
-
group from: :
|
130
|
-
group from: :
|
131
|
-
group from: :
|
128
|
+
group from: :pdex_workflow_member_match_group
|
129
|
+
group from: :pdex_workflow_clinical_data_group
|
130
|
+
group from: :pdex_workflow_everything_group
|
131
|
+
group from: :pdex_workflow_export_group
|
132
132
|
end
|
133
133
|
|
134
134
|
group do
|
@@ -157,15 +157,16 @@ module DaVinciPDexTestKit
|
|
157
157
|
|
158
158
|
input_order :url, :credentials, :no_member_match_request, :multiple_member_match_request
|
159
159
|
|
160
|
-
group from: :
|
161
|
-
group from: :
|
160
|
+
group from: :pdex_no_member_matches_group
|
161
|
+
group from: :pdex_multiple_member_matches_group
|
162
162
|
end
|
163
163
|
|
164
164
|
group do
|
165
165
|
title 'PDEX Search and Read API (US Core plus additional PDex resource types)'
|
166
166
|
id :search_and_read_api_coverage
|
167
167
|
|
168
|
-
group from: :
|
168
|
+
group from: :pdex_explanation_of_benefit_group
|
169
|
+
|
169
170
|
# Import all US Core v3.1.1 groups without the Suite
|
170
171
|
Dir.glob(File.join($LOAD_PATH.find { |x| x.match? "us_core_test_kit" }, 'us_core_test_kit/generated/v3.1.1/*_group.rb')).each do |test_group_path|
|
171
172
|
require_relative test_group_path
|
@@ -3,7 +3,9 @@
|
|
3
3
|
module DaVinciPDexTestKit
|
4
4
|
AUTH_TAG = 'pdex_auth'
|
5
5
|
SUBMIT_TAG = 'pdex_submit'
|
6
|
-
|
6
|
+
BINARY_TAG = 'pdex_binary'
|
7
|
+
EXPORT_TAG = 'pdex_export'
|
8
|
+
EXPORT_STATUS_TAG = 'pdex_export_status'
|
7
9
|
EVERYTHING_TAG = 'pdex_everything'
|
8
10
|
MEMBER_MATCH_TAG = 'pdex_member_match'
|
9
11
|
end
|
@@ -2,10 +2,12 @@ module DaVinciPDexTestKit
|
|
2
2
|
TOKEN_PATH = '/mock_auth/token'
|
3
3
|
PATIENT_PATH = '/fhir/Patient'
|
4
4
|
SUBMIT_PATH = '/fhir/:endpoint'
|
5
|
+
BINARY_PATH = '/fhir/Binary/:id'
|
5
6
|
METADATA_PATH = '/fhir/metadata'
|
6
7
|
EVERYTHING_PATH = '/fhir/Patient/:patient/$everything'
|
7
8
|
MEMBER_MATCH_PATH = '/fhir/Patient/$member-match'
|
8
|
-
|
9
|
+
EXPORT_PATH = '/fhir/Patient/$export'
|
10
|
+
EXPORT_STATUS_PATH = '/fhir/$export-poll-status'
|
9
11
|
BASE_FHIR_PATH = '/fhir'
|
10
12
|
RESUME_PASS_PATH = '/resume_pass'
|
11
13
|
RESUME_CLINICAL_DATA_PATH = '/resume_clinical_data'
|
@@ -32,6 +34,10 @@ module DaVinciPDexTestKit
|
|
32
34
|
@submit_url ||= base_url + SUBMIT_PATH
|
33
35
|
end
|
34
36
|
|
37
|
+
def binary_url
|
38
|
+
@binary_url ||= base_url + BINARY_PATH
|
39
|
+
end
|
40
|
+
|
35
41
|
def metadata_url
|
36
42
|
@metadata_url ||= base_url + METADATA_PATH
|
37
43
|
end
|
@@ -44,9 +50,13 @@ module DaVinciPDexTestKit
|
|
44
50
|
@member_match_url ||= base_url + MEMBER_MATCH_PATH
|
45
51
|
end
|
46
52
|
|
47
|
-
|
48
|
-
|
49
|
-
|
53
|
+
def export_url
|
54
|
+
@export_url ||= base_url + EXPORT_PATH
|
55
|
+
end
|
56
|
+
|
57
|
+
def export_status_url
|
58
|
+
@export_status_url ||= base_url + EXPORT_STATUS_PATH
|
59
|
+
end
|
50
60
|
|
51
61
|
def resume_pass_url
|
52
62
|
@resume_pass_url ||= base_url + RESUME_PASS_PATH
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: davinci_pdex_test_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karl Naden
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-
|
13
|
+
date: 2024-07-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: inferno_core
|
@@ -110,6 +110,20 @@ dependencies:
|
|
110
110
|
- - "~>"
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '3.11'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: faker
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '3.4'
|
120
|
+
type: :development
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - "~>"
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '3.4'
|
113
127
|
description: Test Kit for the Da Vinci Payer Data Exchange (PDex) FHIR Implementation
|
114
128
|
Guide
|
115
129
|
email:
|
@@ -161,10 +175,8 @@ files:
|
|
161
175
|
- lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/procedure_clinical_data_request_test.rb
|
162
176
|
- lib/davinci_pdex_test_kit/pdex_payer_client/collection.rb
|
163
177
|
- lib/davinci_pdex_test_kit/pdex_payer_client_suite.rb
|
164
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
165
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
166
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/coverage_to_link_has_minimal_data_test.rb
|
167
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/coverage_to_link_must_support_test.rb
|
178
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/coverage_to_link_minimal_data_validation.rb
|
179
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/coverage_to_link_must_support_validation.rb
|
168
180
|
- lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_id_search_test.rb
|
169
181
|
- lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_identifier_search_test.rb
|
170
182
|
- lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_must_support_test.rb
|
@@ -180,12 +192,15 @@ files:
|
|
180
192
|
- lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit_group.rb
|
181
193
|
- lib/davinci_pdex_test_kit/pdex_payer_server/export_patient_group.rb
|
182
194
|
- lib/davinci_pdex_test_kit/pdex_payer_server/export_validation_group.rb
|
195
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/member_match_request_local_references_validation.rb
|
196
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/member_match_request_profile_validation.rb
|
183
197
|
- lib/davinci_pdex_test_kit/pdex_payer_server/multiple_member_matches_group.rb
|
184
198
|
- lib/davinci_pdex_test_kit/pdex_payer_server/no_member_matches_group.rb
|
185
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
186
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
187
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
188
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
199
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/patient_operation_in_capability_statement_validation.rb
|
200
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/workflow_clinical_data_group.rb
|
201
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/workflow_everything_group.rb
|
202
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/workflow_export_group.rb
|
203
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/workflow_member_match_group.rb
|
189
204
|
- lib/davinci_pdex_test_kit/pdex_payer_server_suite.rb
|
190
205
|
- lib/davinci_pdex_test_kit/pdex_provider_client_suite.rb
|
191
206
|
- lib/davinci_pdex_test_kit/tags.rb
|