onc_certification_g10_test_kit 7.0.2 → 7.1.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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/g10_reference_server_preset.json +1291 -0
  3. data/lib/inferno/ext/bloomer.rb +1 -1
  4. data/lib/inferno/terminology/tasks/process_umls.rb +1 -1
  5. data/lib/onc_certification_g10_test_kit/bulk_data_authorization.rb +4 -4
  6. data/lib/onc_certification_g10_test_kit/bulk_export_validation_tester.rb +3 -3
  7. data/lib/onc_certification_g10_test_kit/configuration_checker.rb +5 -13
  8. data/lib/onc_certification_g10_test_kit/feature.rb +5 -4
  9. data/lib/onc_certification_g10_test_kit/igs/01-us-core-v400.tgz +0 -0
  10. data/lib/onc_certification_g10_test_kit/igs/03-us-core-v311.tgz +0 -0
  11. data/lib/onc_certification_g10_test_kit/igs/04-us-core-610.tgz +0 -0
  12. data/lib/onc_certification_g10_test_kit/metadata.rb +103 -0
  13. data/lib/onc_certification_g10_test_kit/onc_program_procedure.yml +908 -134
  14. data/lib/onc_certification_g10_test_kit/patient_scope_test.rb +1 -1
  15. data/lib/onc_certification_g10_test_kit/short_id_map.yml +1 -0
  16. data/lib/onc_certification_g10_test_kit/single_patient_api_group.rb +17 -16
  17. data/lib/onc_certification_g10_test_kit/single_patient_us_core_4_api_group.rb +17 -16
  18. data/lib/onc_certification_g10_test_kit/single_patient_us_core_5_api_group.rb +17 -16
  19. data/lib/onc_certification_g10_test_kit/single_patient_us_core_6_api_group.rb +19 -18
  20. data/lib/onc_certification_g10_test_kit/single_patient_us_core_7_api_group.rb +19 -18
  21. data/lib/onc_certification_g10_test_kit/smart_app_launch_invalid_aud_group.rb +1 -1
  22. data/lib/onc_certification_g10_test_kit/smart_asymmetric_launch_group.rb +1 -1
  23. data/lib/onc_certification_g10_test_kit/smart_ehr_patient_launch_group.rb +2 -2
  24. data/lib/onc_certification_g10_test_kit/smart_ehr_patient_launch_group_stu2.rb +2 -2
  25. data/lib/onc_certification_g10_test_kit/smart_ehr_patient_launch_group_stu2_2.rb +2 -2
  26. data/lib/onc_certification_g10_test_kit/smart_ehr_practitioner_app_group.rb +4 -4
  27. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_group.rb +1 -1
  28. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_group_stu2_2.rb +1 -1
  29. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_us_core_7_group.rb +1 -1
  30. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_us_core_7_group_stu2_2.rb +1 -1
  31. data/lib/onc_certification_g10_test_kit/smart_granular_scope_selection_group.rb +4 -4
  32. data/lib/onc_certification_g10_test_kit/smart_invalid_pkce_group.rb +6 -6
  33. data/lib/onc_certification_g10_test_kit/smart_invalid_token_group.rb +3 -3
  34. data/lib/onc_certification_g10_test_kit/smart_invalid_token_group_stu2.rb +3 -3
  35. data/lib/onc_certification_g10_test_kit/smart_limited_app_group.rb +3 -3
  36. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group.rb +2 -2
  37. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group_stu2.rb +2 -2
  38. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group_stu2_2.rb +2 -2
  39. data/lib/onc_certification_g10_test_kit/smart_standalone_patient_app_group.rb +28 -2
  40. data/lib/onc_certification_g10_test_kit/smart_v1_scopes_group.rb +2 -2
  41. data/lib/onc_certification_g10_test_kit/tasks/generate_matrix.rb +1 -1
  42. data/lib/onc_certification_g10_test_kit/urls.rb +4 -0
  43. data/lib/onc_certification_g10_test_kit/version.rb +2 -1
  44. data/lib/onc_certification_g10_test_kit.rb +15 -25
  45. metadata +19 -68
