onc_certification_g10_test_kit 7.1.0 → 7.2.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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/g10_reference_server_preset.json +708 -532
  3. data/lib/onc_certification_g10_test_kit/bulk_data_authorization.rb +73 -67
  4. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_cancel_stu1.rb +1 -2
  5. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_cancel_stu2.rb +7 -1
  6. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_parameters.rb +1 -1
  7. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_stu1.rb +10 -2
  8. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_validation.rb +6 -2
  9. data/lib/onc_certification_g10_test_kit/bulk_export_validation_tester.rb +4 -0
  10. data/lib/onc_certification_g10_test_kit/configuration_checker.rb +1 -1
  11. data/lib/onc_certification_g10_test_kit/encounter_context_test.rb +3 -3
  12. data/lib/onc_certification_g10_test_kit/export_kick_off_performer.rb +7 -3
  13. data/lib/onc_certification_g10_test_kit/multi_patient_api_stu1.rb +0 -4
  14. data/lib/onc_certification_g10_test_kit/multi_patient_api_stu2.rb +8 -4
  15. data/lib/onc_certification_g10_test_kit/patient_context_test.rb +3 -3
  16. data/lib/onc_certification_g10_test_kit/restricted_resource_type_access_group.rb +3 -10
  17. data/lib/onc_certification_g10_test_kit/scope_constants.rb +52 -0
  18. data/lib/onc_certification_g10_test_kit/short_id_map.yml +11 -20
  19. data/lib/onc_certification_g10_test_kit/single_patient_api_group.rb +4 -4
  20. data/lib/onc_certification_g10_test_kit/single_patient_us_core_4_api_group.rb +4 -4
  21. data/lib/onc_certification_g10_test_kit/single_patient_us_core_5_api_group.rb +4 -4
  22. data/lib/onc_certification_g10_test_kit/single_patient_us_core_6_api_group.rb +4 -4
  23. data/lib/onc_certification_g10_test_kit/single_patient_us_core_7_api_group.rb +4 -4
  24. data/lib/onc_certification_g10_test_kit/smart_app_launch_invalid_aud_group.rb +107 -64
  25. data/lib/onc_certification_g10_test_kit/smart_asymmetric_launch_group.rb +41 -88
  26. data/lib/onc_certification_g10_test_kit/smart_ehr_patient_launch_group.rb +31 -41
  27. data/lib/onc_certification_g10_test_kit/smart_ehr_patient_launch_group_stu2.rb +30 -52
  28. data/lib/onc_certification_g10_test_kit/smart_ehr_patient_launch_group_stu2_2.rb +32 -53
  29. data/lib/onc_certification_g10_test_kit/smart_ehr_practitioner_app_group.rb +99 -142
  30. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_group.rb +16 -54
  31. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_group_stu2_2.rb +16 -54
  32. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_us_core_7_group.rb +16 -54
  33. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_us_core_7_group_stu2_2.rb +16 -54
  34. data/lib/onc_certification_g10_test_kit/smart_granular_scope_selection_group.rb +29 -64
  35. data/lib/onc_certification_g10_test_kit/smart_granular_scope_selection_test.rb +4 -3
  36. data/lib/onc_certification_g10_test_kit/smart_invalid_pkce_group.rb +39 -83
  37. data/lib/onc_certification_g10_test_kit/smart_invalid_token_group.rb +42 -86
  38. data/lib/onc_certification_g10_test_kit/smart_invalid_token_group_stu2.rb +50 -88
  39. data/lib/onc_certification_g10_test_kit/smart_invalid_token_refresh_test.rb +9 -6
  40. data/lib/onc_certification_g10_test_kit/smart_limited_app_group.rb +86 -278
  41. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group.rb +30 -57
  42. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group_stu2.rb +34 -73
  43. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group_stu2_2.rb +34 -73
  44. data/lib/onc_certification_g10_test_kit/smart_scopes_test.rb +6 -1
  45. data/lib/onc_certification_g10_test_kit/smart_standalone_patient_app_group.rb +88 -116
  46. data/lib/onc_certification_g10_test_kit/smart_v1_scopes_group.rb +60 -114
  47. data/lib/onc_certification_g10_test_kit/tasks/generate_matrix.rb +2 -11
  48. data/lib/onc_certification_g10_test_kit/token_introspection_group.rb +12 -25
  49. data/lib/onc_certification_g10_test_kit/token_introspection_group_stu2_2.rb +12 -14
  50. data/lib/onc_certification_g10_test_kit/token_revocation_group.rb +44 -33
  51. data/lib/onc_certification_g10_test_kit/unrestricted_resource_type_access_group.rb +3 -3
  52. data/lib/onc_certification_g10_test_kit/version.rb +2 -2
  53. data/lib/onc_certification_g10_test_kit.rb +104 -40
  54. metadata +9 -8
@@ -7,43 +7,33 @@ module ONCCertificationG10TestKit
7
7
 
