carin_for_blue_button_test_kit 0.12.1 → 0.13.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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/c4bb_client_test_suite.rb +227 -0
  3. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/client_claims_data_attestation_test.rb +32 -0
  4. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/coverage_claims_data_request_test.rb +25 -0
  5. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/eob_inpatient_claims_data_request_test.rb +26 -0
  6. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/eob_oral_claims_data_request_test.rb +25 -0
  7. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/eob_outpatient_claims_data_request_test.rb +28 -0
  8. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/eob_pharmacy_claims_data_request_test.rb +25 -0
  9. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/eob_professional_claims_data_request_test.rb +27 -0
  10. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/organization_claims_data_request_test.rb +26 -0
  11. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/patient_claims_data_request_test.rb +24 -0
  12. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/practitioner_claims_data_request_test.rb +25 -0
  13. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/claim_data_request_tests/relatedperson_claims_data_request_test.rb +25 -0
  14. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/client_validation_test.rb +93 -0
  15. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/collection.rb +19 -0
  16. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/endpoints/next_page_endpoint.rb +24 -0
  17. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/endpoints/resource_api_endpoint.rb +74 -0
  18. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/endpoints/resource_id_endpoint.rb +24 -0
  19. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/endpoints/token_endpoint.rb +24 -0
  20. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/initial_wait_test.rb +76 -0
  21. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/metadata/mock_capability_statement.json +535 -0
  22. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/metadata/mock_operation_outcome_resource.json +16 -0
  23. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/mock_server.rb +190 -0
  24. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/required_searches_tests/coverage_required_searches.rb +45 -0
  25. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/required_searches_tests/eob_required_searches.rb +71 -0
  26. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/required_searches_tests/organization_required_searches.rb +47 -0
  27. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/required_searches_tests/patient_required_searches.rb +71 -0
  28. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/required_searches_tests/practitioner_required_searches.rb +47 -0
  29. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/required_searches_tests/relatedperson_required_searches.rb +43 -0
  30. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/tags.rb +7 -0
  31. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/urls.rb +57 -0
  32. data/lib/carin_for_blue_button_test_kit/client/v2.0.0/user_input_response.rb +32 -0
  33. data/lib/carin_for_blue_button_test_kit/version.rb +1 -1
  34. data/lib/carin_for_blue_button_test_kit.rb +1 -0
  35. data/lib/inferno_requirements_tools/tasks/{map_requirements.rb → requirements_coverage.rb} +91 -60
  36. metadata +34 -4
  37. data/lib/inferno_requirements_tools/tasks/collect_requirements.rb +0 -196