@@ -22,7 +22,7 @@ module ONCCertificationG10TestKit
22
22
 
23
23
  run do
24
24
  expected_scopes =
25
- if scope_version == :v2 || scope_version == :v22
25
+ if [:v2, :v22].include?(scope_version)
26
26
  [
27
27
  Regexp.new(scope_regex_string('patient/Patient.rs').gsub('.rs', '.r?s')),
28
28
  Regexp.new(scope_regex_string('patient/Patient.rs').gsub('.rs', '.rs?'))
@@ -6,6 +6,7 @@ g10_certification-g10_smart_standalone_patient_app-smart_discovery-Test02: 1.1.0
6
6
  g10_certification-g10_smart_standalone_patient_app-smart_discovery-Test03: 1.1.03
7
7
  g10_certification-g10_smart_standalone_patient_app-smart_discovery-Test04: 1.1.04
8
8
  g10_certification-g10_smart_standalone_patient_app-smart_discovery-g10_smart_well_known_capabilities: 1.1.05
9
+ g10_certification-g10_smart_standalone_patient_app-smart_discovery-g10_us_core_7_smart_version_check: 1.1.06
9
10
  g10_certification-g10_smart_standalone_patient_app-smart_discovery_stu2: '1.2'
10
11
  g10_certification-g10_smart_standalone_patient_app-smart_discovery_stu2-well_known_endpoint: 1.2.01
11
12
  g10_certification-g10_smart_standalone_patient_app-smart_discovery_stu2-well_known_capabilities_stu2: 1.2.02
@@ -111,24 +111,25 @@ module ONCCertificationG10TestKit
111
111
  end
112
112
  end
113
113
 
114
- USCoreTestKit::USCoreV311::USCoreTestSuite.groups[1].groups.each do |group|
115
- test_group = group.ancestors[1]
116
-
117
- next if test_group.optional?
118
-
119
- id = test_group.id
120
-
121
- group_config = {}
122
- if test_group.respond_to?(:metadata) &&
123
- test_group.metadata.delayed? &&
124
- !test_group.metadata.searchable_delayed_resource?
125
- test_group.children.reject! { |child| child.include? USCoreTestKit::SearchTest }
126
- group_config[:options] = { read_all_resources: true }
114
+ USCoreTestKit::USCoreV311::USCoreTestSuite
115
+ .groups
116
+ .find { |g| g.title == 'US Core FHIR API' }
117
+ .groups
118
+ .each do |group|
119
+ test_group = group.ancestors[1]
120
+
121
+ next if test_group.optional?
122
+
123
+ group(from: test_group.id, exclude_optional: true)
124
+
125
+ if test_group.respond_to?(:metadata) && # rubocop:disable Style/Next
126
+ test_group.metadata.delayed? &&
127
+ !test_group.metadata.searchable_delayed_resource?
128
+ groups.last.children.reject! { |child| child.include? USCoreTestKit::SearchTest }
129
+ groups.last.config(options: { read_all_resources: true })
130
+ end
127
131
  end
128
132
 
129
- group(from: id, exclude_optional: true, config: group_config)
130
- end
131
-
132
133
  groups.first.description %(
133
134
  The Capability Statement test verifies a FHIR server's ability support the
134
135
  [capabilities
@@ -123,24 +123,25 @@ module ONCCertificationG10TestKit
123
123
  end
124
124
  end
125
125
 
126
- USCoreTestKit::USCoreV400::USCoreTestSuite.groups[1].groups.each do |group|
127
- test_group = group.ancestors[1]
128
-
129
- next if test_group.optional?
130
-
131
- id = test_group.id
132
-
133
- group_config = {}
134
- if test_group.respond_to?(:metadata) &&
135
- test_group.metadata.delayed? &&
136
- !test_group.metadata.searchable_delayed_resource?
137
- test_group.children.reject! { |child| child.include? USCoreTestKit::SearchTest }
138
- group_config[:options] = { read_all_resources: true }
126
+ USCoreTestKit::USCoreV400::USCoreTestSuite
127
+ .groups
128
+ .find { |g| g.title == 'US Core FHIR API' }
129
+ .groups
130
+ .each do |group|
131
+ test_group = group.ancestors[1]
132
+
133
+ next if test_group.optional?
134
+
135
+ group(from: test_group.id, exclude_optional: true)
136
+
137
+ if test_group.respond_to?(:metadata) && # rubocop:disable Style/Next
138
+ test_group.metadata.delayed? &&
139
+ !test_group.metadata.searchable_delayed_resource?
140
+ groups.last.children.reject! { |child| child.include? USCoreTestKit::SearchTest }
141
+ groups.last.config(options: { read_all_resources: true })
142
+ end
139
143
  end
140
144
 
141
- group(from: id, exclude_optional: true, config: group_config)
142
- end
143
-
144
145
  groups.first.description %(
145
146
  The Capability Statement test verifies a FHIR server's ability support the
146
147
  [capabilities
@@ -137,24 +137,25 @@ module ONCCertificationG10TestKit
137
137
  end
138
138
  end
139
139
 
140
- USCoreTestKit::USCoreV501::USCoreTestSuite.groups[1].groups.each do |group|
141
- test_group = group.ancestors[1]
142
-
143
- next if test_group.optional?
144
-
145
- id = test_group.id
146
-
147
- group_config = {}
148
- if test_group.respond_to?(:metadata) &&
149
- test_group.metadata.delayed? &&
150
- !test_group.metadata.searchable_delayed_resource?
151
- test_group.children.reject! { |child| child.include? USCoreTestKit::SearchTest }
152
- group_config[:options] = { read_all_resources: true }
140
+ USCoreTestKit::USCoreV501::USCoreTestSuite
141
+ .groups
142
+ .find { |g| g.title == 'US Core FHIR API' }
143
+ .groups
144
+ .each do |group|
145
+ test_group = group.ancestors[1]
146
+
147
+ next if test_group.optional?
148
+
149
+ group(from: test_group.id, exclude_optional: true)
150
+
151
+ if test_group.respond_to?(:metadata) && # rubocop:disable Style/Next
152
+ test_group.metadata.delayed? &&
153
+ !test_group.metadata.searchable_delayed_resource?
154
+ groups.last.children.reject! { |child| child.include? USCoreTestKit::SearchTest }
155
+ groups.last.config(options: { read_all_resources: true })
156
+ end
153
157
  end
154
158
 
155
- group(from: id, exclude_optional: true, config: group_config)
156
- end
157
-
158
159
  groups.first.description %(
159
160
  The Capability Statement test verifies a FHIR server's ability support the
160
161
  [capabilities
@@ -166,27 +166,28 @@ module ONCCertificationG10TestKit
166
166
  end
167
167
  end
168
168
 
169
- USCoreTestKit::USCoreV610::USCoreTestSuite.groups[1].groups.each do |group|
170
- test_group = group.ancestors[1]
171
-
172
- next if test_group.optional?
173
-
174
- id = test_group.id
175
-
176
- group_config = {}
177
- if test_group.respond_to?(:metadata) &&
178
- test_group.metadata.delayed? &&
179
- !test_group.metadata.searchable_delayed_resource?
180
- test_group.children.reject! do |child|
181
- child.include?(USCoreTestKit::SearchTest) &&
182
- !child.include?(USCoreTestKit::PractitionerAddressTest)
169
+ USCoreTestKit::USCoreV610::USCoreTestSuite
170
+ .groups
171
+ .find { |g| g.title == 'US Core FHIR API' }
172
+ .groups
173
+ .each do |group|
174
+ test_group = group.ancestors[1]
175
+
176
+ next if test_group.optional?
177
+
178
+ group(from: test_group.id, exclude_optional: true)
179
+
180
+ if test_group.respond_to?(:metadata) && # rubocop:disable Style/Next
181
+ test_group.metadata.delayed? &&
182
+ !test_group.metadata.searchable_delayed_resource?
183
+ groups.last.children.reject! do |child|
184
+ child.include?(USCoreTestKit::SearchTest) &&
185
+ !child.include?(USCoreTestKit::PractitionerAddressTest)
186
+ end
187
+ groups.last.config(options: { read_all_resources: true })
183
188
  end
184
- group_config[:options] = { read_all_resources: true }
185
189
  end
186
190
 
187
- group(from: id, exclude_optional: true, config: group_config)
188
- end
189
-
190
191
  groups.first.description %(
191
192
  The Capability Statement test verifies a FHIR server's ability support the
192
193
  [capabilities
@@ -171,27 +171,28 @@ module ONCCertificationG10TestKit
171
171
  end
172
172
  end
173
173
 
174
- USCoreTestKit::USCoreV700::USCoreTestSuite.groups.find { |g| g.title == 'US Core FHIR API' }.groups.each do |group|
175
- test_group = group.ancestors[1]
176
-
177
- next if test_group.optional?
178
-
179
- id = test_group.id
180
-
181
- group_config = {}
182
- if test_group.respond_to?(:metadata) &&
183
- test_group.metadata.delayed? &&
184
- !test_group.metadata.searchable_delayed_resource?
185
- test_group.children.reject! do |child|
186
- child.include?(USCoreTestKit::SearchTest) &&
187
- !child.include?(USCoreTestKit::PractitionerAddressTest)
174
+ USCoreTestKit::USCoreV700::USCoreTestSuite
175
+ .groups
176
+ .find { |g| g.title == 'US Core FHIR API' }
177
+ .groups
178
+ .each do |group|
179
+ test_group = group.ancestors[1]
180
+
181
+ next if test_group.optional?
182
+
183
+ group(from: test_group.id, exclude_optional: true)
184
+
185
+ if test_group.respond_to?(:metadata) && # rubocop:disable Style/Next
186
+ test_group.metadata.delayed? &&
187
+ !test_group.metadata.searchable_delayed_resource?
188
+ groups.last.children.reject! do |child|
189
+ child.include?(USCoreTestKit::SearchTest) &&
190
+ !child.include?(USCoreTestKit::PractitionerAddressTest)
191
+ end
192
+ groups.last.config(options: { read_all_resources: true })
188
193
  end
189
- group_config[:options] = { read_all_resources: true }
190
194
  end
191
195
 
192
- group(from: id, exclude_optional: true, config: group_config)
193
- end
194
-
195
196
  groups.first.description %(
196
197
  The Capability Statement test verifies a FHIR server's ability support the
197
198
  [capabilities
@@ -5,7 +5,7 @@ module ONCCertificationG10TestKit
5
5
  input_instructions %(
6
6
  Register Inferno as a standalone application using the following information:
7
7
 
8
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
8
+ * Redirect URI: `#{REDIRECT_URI}`
9
9
  )
10
10
  description %(
11
11
  This scenario verifies that a SMART Launch Sequence, specifically the
@@ -33,7 +33,7 @@ module ONCCertificationG10TestKit
33
33
  input_instructions %(
34
34
  Register Inferno as a standalone application using the following information:
35
35
 
36
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
36
+ * Redirect URI: `#{REDIRECT_URI}`
37
37
  * JWKS URI (`jku`): `#{Inferno::Application[:base_url]}/custom/smart_stu2/.well-known/jwks.json`
38
38
 
39
39
  Enter in the appropriate scopes to enable access to the Patient resource.
@@ -16,8 +16,8 @@ module ONCCertificationG10TestKit
16
16
  Register Inferno as an EHR-launched application using patient-level scopes
17
17
  and the following URIs:
18
18
 
19
- * Launch URI: `#{SMARTAppLaunch::AppLaunchTest.config.options[:launch_uri]}`
20
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
19
+ * Launch URI: `#{LAUNCH_URI}`
20
+ * Redirect URI: `#{REDIRECT_URI}`
21
21
 
22
22
  In this scenario, Inferno will attempt an EHR Launch with a clinical scope restricted to a
23
23
  single patient and verify that a patient-level scope is granted and a
@@ -16,8 +16,8 @@ module ONCCertificationG10TestKit
16
16
  Register Inferno as an EHR-launched application using patient-level scopes
17
17
  and the following URIs:
18
18
 
19
- * Launch URI: `#{SMARTAppLaunch::AppLaunchTest.config.options[:launch_uri]}`
20
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
19
+ * Launch URI: `#{LAUNCH_URI}`
20
+ * Redirect URI: `#{REDIRECT_URI}`
21
21
 
22
22
  In this scenario, Inferno will attempt an EHR Launch with a clinical scope restricted to a
23
23
  single patient and verify that a patient-level scope is granted and a
@@ -16,8 +16,8 @@ module ONCCertificationG10TestKit
16
16
  Register Inferno as an EHR-launched application using patient-level scopes
17
17
  and the following URIs:
18
18
 
19
- * Launch URI: `#{SMARTAppLaunch::AppLaunchTest.config.options[:launch_uri]}`
20
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
19
+ * Launch URI: `#{LAUNCH_URI}`
20
+ * Redirect URI: `#{REDIRECT_URI}`
21
21
 
22
22
  In this scenario, Inferno will attempt an EHR Launch with a clinical scope restricted to a
23
23
  single patient and verify that a patient-level scope is granted and a
@@ -12,8 +12,8 @@ module ONCCertificationG10TestKit
12
12
  input_instructions %(
13
13
  Register Inferno as an EHR-launched application using the following information:
14
14
 
15
- * Launch URI: `#{SMARTAppLaunch::AppLaunchTest.config.options[:launch_uri]}`
16
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
15
+ * Launch URI: `#{LAUNCH_URI}`
16
+ * Redirect URI: `#{REDIRECT_URI}`
17
17
 
18
18
  Enter in the appropriate scope to enable user-level access to all relevant
19
19
  resources. If using SMART v2, v2-style scopes must be used. In addition,
@@ -44,8 +44,8 @@ module ONCCertificationG10TestKit
44
44
  Prior to running this test, register Inferno as an EHR-launched
45
45
  application using the following information:
46
46
 
47
- * Launch URI: `#{SMARTAppLaunch::AppLaunchTest.config.options[:launch_uri]}`
48
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
47
+ * Launch URI: `#{LAUNCH_URI}`
48
+ * Redirect URI: `#{REDIRECT_URI}`
49
49
 
50
50
  For EHRs that use Internet Explorer 11 to display embedded apps,
51
51
  please review [instructions on how to complete the EHR Practitioner App
@@ -6,7 +6,7 @@ module ONCCertificationG10TestKit
6
6
  input_instructions %(
7
7
  If necessary, register Inferno as a standalone application using the following information:
8
8
 
9
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
9
+ * Redirect URI: `#{REDIRECT_URI}`
10
10
 
11
11
  Inferno may be registered multiple times with different `client_ids`, or this
12
12
  may reuse a single registration of Inferno.`
@@ -6,7 +6,7 @@ module ONCCertificationG10TestKit
6
6
  input_instructions %(
7
7
  If necessary, register Inferno as a standalone application using the following information:
8
8
 
9
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
9
+ * Redirect URI: `#{REDIRECT_URI}`
10
10
 
11
11
  Inferno may be registered multiple times with different `client_ids`, or this
12
12
  may reuse a single registration of Inferno.`
@@ -6,7 +6,7 @@ module ONCCertificationG10TestKit
6
6
  input_instructions %(
7
7
  If necessary, register Inferno as a standalone application using the following information:
8
8
 
9
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
9
+ * Redirect URI: `#{REDIRECT_URI}`
10
10
 
11
11
  Inferno may be registered multiple times with different `client_ids`, or this
12
12
  may reuse a single registration of Inferno.`
@@ -6,7 +6,7 @@ module ONCCertificationG10TestKit
6
6
  input_instructions %(
7
7
  If necessary, register Inferno as a standalone application using the following information:
8
8
 
9
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
9
+ * Redirect URI: `#{REDIRECT_URI}`
10
10
 
11
11
  Inferno may be registered multiple times with different `client_ids`, or this
12
12
  may reuse a single registration of Inferno.`
@@ -10,10 +10,10 @@ module ONCCertificationG10TestKit
10
10
  input_instructions %(
11
11
  If necessary, register Inferno as a standalone application using the following information:
12
12
 
13
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
13
+ * Redirect URI: `#{REDIRECT_URI}`
14
14
 
15
15
  Once the test is running, Inferno will perform a launch. The tester must grant
16
- a sub-resource scope for each Conditoin and Observation, instead of granting
16
+ a sub-resource scope for each Condition and Observation, instead of granting
17
17
  access to all Condition and Observation resources:
18
18
 
19
19
  * “Condition” sub-resource scopes “Encounter Diagnosis”, “Problem List”,
@@ -128,7 +128,7 @@ module ONCCertificationG10TestKit
128
128
  [Follow this link to authorize with the SMART server](#{auth_url}).
129
129
 
130
130
  Tests will resume once Inferno receives a request at
131
- `#{config.options[:redirect_uri]}` with a state of `#{state}`.
131
+ `#{REDIRECT_URI}` with a state of `#{state}`.
132
132
  )
133
133
  end,
134
134
  ignore_missing_scopes_check: true
@@ -190,7 +190,7 @@ module ONCCertificationG10TestKit
190
190
  [Follow this link to authorize with the SMART server](#{auth_url}).
191
191
 
192
192
  Tests will resume once Inferno receives a request at
193
- `#{config.options[:redirect_uri]}` with a state of `#{state}`.
193
+ `#{REDIRECT_URI}` with a state of `#{state}`.
194
194
  )
195
195
  end,
196
196
  ignore_missing_scopes_check: true
@@ -20,7 +20,7 @@ module ONCCertificationG10TestKit
20
20
  oauth2_params = {
21
21
  grant_type: 'authorization_code',
22
22
  code:,
23
- redirect_uri: config.options[:redirect_uri]
23
+ redirect_uri: REDIRECT_URI
24
24
  }
25
25
 
26
26
  oauth2_headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
@@ -46,7 +46,7 @@ module ONCCertificationG10TestKit
46
46
  input_instructions %(
47
47
  Register Inferno as a standalone application using the following information:
48
48
 
49
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
49
+ * Redirect URI: `#{REDIRECT_URI}`
50
50
  )
51
51
  description %(
52
52
  This scenario verifies that a SMART Launch Sequence, specifically the
@@ -202,7 +202,7 @@ module ONCCertificationG10TestKit
202
202
  server](#{auth_url}).
203
203
 
204
204
  Tests will resume once Inferno receives a request at
205
- `#{config.options[:redirect_uri]}` with a state of `#{state}`.
205
+ `#{REDIRECT_URI}` with a state of `#{state}`.
206
206
  )
207
207
  end
208
208
  }
@@ -229,7 +229,7 @@ module ONCCertificationG10TestKit
229
229
  server](#{auth_url}).
230
230
 
231
231
  Tests will resume once Inferno receives a request at
232
- `#{config.options[:redirect_uri]}` with a state of `#{state}`.
232
+ `#{REDIRECT_URI}` with a state of `#{state}`.
233
233
  )
234
234
  end
235
235
  }
@@ -260,7 +260,7 @@ module ONCCertificationG10TestKit
260
260
  server](#{auth_url}).
261
261
 
262
262
  Tests will resume once Inferno receives a request at
263
- `#{config.options[:redirect_uri]}` with a state of `#{state}`.
263
+ `#{REDIRECT_URI}` with a state of `#{state}`.
264
264
  )
265
265
  end
266
266
  }
@@ -292,7 +292,7 @@ module ONCCertificationG10TestKit
292
292
  server](#{auth_url}).
293
293
 
294
294
  Tests will resume once Inferno receives a request at
295
- `#{config.options[:redirect_uri]}` with a state of `#{state}`.
295
+ `#{REDIRECT_URI}` with a state of `#{state}`.
296
296
  )
297
297
  end
298
298
  }
@@ -5,7 +5,7 @@ module ONCCertificationG10TestKit
5
5
  input_instructions %(
6
6
  Register Inferno as a standalone application using the following information:
7
7
 
8
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
8
+ * Redirect URI: `#{REDIRECT_URI}`
9
9
  )
10
10
  description %(
11
11
  This scenario verifies that a SMART Launch
@@ -150,7 +150,7 @@ module ONCCertificationG10TestKit
150
150
  oauth2_params = {
151
151
  grant_type: 'authorization_code',
152
152
  code: 'BAD_CODE',
153
- redirect_uri: config.options[:redirect_uri]
153
+ redirect_uri: REDIRECT_URI
154
154
  }
155
155
  oauth2_headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
156
156
 
@@ -189,7 +189,7 @@ module ONCCertificationG10TestKit
189
189
  oauth2_params = {
190
190
  grant_type: 'authorization_code',
191
191
  code:,
192
- redirect_uri: config.options[:redirect_uri]
192
+ redirect_uri: REDIRECT_URI
193
193
  }
194
194
  oauth2_headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
195
195
 
@@ -5,7 +5,7 @@ module ONCCertificationG10TestKit
5
5
  input_instructions %(
6
6
  Register Inferno as a standalone application using the following information:
7
7
 
8
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
8
+ * Redirect URI: `#{REDIRECT_URI}`
9
9
  )
10
10
  description %(
11
11
  This scenario verifies that a SMART Launch
@@ -155,7 +155,7 @@ module ONCCertificationG10TestKit
155
155
  oauth2_params = {
156
156
  grant_type: 'authorization_code',
157
157
  code: 'BAD_CODE',
158
- redirect_uri: config.options[:redirect_uri]
158
+ redirect_uri: REDIRECT_URI
159
159
  }
160
160
  oauth2_headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
161
161
 
@@ -194,7 +194,7 @@ module ONCCertificationG10TestKit
194
194
  oauth2_params = {
195
195
  grant_type: 'authorization_code',
196
196
  code:,
197
- redirect_uri: config.options[:redirect_uri]
197
+ redirect_uri: REDIRECT_URI
198
198
  }
199
199
  oauth2_headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
200
200
 
@@ -140,7 +140,7 @@ module ONCCertificationG10TestKit
140
140
  server](#{auth_url}).
141
141
 
142
142
  Tests will resume once Inferno receives a request at
143
- `#{config.options[:redirect_uri]}` with a state of `#{state}`.
143
+ `#{REDIRECT_URI}` with a state of `#{state}`.
144
144
 
145
145
  Access should only be granted to the following resources:
146
146
 
@@ -267,7 +267,7 @@ module ONCCertificationG10TestKit
267
267
  server](#{auth_url}).
268
268
 
269
269
  Tests will resume once Inferno receives a request at
270
- `#{config.options[:redirect_uri]}` with a state of `#{state}`.
270
+ `#{REDIRECT_URI}` with a state of `#{state}`.
271
271
 
272
272
  Access should only be granted to the following resources:
273
273
 
@@ -394,7 +394,7 @@ module ONCCertificationG10TestKit
394
394
  server](#{auth_url}).
395
395
 
396
396
  Tests will resume once Inferno receives a request at
397
- `#{config.options[:redirect_uri]}` with a state of `#{state}`.
397
+ `#{REDIRECT_URI}` with a state of `#{state}`.
398
398
 
399
399
  Access should only be granted to the following resources:
400
400
 
@@ -5,7 +5,7 @@ module ONCCertificationG10TestKit
5
5
  input_instructions %(
6
6
  Register Inferno as a standalone application using the following information:
7
7
 
8
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
8
+ * Redirect URI: `#{REDIRECT_URI}`
9
9
 
10
10
  Enter in the appropriate scope to enable patient-level access to all
11
11
  relevant resources. If using SMART v2, v2-style scopes must be used. In
@@ -22,7 +22,7 @@ module ONCCertificationG10TestKit
22
22
  Prior to executing this test, register Inferno as a public standalone
23
23
  application using the following information:
24
24
 
25
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
25
+ * Redirect URI: `#{REDIRECT_URI}`
26
26
 
27
27
  Inferno will act as a public client redirect the tester to the the
28
28
  authorization endpoint so that they may provide any required credentials
@@ -5,7 +5,7 @@ module ONCCertificationG10TestKit
5
5
  input_instructions %(
6
6
  Register Inferno as a standalone application using the following information:
7
7
 
8
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
8
+ * Redirect URI: `#{REDIRECT_URI}`
9
9
 
10
10
  Enter in the appropriate scope to enable patient-level access to all
11
11
  relevant resources. In addition, support for the OpenID Connect (openid
@@ -22,7 +22,7 @@ module ONCCertificationG10TestKit
22
22
  Prior to executing this test, register Inferno as a public standalone
23
23
  application using the following information:
24
24
 
25
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
25
+ * Redirect URI: `#{REDIRECT_URI}`
26
26
 
27
27
  Inferno will act as a public client redirect the tester to the the
28
28
  authorization endpoint so that they may provide any required credentials
@@ -5,7 +5,7 @@ module ONCCertificationG10TestKit
5
5
  input_instructions %(
6
6
  Register Inferno as a standalone application using the following information:
7
7
 
8
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
8
+ * Redirect URI: `#{REDIRECT_URI}`
9
9
 
10
10
  Enter in the appropriate scope to enable patient-level access to all
11
11
  relevant resources. In addition, support for the OpenID Connect (openid
@@ -22,7 +22,7 @@ module ONCCertificationG10TestKit
22
22
  Prior to executing this test, register Inferno as a public standalone
23
23
  application using the following information:
24
24
 
25
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
25
+ * Redirect URI: `#{REDIRECT_URI}`
26
26
 
27
27
  Inferno will act as a public client redirect the tester to the the
28
28
  authorization endpoint so that they may provide any required credentials
@@ -15,7 +15,7 @@ module ONCCertificationG10TestKit
15
15
  input_instructions %(
16
16
  Register Inferno as a standalone application using the following information:
17
17
 
18
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
18
+ * Redirect URI: `#{REDIRECT_URI}`
19
19
 
20
20
  Enter in the appropriate scope to enable patient-level access to all
21
21
  relevant resources. In addition, support for the OpenID Connect (openid
@@ -40,7 +40,7 @@ module ONCCertificationG10TestKit
40
40
  Prior to running the scenario, register Inferno as a confidential client
41
41
  with the following information:
42
42
 
43
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
43
+ * Redirect URI: `#{REDIRECT_URI}`
44
44
 
45
45
  The following implementation specifications are relevant to this scenario:
46
46
 
@@ -90,6 +90,32 @@ module ONCCertificationG10TestKit
90
90
  ]
91
91
  }
92
92
  }
93
+
94
+ test do
95
+ required_suite_options(G10Options::US_CORE_7_REQUIREMENT)
96
+
97
+ id :g10_us_core_7_smart_version_check
98
+ title 'US Core 7 requires SMART App Launch 2.0.0 or above'
99
+ description %(
100
+ The [US Core 7 SMART on FHIR Obligations and
101
+ Capabilities](https://hl7.org/fhir/us/core/STU7/scopes.html) require
102
+ SMART App Launch 2.0.0 or above, so systems can not certify with US
103
+ Core 7 and SMART App Launch 1.0.0.
104
+
105
+ The [Test
106
+ Procedure](https://www.healthit.gov/test-method/standardized-api-patient-and-population-services)
107
+ also states in **Paragraph (g)(10)(v)(A) – Authentication and
108
+ authorization for patient and user scopes**:
109
+
110
+ > Note: US Core 7.0.0 must be tested with SMART App Launch 2.0.0 or
111
+ above.
112
+ )
113
+
114
+ run do
115
+ assert false, 'US Core 7 is not eligible for certification with SMART App Launch 1.0.0. ' \
116
+ 'Start a new session with SMART App Launch 2.0.0 or higher.'
117
+ end
118
+ end
93
119
  end
94
120
 
95
121
  group from: :smart_discovery_stu2 do