8
8
  id :bulk_data_authorization
9
9
 
10
- input :bulk_token_endpoint,
11
- title: 'Backend Services Token Endpoint',
12
- description: <<~DESCRIPTION
13
- The OAuth 2.0 Token Endpoint used by the Backend Services specification to provide bearer tokens.
14
- DESCRIPTION
15
- input :bulk_client_id,
16
- title: 'Bulk Data Client ID',
17
- description: 'Client ID provided at registration to the Inferno application.'
18
- input :bulk_scope,
19
- title: 'Bulk Data Scopes',
20
- description: 'Bulk Data Scopes provided at registration to the Inferno application.',
21
- default: 'system/*.read'
22
- input :bulk_encryption_method,
23
- title: 'Encryption Method',
24
- description: <<~DESCRIPTION,
25
- The server is required to suport either ES384 or RS384 encryption methods for JWT signature verification.
26
- Select which method to use.
27
- DESCRIPTION
28
- type: 'radio',
29
- default: 'ES384',
10
+ input :bulk_smart_auth_info,
11
+ type: :auth_info,
12
+ title: 'Multi-Patient API Credentials',
30
13
  options: {
31
- list_options: [
14
+ mode: :auth,
15
+ components: [
32
16
  {
33
- label: 'ES384',
34
- value: 'ES384'
17
+ name: :auth_type,
18
+ default: 'backend_services',
19
+ locked: true
35
20
  },
36
21
  {
37
- label: 'RS384',
38
- value: 'RS384'
22
+ name: :use_discovery,
23
+ default: false,
24
+ locked: true
25
+ },
26
+ {
27
+ name: :token_url,
28
+ optional: false
29
+ },
30
+ {
31
+ name: :jwks,
32
+ locked: true
39
33
  }
40
34
  ]
41
35
  }
42
- output :bearer_token
43
-
44
- http_client :token_endpoint do
45
- url :bulk_token_endpoint
46
- end
36
+ output :bulk_smart_auth_info
47
37
 
48
38
  test from: :tls_version_test do
49
39
  title 'Authorization service token endpoint secured by transport layer security'
@@ -56,8 +46,13 @@ module ONCCertificationG10TestKit
56
46
  DESCRIPTION
57
47
  id :g10_bulk_token_tls_version
58
48
 
49
+ input :bulk_smart_auth_info, type: :auth_info
50
+
51
+ def url
52
+ bulk_smart_auth_info.token_url
53
+ end
54
+
59
55
  config(
60
- inputs: { url: { name: :bulk_token_endpoint } },
61
56
  options: { minimum_allowed_version: OpenSSL::SSL::TLS1_2_VERSION }
62
57
  )
63
58
  end
@@ -80,14 +75,17 @@ module ONCCertificationG10TestKit
80
75
  # link 'http://hl7.org/fhir/uv/bulkdata/STU1.0.1/authorization/index.html#protocol-details'
81
76
 
82
77
  run do
83
- post_request_content = AuthorizationRequestBuilder.build(encryption_method: bulk_encryption_method,
84
- scope: bulk_scope,
85
- iss: bulk_client_id,
86
- sub: bulk_client_id,
87
- aud: bulk_token_endpoint,
88
- grant_type: 'not_a_grant_type')
89
-
90
- post(client: :token_endpoint, **post_request_content)
78
+ post_request_content =
79
+ AuthorizationRequestBuilder.build(
80
+ encryption_method: bulk_smart_auth_info.encryption_algorithm,
81
+ scope: bulk_smart_auth_info.requested_scopes,
82
+ iss: bulk_smart_auth_info.client_id,
83
+ sub: bulk_smart_auth_info.client_id,
84
+ aud: bulk_smart_auth_info.token_url,
85
+ grant_type: 'not_a_grant_type'
86
+ )
87
+
88
+ post(bulk_smart_auth_info.token_url, **post_request_content)
91
89
 
92
90
  assert_response_status(400)
93
91
  end
@@ -111,14 +109,17 @@ module ONCCertificationG10TestKit
111
109
  # link 'http://hl7.org/fhir/uv/bulkdata/STU1.0.1/authorization/index.html#protocol-details'
112
110
 
113
111
  run do
114
- post_request_content = AuthorizationRequestBuilder.build(encryption_method: bulk_encryption_method,
115
- scope: bulk_scope,
116
- iss: bulk_client_id,
117
- sub: bulk_client_id,
118
- aud: bulk_token_endpoint,
119
- client_assertion_type: 'not_an_assertion_type')
120
-
121
- post(client: :token_endpoint, **post_request_content)
112
+ post_request_content =
113
+ AuthorizationRequestBuilder.build(
114
+ encryption_method: bulk_smart_auth_info.encryption_algorithm,
115
+ scope: bulk_smart_auth_info.requested_scopes,
116
+ iss: bulk_smart_auth_info.client_id,
117
+ sub: bulk_smart_auth_info.client_id,
118
+ aud: bulk_smart_auth_info.token_url,
119
+ client_assertion_type: 'not_an_assertion_type'
120
+ )
121
+
122
+ post(bulk_smart_auth_info.token_url, **post_request_content)
122
123
 
123
124
  assert_response_status(400)
124
125
  end
@@ -151,13 +152,16 @@ module ONCCertificationG10TestKit
151
152
  # link 'http://hl7.org/fhir/uv/bulkdata/STU1.0.1/authorization/index.html#protocol-details'
152
153
 
153
154
  run do
154
- post_request_content = AuthorizationRequestBuilder.build(encryption_method: bulk_encryption_method,
155
- scope: bulk_scope,
156
- iss: 'not_a_valid_iss',
157
- sub: bulk_client_id,
158
- aud: bulk_token_endpoint)
155
+ post_request_content =
156
+ AuthorizationRequestBuilder.build(
157
+ encryption_method: bulk_smart_auth_info.encryption_algorithm,
158
+ scope: bulk_smart_auth_info.requested_scopes,
159
+ iss: 'not_a_valid_iss',
160
+ sub: bulk_smart_auth_info.client_id,
161
+ aud: bulk_smart_auth_info.token_url
162
+ )
159
163
 
160
- post(client: :token_endpoint, **post_request_content)
164
+ post(bulk_smart_auth_info.token_url, **post_request_content)
161
165
 
162
166
  assert_response_status([400, 401])
163
167
  end
@@ -170,20 +174,21 @@ module ONCCertificationG10TestKit
170
174
  DESCRIPTION
171
175
  # link 'http://hl7.org/fhir/uv/bulkdata/STU1.0.1/authorization/index.html#issuing-access-tokens'
172
176
 
173
- output :authentication_response
177
+ makes_request :bulk_authentication
174
178
 
175
179
  run do
176
- post_request_content = AuthorizationRequestBuilder.build(encryption_method: bulk_encryption_method,
177
- scope: bulk_scope,
178
- iss: bulk_client_id,
179
- sub: bulk_client_id,
180
- aud: bulk_token_endpoint)
180
+ post_request_content =
181
+ AuthorizationRequestBuilder.build(
182
+ encryption_method: bulk_smart_auth_info.encryption_algorithm,
183
+ scope: bulk_smart_auth_info.requested_scopes,
184
+ iss: bulk_smart_auth_info.client_id,
185
+ sub: bulk_smart_auth_info.client_id,
186
+ aud: bulk_smart_auth_info.token_url
187
+ )
181
188
 
182
- authentication_response = post(client: :token_endpoint, **post_request_content)
189
+ post(bulk_smart_auth_info.token_url, **post_request_content, name: :bulk_authentication)
183
190
 
184
191
  assert_response_status([200, 201])
185
-
186
- output authentication_response: authentication_response.response_body
187
192
  end
188
193
  end
189
194
 
@@ -201,17 +206,18 @@ module ONCCertificationG10TestKit
201
206
  DESCRIPTION
202
207
  # link 'http://hl7.org/fhir/uv/bulkdata/STU1.0.1/authorization/index.html#issuing-access-tokens'
203
208
 
204
- input :authentication_response
205
- output :bearer_token
209
+ uses_request :bulk_authentication
210
+ output :bulk_smart_auth_info
206
211
 
207
212
  run do
208
- assert_valid_json(authentication_response)
209
- response_body = JSON.parse(authentication_response)
213
+ assert_valid_json(request.response_body)
214
+ response_body = JSON.parse(request.response_body)
210
215
 
211
216
  access_token = response_body['access_token']
212
217
  assert access_token.present?, 'Token response did not contain access_token as required'
213
218
 
214
- output bearer_token: access_token
219
+ bulk_smart_auth_info.update_from_response_body(request)
220
+ output bulk_smart_auth_info: bulk_smart_auth_info
215
221
 
216
222
  required_keys = ['token_type', 'expires_in', 'scope']
217
223
 
@@ -10,8 +10,7 @@ module ONCCertificationG10TestKit
10
10
  correct behavior.
11
11
  )