@@ -0,0 +1,190 @@
1
+ require_relative 'user_input_response'
2
+ require_relative 'urls'
3
+ require_relative 'collection'
4
+ require_relative 'client_validation_test'
5
+ # require_relative 'metadata/mock_capability_statement'
6
+
7
+ module CarinForBlueButtonTestKit
8
+ # Serve responses to CARIN requests
9
+ #
10
+ # Note that there are numerous expected validation issues that can safely be ignored.
11
+ # See here for full list: https://hl7.org/fhir/us/carin-bb/STU2/qa.html#suppressed
12
+
13
+ module MockServer
14
+ include URLs
15
+
16
+ def server_proxy
17
+ @server_proxy ||= Faraday.new(
18
+ url: ENV.fetch('FHIR_REFERENCE_SERVER'),
19
+ params: {},
20
+ headers: { 'Content-Type' => 'application/json', 'Authorization' => 'Bearer SAMPLE_TOKEN',
21
+ 'Host' => ENV.fetch('HOST_HEADER') }
22
+ ) do |proxy|
23
+ proxy.use FaradayMiddleware::Gzip
24
+ proxy.options.params_encoder = Faraday::FlatParamsEncoder
25
+ end
26
+ end
27
+
28
+ def token_response(request, _test = nil, _test_result = nil)
29
+ # Placeholder for a more complete mock token endpoint
30
+ response.body = { access_token: SecureRandom.hex, token_type: 'bearer', expires_in: 300 }.to_json
31
+ response.status = 200
32
+ end
33
+
34
+ def error_response_resource(request)
35
+ server_response = server_proxy.get('Patient', { _id: 888 })
36
+ response_resource = FHIR.from_contents(server_response.body)
37
+ response_resource.entry = [{ fullUrl: 'urn:uuid:2866af9c-137d-4458-a8a9-eeeec0ce5583',
38
+ resource: mock_operation_outcome_resource, search: { mode: 'outcome' } }]
39
+ response_resource.link.first.url = request.url # specific case for Operation Outcome handling
40
+ response.status = 403
41
+ response_resource
42
+ end
43
+
44
+ def get_params(query_string)
45
+ params = {}
46
+ query_string.split('&').each do |param|
47
+ split_param = param.split('=')
48
+ params[split_param.first] = [] if params[split_param.first].nil?
49
+ params[split_param.first].append(split_param.last)
50
+ end
51
+ params
52
+ end
53
+
54
+ def carin_resource_response(request, test = nil, test_result = nil)
55
+ endpoint = resource_endpoint(request.url)
56
+ if endpoint
57
+ request_parameters = get_params(request.query_string)
58
+ params = match_request_to_expectation(endpoint, request_parameters)
59
+ if params.present?
60
+ server_response = server_proxy.get(endpoint, params)
61
+ response.status = server_response.status
62
+ response_resource = if response.status == 200
63
+ replace_bundle_urls(FHIR.from_contents(server_response.body))
64
+ else
65
+ FHIR.from_contents(server_response.body)
66
+ end
67
+ response.headers.merge!(server_response.headers)
68
+ remove_transfer_encoding_and_content_length_header(response.headers)
69
+ else
70
+ response_resource = error_response_resource(request)
71
+ end
72
+ else
73
+ response_resource = error_response_resource(request)
74
+ end
75
+ response.body = response_resource.to_json
76
+ end
77
+
78
+ def carin_resource_id_response(request)
79
+ endpoint = resource_id_endpoint(request.url)
80
+ if endpoint
81
+ server_response = server_proxy.get(endpoint)
82
+ response.status = server_response.status
83
+ response_resource = FHIR.from_contents(server_response.body)
84
+ response.headers.merge!(server_response.headers)
85
+ remove_transfer_encoding_and_content_length_header(response.headers)
86
+ else
87
+ response_resource = error_response_resource(request)
88
+ end
89
+ response.body = response_resource.to_json
90
+ end
91
+
92
+ def read_next_page(request, test = nil, test_result = nil)
93
+ server_response = server_proxy.get('', JSON.parse(request.params.to_json))
94
+ response.status = server_response.status
95
+ response.response_headers = remove_transfer_encoding_header(server_response.headers)
96
+ response.response_body = replace_bundle_urls(FHIR.from_contents(server_response.body)).to_json
97
+ end
98
+
99
+ def get_metadata
100
+ proc {
101
+ [200, { 'Content-Type' => 'application/fhir+json;charset=utf-8' },
102
+ [File.read('lib/carin_for_blue_button_test_kit/client/v2.0.0/metadata/mock_capability_statement.json')]]
103
+ }
104
+ end
105
+
106
+ def remove_transfer_encoding_and_content_length_header(headers)
107
+ headers.delete('transfer-encoding') if headers['transfer-encoding'].present?
108
+
109
+ return unless headers['Content-Length'].present?
110
+
111
+ headers.delete('Content-Length')
112
+ end
113
+
114
+ def match_request_to_expectation(resource_type, params)
115
+ matched_search = SEARCHES_BY_PRIORITY[resource_type.to_sym].select do |expectation|
116
+ (params.keys.map(&:to_s) & expectation).sort == expectation
117
+ end.map(&:first)
118
+
119
+ if matched_search.present?
120
+ return params.select do |key, value|
121
+ matched_search.include?(key.to_s) || key == '_revInclude' || key == '_include'
122
+ end
123
+ end
124
+ nil
125
+ end
126
+
127
+ def extract_client_id(request)
128
+ URI.decode_www_form(request.body.read).to_h['client_id']
129
+ end
130
+
131
+ # Header expected to be a bearer token of the form "Bearer: <token>"
132
+ def extract_bearer_token(request)
133
+ request.headers['authorization']&.delete_prefix('Bearer ')
134
+ end
135
+
136
+ def extract_token_from_query_params(request)
137
+ request.query_parameters['token']
138
+ end
139
+
140
+ # Pull resource type from url
141
+ # e.g. http://example.org/fhir/Patient?_id=123 -> Patient
142
+ # @private
143
+ def resource_endpoint(url)
144
+ return unless url.start_with?('http://', 'https://')
145
+
146
+ match = %r{custom/c4bb_v200_client/fhir/(.*)\?}.match(url)
147
+ match[1] if match.present?
148
+ end
149
+
150
+ def resource_id_endpoint(url)
151
+ return unless url.start_with?('http://', 'https://')
152
+
153
+ match = %r{custom/c4bb_v200_client/fhir/(.*)}.match(url)
154
+ match[1] if match.present?
155
+ end
156
+
157
+ def mock_operation_outcome_resource
158
+ FHIR.from_contents(File.read(
159
+ 'lib/carin_for_blue_button_test_kit/client/v2.0.0/metadata/mock_operation_outcome_resource.json'
160
+ ))
161
+ end
162
+
163
+ def replace_bundle_urls(bundle)
164
+ reference_server_base = ENV.fetch('FHIR_REFERENCE_SERVER')
165
+ bundle&.link&.map! { |link| { relation: link.relation, url: link.url.gsub(reference_server_base, new_link) } }
166
+ bundle&.entry&.map! do |bundled_resource|
167
+ { fullUrl: bundled_resource.fullUrl.gsub(reference_server_base, new_link),
168
+ resource: bundled_resource.resource,
169
+ search: bundled_resource.search }
170
+ end
171
+ bundle
172
+ end
173
+
174
+ def new_link
175
+ "#{Inferno::Application['base_url']}/custom/c4bb_v200_client/fhir"
176
+ end
177
+
178
+ # @private
179
+ def find_matching_entry(ref, entries, root_url = '')
180
+ ref = "#{root_url}/#{ref}" if relative_reference?(ref) && root_url&.present?
181
+
182
+ entries&.find { |entry| entry&.fullUrl == ref }
183
+ end
184
+
185
+ # @private
186
+ def relative_reference?(ref)
187
+ ref&.count('/') == 1
188
+ end
189
+ end
190
+ end
@@ -0,0 +1,45 @@
1
+ require_relative '../urls'
2
+ require_relative '../client_validation_test'
3
+
4
+ module CarinForBlueButtonTestKit
5
+ class C4BBClientCoverageRequiredSearches < Inferno::Test
6
+ include URLs
7
+ include CarinForBlueButtonTestKit::ClientValidationTest
8
+
9
+ id :coverage_required_searches
10
+ title 'Coverage required search parameters'
11
+ description %(
12
+ This test will look through all the requests to find a Coverage search request with each of the following
13
+ required search parameters specified for the Coverage resource in the
14
+ [CARIN for Blue Button](https://hl7.org/fhir/us/carin-bb/STU2/CapabilityStatement-c4bb.html#coverage)
15
+ and [US Core Client](https://www.hl7.org/fhir/us/core/STU3.1.1/CapabilityStatement-us-core-client.html)
16
+ Capability Statements:
17
+ * _id
18
+ * patient
19
+ )
20
+ input :access_token
21
+
22
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@14'
23
+
24
+ def required_searches
25
+ [
26
+ '_id',
27
+ 'patient'
28
+ ]
29
+ end
30
+
31
+ run do
32
+ search_params = resource_previous_search_params(:CoverageSearch)
33
+ skip_if search_params.nil?, 'No search requests made for Coverage resource'
34
+
35
+ missing_params = []
36
+ required_searches.each do |search_param|
37
+ missing_params.append(search_param) unless search_params.include?(search_param)
38
+ end
39
+ assert(missing_params.empty?, %(
40
+ Did not find any requests made with the following required search parameters:
41
+ #{missing_params.join(', ')}
42
+ ))
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,71 @@
1
+ require_relative '../urls'
2
+ require_relative '../client_validation_test'
3
+
4
+ module CarinForBlueButtonTestKit
5
+ class C4BBClientEOBRequiredSearches < Inferno::Test
6
+ include URLs
7
+ include CarinForBlueButtonTestKit::ClientValidationTest
8
+
9
+ id :eob_required_searches
10
+ title 'Explanation of Benefit required search parameters'
11
+ description %(
12
+ This test will look through all the requests to find an ExplanationOfBenefit search request with each of the
13
+ following required search parameters specified for the ExplanationOfBenefit resource in the
14
+ [CARIN for Blue Button](https://hl7.org/fhir/us/carin-bb/STU2/CapabilityStatement-c4bb.html#explanationofbenefit)
15
+ and [US Core Client](https://www.hl7.org/fhir/us/core/STU3.1.1/CapabilityStatement-us-core-client.html)
16
+ Capability Statements:
17
+ * _id
18
+ * patient
19
+ * identifier
20
+ * _lastUpdated
21
+ * service-date
22
+ * service-start-date
23
+ * billable-period-start
24
+ * type
25
+ * _include:
26
+ * ExplanationOfBenefit:patient
27
+ * ExplanationOfBenefit:provider
28
+ * ExplanationOfBenefit:care-team
29
+ * ExplanationOfBenefit:coverage
30
+ * ExplanationOfBenefit:insurer
31
+ * ExplanationOfBenefit:payee
32
+ * ExplanationOfBenefit:*
33
+ )
34
+ input :access_token
35
+
36
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@14'
37
+
38
+ def required_searches
39
+ [
40
+ '_id',
41
+ 'patient',
42
+ 'identifier',
43
+ '_lastUpdated',
44
+ 'service-date',
45
+ 'service-start-date',
46
+ 'billable-period-start',
47
+ 'type',
48
+ '_include=ExplanationOfBenefit:patient',
49
+ '_include=ExplanationOfBenefit:provider',
50
+ '_include=ExplanationOfBenefit:care-team',
51
+ '_include=ExplanationOfBenefit:coverage',
52
+ '_include=ExplanationOfBenefit:insurer',
53
+ '_include=ExplanationOfBenefit:payee',
54
+ '_include=ExplanationOfBenefit:*'
55
+ ]
56
+ end
57
+
58
+ run do
59
+ search_params = resource_previous_search_params(:ExplanationOfBenefitSearch)
60
+ skip_if search_params.nil?, 'No search requests made for Explanation of Benefit resource'
61
+ missing_params = []
62
+ required_searches.each do |search_param|
63
+ missing_params.append(search_param) unless search_params.include?(search_param)
64
+ end
65
+ assert(missing_params.empty?, %(
66
+ Did not find any requests made with the following required search parameters:
67
+ #{missing_params.join(', ')}
68
+ ))
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,47 @@
1
+ require_relative '../urls'
2
+ require_relative '../client_validation_test'
3
+
4
+ module CarinForBlueButtonTestKit
5
+ class C4BBClientOrganizationRequiredSearches < Inferno::Test
6
+ include URLs
7
+ include CarinForBlueButtonTestKit::ClientValidationTest
8
+
9
+ id :organization_required_searches
10
+ title 'Organization required search parameters'
11
+ description %(
12
+ This test will look through all the requests to find a Organization search request with each of the following
13
+ required search parameters specified for the Organization resource in the
14
+ [CARIN for Blue Button](https://hl7.org/fhir/us/carin-bb/STU2/CapabilityStatement-c4bb.html#organization)
15
+ and [US Core Client](https://www.hl7.org/fhir/us/core/STU3.1.1/CapabilityStatement-us-core-client.html#organization)
16
+ Capability Statements:
17
+ * _id
18
+ * name
19
+ * address
20
+ )
21
+ input :access_token
22
+
23
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@14'
24
+
25
+ def required_searches
26
+ [
27
+ '_id',
28
+ 'name',
29
+ 'address'
30
+ ]
31
+ end
32
+
33
+ run do
34
+ search_params = resource_previous_search_params(:OrganizationSearch)
35
+ skip_if search_params.nil?, 'No search requests made for Organization resource'
36
+
37
+ missing_params = []
38
+ required_searches.each do |search_param|
39
+ missing_params.append(search_param) unless search_params.include?(search_param)
40
+ end
41
+ assert(missing_params.empty?, %(
42
+ Did not find any requests made with the following required search parameters:
43
+ #{missing_params.join(', ')}
44
+ ))
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,71 @@
1
+ require_relative '../urls'
2
+ require_relative '../client_validation_test'
3
+
4
+ module CarinForBlueButtonTestKit
5
+ class C4BBClientPatientRequiredSearches < Inferno::Test
6
+ include URLs
7
+ include CarinForBlueButtonTestKit::ClientValidationTest
8
+
9
+ id :patient_required_searches
10
+ title 'Patient required search parameters'
11
+ description %(
12
+ This test will look through all the requests to find a Patient search request with each of the following
13
+ required search parameters specified for the Patient resource in the
14
+ [CARIN for Blue Button](https://hl7.org/fhir/us/carin-bb/STU2/CapabilityStatement-c4bb.html#patient)
15
+ and [US Core Client](https://www.hl7.org/fhir/us/core/STU3.1.1/CapabilityStatement-us-core-client.html#patient)
16
+ Capability Statements:
17
+ * _id
18
+ * birthdate
19
+ * family
20
+ * gender
21
+ * given
22
+ * identifier
23
+ * name
24
+ * birthdate+family
25
+ * family+gender
26
+ * birthdate+name
27
+ * gender+name
28
+ )
29
+ input :access_token
30
+
31
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@14'
32
+
33
+ def required_searches
34
+ [
35
+ '_id',
36
+ 'birthdate',
37
+ 'family',
38
+ 'gender',
39
+ 'given',
40
+ 'identifier',
41
+ 'name',
42
+ 'birthdate+family',
43
+ 'family+gender',
44
+ 'birthdate+name',
45
+ 'gender+name'
46
+ ]
47
+ end
48
+
49
+ run do
50
+ search_params = resource_previous_search_params(:PatientSearch)
51
+ skip_if search_params.nil?, 'No search requests made for Patient resource'
52
+
53
+ missing_params = []
54
+ required_searches.each do |search_param|
55
+ if search_param.include?('+')
56
+ split_param = search_param.split('+')
57
+ unless search_params.include?(split_param.first) && search_params.include?(split_param.last)
58
+ missing_params.append(search_param)
59
+ end
60
+ else
61
+ missing_params.append(search_param) unless search_params.include?(search_param)
62
+ end
63
+ end
64
+
65
+ assert(missing_params.empty?, %(
66
+ Did not find any requests made with the following required search parameters:
67
+ #{missing_params.join(', ')}
68
+ ))
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,47 @@
1
+ require_relative '../urls'
2
+ require_relative '../client_validation_test'
3
+
4
+ module CarinForBlueButtonTestKit
5
+ class C4BBClientPractitionerRequiredSearches < Inferno::Test
6
+ include URLs
7
+ include CarinForBlueButtonTestKit::ClientValidationTest
8
+
9
+ id :practitioner_required_searches
10
+ title 'Practitioner required search parameters'
11
+ description %(
12
+ This test will look through all the requests to find a Practitioner search request with each of the following
13
+ required search parameters specified for the Practitioner resource in the
14
+ [CARIN for Blue Button](https://hl7.org/fhir/us/carin-bb/STU2/CapabilityStatement-c4bb.html#practitioner)
15
+ and [US Core Client](https://www.hl7.org/fhir/us/core/STU3.1.1/CapabilityStatement-us-core-client.html#practitioner)
16
+ Capability Statements:
17
+ * _id
18
+ * name
19
+ * identifier
20
+ )
21
+ input :access_token
22
+
23
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@14'
24
+
25
+ def required_searches
26
+ [
27
+ '_id',
28
+ 'name',
29
+ 'identifier'
30
+ ]
31
+ end
32
+
33
+ run do
34
+ search_params = resource_previous_search_params(:PractitionerSearch)
35
+ skip_if search_params.nil?, 'No search requests made for Practitioner resource'
36
+
37
+ missing_params = []
38
+ required_searches.each do |search_param|
39
+ missing_params.append(search_param) unless search_params.include?(search_param)
40
+ end
41
+ assert(missing_params.empty?, %(
42
+ Did not find any requests made with the following required search parameters:
43
+ #{missing_params.join(', ')}
44
+ ))
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,43 @@
1
+ require_relative '../urls'
2
+ require_relative '../client_validation_test'
3
+
4
+ module CarinForBlueButtonTestKit
5
+ class C4BBClientRelatedPersonRequiredSearches < Inferno::Test
6
+ include URLs
7
+ include CarinForBlueButtonTestKit::ClientValidationTest
8
+
9
+ id :relatedperson_required_searches
10
+ title 'RelatedPerson required search parameters'
11
+ description %(
12
+ This test will look through all the requests to find a RelatedPerson search request with each of the following
13
+ required search parameters specified for the RelatedPerson resource in the
14
+ [CARIN for Blue Button](https://hl7.org/fhir/us/carin-bb/STU2/CapabilityStatement-c4bb.html#relatedperson)
15
+ and [US Core Client](https://www.hl7.org/fhir/us/core/STU3.1.1/CapabilityStatement-us-core-client.html#practitioner)
16
+ Capability Statements:
17
+ * _id
18
+ )
19
+ input :access_token
20
+
21
+ verifies_requirements 'hl7.fhir.us.carin-bb_2.0.0@14'
22
+
23
+ def required_searches
24
+ [
25
+ '_id'
26
+ ]
27
+ end
28
+
29
+ run do
30
+ search_params = resource_previous_search_params(:RelatedPersonSearch)
31
+ skip_if search_params.nil?, 'No search requests made for RelatedPerson resource'
32
+
33
+ missing_params = []
34
+ required_searches.each do |search_param|
35
+ missing_params.append(search_param) unless search_params.include?(search_param)
36
+ end
37
+ assert(missing_params.empty?, %(
38
+ Did not find any requests made with the following required search parameters:
39
+ #{missing_params.join(', ')}
40
+ ))
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CarinForBlueButtonTestKit
4
+ AUTH_TAG = 'carin_auth'
5
+ RESOURCE_API_TAG = 'carin_resource_api'
6
+ RESOURCE_ID_TAG = 'carin_resource_id'
7
+ end
@@ -0,0 +1,57 @@
1
+ module CarinForBlueButtonTestKit
2
+ TOKEN_PATH = '/mock_auth/token'
3
+ PATIENT_PATH = '/fhir/Patient'
4
+ RESOURCE_API_PATH = '/fhir/:endpoint'
5
+ RESOURCE_ID_PATH = '/fhir/:endpoint/:id'
6
+ METADATA_PATH = '/fhir/metadata'
7
+ BASE_FHIR_PATH = '/fhir'
8
+ RESUME_PASS_PATH = '/resume_pass'
9
+ RESUME_CLAIMS_DATA_PATH = '/resume_claims_data'
10
+ RESUME_FAIL_PATH = '/resume_fail'
11
+
12
+ module URLs
13
+ def base_url
14
+ @base_url ||= "#{Inferno::Application['base_url']}/custom/#{suite_id}"
15
+ end
16
+
17
+ def token_url
18
+ @token_url ||= base_url + TOKEN_PATH
19
+ end
20
+
21
+ def base_fhir_url
22
+ @base_fhir_url ||= base_url + BASE_FHIR_PATH
23
+ end
24
+
25
+ def patient_url
26
+ @patient_url ||= base_url + PATIENT_PATH
27
+ end
28
+
29
+ def submit_url
30
+ @submit_url ||= base_url + RESOURCE_API_PATH
31
+ end
32
+
33
+ def resource_id_url
34
+ @resource_id_url ||= base_url + RESOURCE_ID_PATH
35
+ end
36
+
37
+ def metadata_url
38
+ @metadata_url ||= base_url + METADATA_PATH
39
+ end
40
+
41
+ def resume_pass_url
42
+ @resume_pass_url ||= base_url + RESUME_PASS_PATH
43
+ end
44
+
45
+ def resume_claims_data_url
46
+ @resume_claims_data_url ||= base_url + RESUME_CLAIMS_DATA_PATH
47
+ end
48
+
49
+ def resume_fail_url
50
+ @resume_fail_url ||= base_url + RESUME_FAIL_PATH
51
+ end
52
+
53
+ def suite_id
54
+ self.class.suite.id
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,32 @@
1
+ module CarinForBlueButtonTestKit
2
+ module UserInputResponse
3
+ def self.included(klass)
4
+ klass.extend ClassMethods
5
+ end
6
+
7
+ def self.user_inputted_response(configurable, result)
8
+ input_key = configurable.config.options[:respond_with]
9
+ return unless input_key.present?
10
+
11
+ JSON.parse(result.input_json)&.find { |i| i['name'] == input_key.to_s }&.dig('value')
12
+ rescue JSON::ParserError
13
+ nil
14
+ end
15
+
16
+ def check_user_inputted_response(input_key, message = nil)
17
+ skip_if send(input_key).blank?,
18
+ message ||
19
+ "To run this test a response body must be provided in the '**#{input_title(input_key)}**' input"
20
+ end
21
+
22
+ def input_title(input_key)
23
+ config.inputs[input_key]&.title || config.inputs[input_key]&.name
24
+ end
25
+
26
+ module ClassMethods
27
+ def respond_with(key)
28
+ config options: { respond_with: key }
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CarinForBlueButtonTestKit
4
- VERSION = '0.12.1'
4
+ VERSION = '0.13.0'
5
5
  end
@@ -2,3 +2,4 @@ require_relative 'inferno_requirements_tools/ext/inferno_core/runnable'
2
2
  require_relative 'carin_for_blue_button_test_kit/generated/v1.1.0/c4bb_test_suite'
3
3
  require_relative 'carin_for_blue_button_test_kit/generated/v2.0.0/c4bb_test_suite'
4
4
  require_relative 'carin_for_blue_button_test_kit/generated/v2.0.0-dev-nonfinancial/c4bb_test_suite'
5
+ require_relative 'carin_for_blue_button_test_kit/client/v2.0.0/c4bb_client_test_suite'