12
12
 
13
- input :bearer_token,
14
- optional: true
13
+ input :bulk_smart_auth_info, type: :auth_info
15
14
  input :bulk_server_url,
16
15
  title: 'Bulk Data FHIR URL',
17
16
  description: 'The URL of the Bulk FHIR server.'
@@ -21,7 +21,13 @@ module ONCCertificationG10TestKit
21
21
  run do
22
22
  skip 'No polling url available' unless cancelled_polling_url.present?
23
23
 
24
- get(cancelled_polling_url, headers: { authorization: "Bearer #{bearer_token}", accept: 'application/json' })
24
+ get(
25
+ cancelled_polling_url,
26
+ headers: {
27
+ authorization: "Bearer #{bulk_smart_auth_info.access_token}",
28
+ accept: 'application/json'
29
+ }
30
+ )
25
31
 
26
32
  assert_response_status(404)
27
33
 
@@ -8,7 +8,7 @@ module ONCCertificationG10TestKit
8
8
  Verify that the Bulk Data server supports required query parameters.
9
9
  )
10
10
 
11
- input :bearer_token
11
+ input :bulk_smart_auth_info, type: :auth_info
12
12
  input :bulk_server_url,
13
13
  title: 'Bulk Data FHIR URL',
14
14
  description: 'The URL of the Bulk FHIR server.'
@@ -9,7 +9,7 @@ module ONCCertificationG10TestKit
9
9
  DESCRIPTION
10
10
  id :bulk_data_group_export
11
11
 
12
- input :bearer_token
12
+ input :bulk_smart_auth_info, type: :auth_info
13
13
  input :bulk_server_url,
14
14
  title: 'Bulk Data FHIR URL',
15
15
  description: 'The URL of the Bulk FHIR server.'
@@ -137,6 +137,8 @@ module ONCCertificationG10TestKit
137
137
  include ExportKickOffPerformer
138
138
 
139
139
  run do
140
+ skip_if bulk_smart_auth_info.access_token.blank?, 'No access token was received'
141
+
140
142
  perform_export_kick_off_request(use_token: false)
141
143
  assert_response_status([400, 401])
142
144
  end
@@ -199,7 +201,13 @@ module ONCCertificationG10TestKit
199
201
  used_time = 0
200
202
 
201
203
  loop do
202
- get(polling_url, headers: { authorization: "Bearer #{bearer_token}", accept: 'application/json' })
204
+ get(
205
+ polling_url,
206
+ headers: {
207
+ authorization: "Bearer #{bulk_smart_auth_info.access_token}",
208
+ accept: 'application/json'
209
+ }
210
+ )
203
211
 
204
212
  retry_after_val = request.response_header('retry-after')&.value.to_i
205
213
 
@@ -10,7 +10,8 @@ module ONCCertificationG10TestKit
10
10
 
11
11
  id :g10_bulk_data_group_export_validation
12
12
 
13
- input :status_output, :requires_access_token, :bearer_token, :bulk_download_url
13
+ input :status_output, :requires_access_token, :bulk_download_url
14
+ input :bulk_smart_auth_info, type: :auth_info
14
15
  input :lines_to_validate,
15
16
  title: 'Limit validation to a maximum resource count',
16
17
  description: 'To validate all, leave blank.',
@@ -62,12 +63,15 @@ module ONCCertificationG10TestKit
62
63
  DESCRIPTION
63
64
  # link 'http://hl7.org/fhir/uv/bulkdata/STU1.0.1/export/index.html#file-request'
64
65
 
65
- input :bulk_download_url, :requires_access_token, :requires_access_token, :bearer_token
66
+ input :bulk_download_url, :requires_access_token
67
+ input :bulk_smart_auth_info, type: :auth_info
66
68
 
67
69
  run do
68
70
  omit_if requires_access_token == 'false',
69
71
  'Could not verify this functionality when requiresAccessToken is false'
70
72
 
73
+ skip_if bulk_smart_auth_info.access_token.blank?, 'No access token was received'
74
+
71
75
  get(bulk_download_url, headers: { accept: 'application/fhir+ndjson' })
72
76
  assert_response_status([400, 401])
73
77
  end
@@ -36,6 +36,10 @@ module ONCCertificationG10TestKit
36
36
  scratch[:patient_ids_seen] ||= []
37
37
  end
38
38
 
39
+ def bearer_token
40
+ bulk_smart_auth_info.access_token
41
+ end
42
+
39
43
  def build_headers(use_token)
40
44
  headers = { accept: 'application/fhir+ndjson' }
41
45
  headers.merge!({ authorization: "Bearer #{bearer_token}" }) if use_token == 'true'
@@ -2,7 +2,7 @@ require_relative '../inferno/terminology/tasks/check_built_terminology'
2
2
 
3
3
  module ONCCertificationG10TestKit
4
4
  class ConfigurationChecker
5
- EXPECTED_HL7_VALIDATOR_VERSION = '1.0.60'.freeze
5
+ EXPECTED_HL7_VALIDATOR_VERSION = '1.0.65'.freeze
6
6
  HL7_VALIDATOR_VERSION_KEY = 'validatorWrapperVersion'.freeze
7
7
 
8
8
  def configuration_messages
@@ -7,15 +7,15 @@ module ONCCertificationG10TestKit
7
7
  )
8
8
  id :g10_encounter_context
9
9
  input :encounter_id, :url
10
- input :smart_credentials, type: :oauth_credentials
10
+ input :smart_auth_info, type: :auth_info
11
11
 
12
12
  fhir_client :authenticated do
13
13
  url :url
14
- oauth_credentials :smart_credentials
14
+ auth_info :smart_auth_info
15
15
  end
16
16
 
17
17
  run do
18
- skip_if smart_credentials.access_token.blank?, 'No access token was received during the SMART launch'
18
+ skip_if smart_auth_info.access_token.blank?, 'No access token was received during the SMART launch'
19
19
 
20
20
  skip_if encounter_id.blank?, 'Token response did not contain `encounter` field'
21
21
 
@@ -1,10 +1,14 @@
1
1
  module ONCCertificationG10TestKit
2
2
  module ExportKickOffPerformer
3
+ def access_token
4
+ bulk_smart_auth_info.access_token
5
+ end
6
+
3
7
  def perform_export_kick_off_request(use_token: true, params: {})
4
- skip_if use_token && bearer_token.blank?, 'Could not verify this functionality when bearer token is not set'
8
+ skip_if use_token && access_token.blank?, 'Could not verify this functionality when bearer token is not set'
5
9
 
6
10
  headers = { accept: 'application/fhir+json', prefer: 'respond-async' }
7
- headers.merge!({ authorization: "Bearer #{bearer_token}" }) if use_token
11
+ headers.merge!({ authorization: "Bearer #{access_token}" }) if use_token
8
12
 
9
13
  url = "Group/#{group_id}/$export"
10
14
  param_str = params.map { |k, v| URI.encode_www_form(k => v) }.join('&')
@@ -16,7 +20,7 @@ module ONCCertificationG10TestKit
16
20
  polling_url = request&.response_header('content-location')&.value
17
21
  assert polling_url.present?, 'Export response header did not include "Content-Location"'
18
22
 
19
- headers = { accept: 'application/json', authorization: "Bearer #{bearer_token}" }
23
+ headers = { accept: 'application/json', authorization: "Bearer #{access_token}" }
20
24
 
21
25
  delete(polling_url, headers:)
22
26
  assert_response_status(202)
@@ -45,10 +45,6 @@ module ONCCertificationG10TestKit
45
45
  run_as_group
46
46
 
47
47
  input_order :bulk_server_url,
48
- :bulk_token_endpoint,
49
- :bulk_client_id,
50
- :bulk_scope,
51
- :bulk_encryption_method,
52
48
  :group_id,
53
49
  :bulk_patient_ids_in_group,
54
50
  :bulk_device_types_in_group,
@@ -45,16 +45,20 @@ module ONCCertificationG10TestKit
45
45
  run_as_group
46
46
 
47
47
  input_order :bulk_server_url,
48
- :bulk_token_endpoint,
49
- :bulk_client_id,
50
- :bulk_scope,
51
- :bulk_encryption_method,
52
48
  :group_id,
53
49
  :bulk_patient_ids_in_group,
54
50
  :bulk_device_types_in_group,
55
51
  :lines_to_validate,
56
52
  :bulk_timeout
57
53
 
54
+ config(
55
+ inputs: {
56
+ url: {
57
+ name: :bulk_server_url
58
+ }
59
+ }
60
+ )
61
+
58
62
  group from: :bulk_data_authorization,
59
63
  description: <<~DESCRIPTION
60
64
  Bulk Data servers are required to authorize clients using the [Backend Service
@@ -8,15 +8,15 @@ module ONCCertificationG10TestKit
8
8
  )
9
9
  id :g10_patient_context
10
10
  input :patient_id, :url
11
- input :smart_credentials, type: :oauth_credentials
11
+ input :smart_auth_info, type: 'auth_info'
12
12
 
13
13
  fhir_client :authenticated do
14
14
  url :url
15
- oauth_credentials :smart_credentials
15
+ auth_info :smart_auth_info
16
16
  end
17
17
 
18
18
  run do
19
- skip_if smart_credentials.access_token.blank?, 'No access token was received during the SMART launch'
19
+ skip_if smart_auth_info.access_token.blank?, 'No access token was received during the SMART launch'
20
20
 
21
21
  skip_if patient_id.blank?, 'Token response did not contain `patient` field'
22
22
 
@@ -85,19 +85,12 @@ module ONCCertificationG10TestKit
85
85
  id :g10_restricted_resource_type_access
86
86
 
87
87
  input :url, :patient_id, :received_scopes, :expected_resources
88
- input :smart_credentials, type: :oauth_credentials
89
-
90
- config(
91
- inputs: {
92
- client_secret: {
93
- optional: false
94
- }
95
- }
96
- )
88
+
89
+ input :smart_auth_info, type: :auth_info
97
90
 
98
91
  fhir_client do
99
92
  url :url
100
- oauth_credentials :smart_credentials
93
+ auth_info :smart_auth_info
101
94
  end
102
95
 
103
96
  test from: :g10_restricted_access_test do
@@ -0,0 +1,52 @@
1
+ module ONCCertificationG10TestKit
2
+ module ScopeConstants
3
+ STANDALONE_SMART_1_SCOPES =
4
+ %(
5
+ launch/patient openid fhirUser offline_access patient/Medication.read
6
+ patient/AllergyIntolerance.read patient/CarePlan.read
7
+ patient/CareTeam.read patient/Condition.read patient/Device.read
8
+ patient/DiagnosticReport.read patient/DocumentReference.read
9
+ patient/Encounter.read patient/Goal.read patient/Immunization.read
10
+ patient/Location.read patient/MedicationRequest.read
11
+ patient/Observation.read patient/Organization.read patient/Patient.read
12
+ patient/Practitioner.read patient/Procedure.read patient/Provenance.read
13
+ patient/PractitionerRole.read
14
+ ).gsub(/\s{2,}/, ' ').strip.freeze
15
+
16
+ STANDALONE_SMART_2_SCOPES =
17
+ %(
18
+ launch/patient openid fhirUser offline_access patient/Medication.rs
19
+ patient/AllergyIntolerance.rs patient/CarePlan.rs patient/CareTeam.rs
20
+ patient/Condition.rs patient/Device.rs patient/DiagnosticReport.rs
21
+ patient/DocumentReference.rs patient/Encounter.rs patient/Goal.rs
22
+ patient/Immunization.rs patient/Location.rs patient/MedicationRequest.rs
23
+ patient/Observation.rs patient/Organization.rs patient/Patient.rs
24
+ patient/Practitioner.rs patient/Procedure.rs patient/Provenance.rs
25
+ patient/PractitionerRole.rs
26
+ ).gsub(/\s{2,}/, ' ').strip.freeze
27
+
28
+ EHR_SMART_1_SCOPES =
29
+ %(
30
+ launch openid fhirUser offline_access user/Medication.read
31
+ user/AllergyIntolerance.read user/CarePlan.read user/CareTeam.read
32
+ user/Condition.read user/Device.read user/DiagnosticReport.read
33
+ user/DocumentReference.read user/Encounter.read user/Goal.read
34
+ user/Immunization.read user/Location.read user/MedicationRequest.read
35
+ user/Observation.read user/Organization.read user/Patient.read
36
+ user/Practitioner.read user/Procedure.read user/Provenance.read
37
+ user/PractitionerRole.read
38
+ ).gsub(/\s{2,}/, ' ').strip.freeze
39
+
40
+ EHR_SMART_2_SCOPES =
41
+ %(
42
+ launch openid fhirUser offline_access user/Medication.rs
43
+ user/AllergyIntolerance.rs user/CarePlan.rs user/CareTeam.rs
44
+ user/Condition.rs user/Device.rs user/DiagnosticReport.rs
45
+ user/DocumentReference.rs user/Encounter.rs user/Goal.rs
46
+ user/Immunization.rs user/Location.rs user/MedicationRequest.rs
47
+ user/Observation.rs user/Organization.rs user/Patient.rs
48
+ user/Practitioner.rs user/Procedure.rs user/Provenance.rs
49
+ user/PractitionerRole.rs
50
+ ).gsub(/\s{2,}/, ' ').strip.freeze
51
+ end
52
+ end
@@ -2769,6 +2769,7 @@ g10_certification-multi_patient_api_stu2-g10_bulk_data_export_parameters-output_
2769
2769
  g10_certification-multi_patient_api_stu2-g10_bulk_data_export_parameters-g10_since_in_export_response: 8.5.02
2770
2770
  g10_certification-Group06: '9'
2771
2771
  g10_certification-Group06-g10_public_standalone_launch: '9.1'
2772
+ g10_certification-Group06-g10_public_standalone_launch-well_known_endpoint: 9.1.10
2772
2773
  g10_certification-Group06-g10_public_standalone_launch-standalone_auth_tls: 9.1.01
2773
2774
  g10_certification-Group06-g10_public_standalone_launch-smart_app_redirect: 9.1.02
2774
2775
  g10_certification-Group06-g10_public_standalone_launch-smart_code_received: 9.1.03
@@ -2779,6 +2780,7 @@ g10_certification-Group06-g10_public_standalone_launch-smart_token_response_head
2779
2780
  g10_certification-Group06-g10_public_standalone_launch-g10_patient_context: 9.1.08
2780
2781
  g10_certification-Group06-g10_public_standalone_launch-g10_public_launch_id_token: 9.1.09
2781
2782
  g10_certification-Group06-g10_public_standalone_launch_stu2: '9.2'
2783
+ g10_certification-Group06-g10_public_standalone_launch_stu2-well_known_endpoint: 9.2.10
2782
2784
  g10_certification-Group06-g10_public_standalone_launch_stu2-standalone_auth_tls: 9.2.01
2783
2785
  g10_certification-Group06-g10_public_standalone_launch_stu2-smart_app_redirect_stu2: 9.2.02
2784
2786
  g10_certification-Group06-g10_public_standalone_launch_stu2-smart_code_received: 9.2.03
@@ -2789,6 +2791,7 @@ g10_certification-Group06-g10_public_standalone_launch_stu2-smart_token_response
2789
2791
  g10_certification-Group06-g10_public_standalone_launch_stu2-g10_patient_context: 9.2.08
2790
2792
  g10_certification-Group06-g10_public_standalone_launch_stu2-g10_public_launch_id_token: 9.2.09
2791
2793
  g10_certification-Group06-g10_public_standalone_launch_stu2_2: '9.16'
2794
+ g10_certification-Group06-g10_public_standalone_launch_stu2_2-well_known_endpoint: 9.16.10
2792
2795
  g10_certification-Group06-g10_public_standalone_launch_stu2_2-standalone_auth_tls: 9.16.01
2793
2796
  g10_certification-Group06-g10_public_standalone_launch_stu2_2-smart_app_redirect_stu2: 9.16.02
2794
2797
  g10_certification-Group06-g10_public_standalone_launch_stu2_2-smart_code_received: 9.16.03
@@ -2808,21 +2811,25 @@ g10_certification-Group06-g10_smart_invalid_aud-smart_app_redirect_stu2: 9.4.02
2808
2811
  g10_certification-Group06-g10_smart_invalid_aud-smart_app_redirect_stu2_2: 9.4.03
2809
2812
  g10_certification-Group06-g10_smart_invalid_aud-Test04: 9.4.04
2810
2813
  g10_certification-Group06-g10_smart_invalid_token_request: '9.5'
2814
+ g10_certification-Group06-g10_smart_invalid_token_request-well_known_endpoint: 9.5.06
2811
2815
  g10_certification-Group06-g10_smart_invalid_token_request-smart_app_redirect: 9.5.01
2812
2816
  g10_certification-Group06-g10_smart_invalid_token_request-smart_code_received: 9.5.02
2813
2817
  g10_certification-Group06-g10_smart_invalid_token_request-Test03: 9.5.03
2814
2818
  g10_certification-Group06-g10_smart_invalid_token_request-Test04: 9.5.04
2815
2819
  g10_certification-Group06-g10_smart_invalid_token_request_stu2: '9.6'
2820
+ g10_certification-Group06-g10_smart_invalid_token_request_stu2-well_known_endpoint: 9.6.06
2816
2821
  g10_certification-Group06-g10_smart_invalid_token_request_stu2-smart_app_redirect_stu2: 9.6.01
2817
2822
  g10_certification-Group06-g10_smart_invalid_token_request_stu2-smart_code_received: 9.6.02
2818
2823
  g10_certification-Group06-g10_smart_invalid_token_request_stu2-Test03: 9.6.03
2819
2824
  g10_certification-Group06-g10_smart_invalid_token_request_stu2-Test04: 9.6.04
2820
2825
  g10_certification-Group06-g10_smart_invalid_token_request_stu2_2: '9.17'
2826
+ g10_certification-Group06-g10_smart_invalid_token_request_stu2_2-well_known_endpoint: 9.17.06
2821
2827
  g10_certification-Group06-g10_smart_invalid_token_request_stu2_2-smart_app_redirect_stu2: 9.17.01
2822
2828
  g10_certification-Group06-g10_smart_invalid_token_request_stu2_2-smart_code_received: 9.17.02
2823
2829
  g10_certification-Group06-g10_smart_invalid_token_request_stu2_2-Test03: 9.17.03
2824
2830
  g10_certification-Group06-g10_smart_invalid_token_request_stu2_2-Test04: 9.17.04
2825
2831
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group: '9.7'
2832
+ g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group-well_known_endpoint: 9.7.13
2826
2833
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group-smart_no_code_verifier_redirect: 9.7.01
2827
2834
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group-smart_no_code_verifier_code_received: 9.7.02
2828
2835
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group-smart_no_verifier_token_request: 9.7.03
@@ -2836,6 +2843,7 @@ g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group-smart_plain
2836
2843
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group-smart_plain_code_verifier_code_received: 9.7.11
2837
2844
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group-smart_plain_code_verifier_token_request: 9.7.12
2838
2845
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group_stu2_2: '9.18'
2846
+ g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group_stu2_2-well_known_endpoint: 9.18.13
2839
2847
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group_stu2_2-smart_no_code_verifier_redirect: 9.18.01
2840
2848
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group_stu2_2-smart_no_code_verifier_code_received: 9.18.02
2841
2849
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group_stu2_2-smart_no_verifier_token_request: 9.18.03
@@ -2849,6 +2857,7 @@ g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group_stu2_2-smar
2849
2857
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group_stu2_2-smart_plain_code_verifier_code_received: 9.18.11
2850
2858
  g10_certification-Group06-g10_smart_invalid_pkce_code_verifier_group_stu2_2-smart_plain_code_verifier_token_request: 9.18.12
2851
2859
  g10_certification-Group06-g10_ehr_patient_launch: '9.8'
2860
+ g10_certification-Group06-g10_ehr_patient_launch-well_known_endpoint: 9.8.12
2852
2861
  g10_certification-Group06-g10_ehr_patient_launch-smart_app_launch: 9.8.01
2853
2862
  g10_certification-Group06-g10_ehr_patient_launch-smart_launch_received: 9.8.02
2854
2863
  g10_certification-Group06-g10_ehr_patient_launch-ehr_auth_tls: 9.8.03
@@ -2861,6 +2870,7 @@ g10_certification-Group06-g10_ehr_patient_launch-smart_token_response_headers: 9
2861
2870
  g10_certification-Group06-g10_ehr_patient_launch-g10_patient_context: 9.8.10
2862
2871
  g10_certification-Group06-g10_ehr_patient_launch-g10_patient_scope: 9.8.11
2863
2872
  g10_certification-Group06-g10_ehr_patient_launch_stu2: '9.9'
2873
+ g10_certification-Group06-g10_ehr_patient_launch_stu2-well_known_endpoint: 9.9.12
2864
2874
  g10_certification-Group06-g10_ehr_patient_launch_stu2-smart_app_launch: 9.9.01
2865
2875
  g10_certification-Group06-g10_ehr_patient_launch_stu2-smart_launch_received: 9.9.02
2866
2876
  g10_certification-Group06-g10_ehr_patient_launch_stu2-ehr_auth_tls: 9.9.03
@@ -2873,6 +2883,7 @@ g10_certification-Group06-g10_ehr_patient_launch_stu2-smart_token_response_heade
2873
2883
  g10_certification-Group06-g10_ehr_patient_launch_stu2-g10_patient_context: 9.9.10
2874
2884
  g10_certification-Group06-g10_ehr_patient_launch_stu2-g10_patient_scope: 9.9.11
2875
2885
  g10_certification-Group06-g10_ehr_patient_launch_stu2_2: '9.19'
2886
+ g10_certification-Group06-g10_ehr_patient_launch_stu2_2-well_known_endpoint: 9.19.13
2876
2887
  g10_certification-Group06-g10_ehr_patient_launch_stu2_2-smart_app_launch: 9.19.01
2877
2888
  g10_certification-Group06-g10_ehr_patient_launch_stu2_2-smart_launch_received: 9.19.02
2878
2889
  g10_certification-Group06-g10_ehr_patient_launch_stu2_2-ehr_auth_tls: 9.19.03
@@ -2907,26 +2918,6 @@ g10_certification-Group06-g10_token_introspection-smart_token_introspection_acce
2907
2918
  : 9.11.1.2.06
2908
2919
  ? g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_standalone_launch_stu2-smart_token_response_headers
2909
2920
  : 9.11.1.2.07
2910
- g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_discovery: 9.11.1.3
2911
- g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_discovery-Test01: 9.11.1.3.01
2912
- g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_discovery-Test02: 9.11.1.3.02
2913
- g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_discovery-Test03: 9.11.1.3.03
2914
- g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_discovery-Test04: 9.11.1.3.04
2915
- g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_standalone_launch: 9.11.1.4
2916
- ? g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_standalone_launch-standalone_auth_tls
2917
- : 9.11.1.4.01
2918
- ? g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_standalone_launch-smart_app_redirect
2919
- : 9.11.1.4.02
2920
- ? g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_standalone_launch-smart_code_received
2921
- : 9.11.1.4.03
2922
- ? g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_standalone_launch-standalone_token_tls
2923
- : 9.11.1.4.04
2924
- ? g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_standalone_launch-smart_token_exchange
2925
- : 9.11.1.4.05
2926
- ? g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_standalone_launch-smart_token_response_body
2927
- : 9.11.1.4.06
2928
- ? g10_certification-Group06-g10_token_introspection-smart_token_introspection_access_token_group-smart_standalone_launch-smart_token_response_headers
2929
- : 9.11.1.4.07
2930
2921
  g10_certification-Group06-g10_token_introspection-smart_token_introspection_request_group: 9.11.2
2931
2922
  g10_certification-Group06-g10_token_introspection-smart_token_introspection_request_group-Test01: 9.11.2.01
2932
2923
  g10_certification-Group06-g10_token_introspection-smart_token_introspection_request_group-Test02: 9.11.2.02
@@ -49,17 +49,17 @@ module ONCCertificationG10TestKit
49
49
  ID from the SMART App Launch contain all MUST SUPPORT elements.
50
50
  DESCRIPTION
51
51
  optional: true
52
- input :smart_credentials,
52
+ input :smart_auth_info,
53
53
  title: 'SMART App Launch Credentials',
54
- type: :oauth_credentials,
54
+ type: :auth_info,
55
55
  locked: true
56
56
 
57
57
  fhir_client do
58
58
  url :url
59
- oauth_credentials :smart_credentials
59
+ auth_info :smart_auth_info
60
60
  end
61
61
 
62
- input_order :url, :patient_id, :additional_patient_ids, :implantable_device_codes, :smart_credentials
62
+ input_order :url, :patient_id, :additional_patient_ids, :implantable_device_codes, :smart_auth_info
63
63
 
64
64
  config(
65
65
  options: {