onc_certification_g10_test_kit 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/lib/inferno/exceptions.rb +31 -0
  4. data/lib/inferno/ext/bloomer.rb +24 -0
  5. data/lib/inferno/repositiories/validators.rb +17 -0
  6. data/lib/inferno/repositiories/value_sets.rb +26 -0
  7. data/lib/inferno/terminology/bcp47.rb +95 -0
  8. data/lib/inferno/terminology/bcp_13.rb +26 -0
  9. data/lib/inferno/terminology/codesystem.rb +49 -0
  10. data/lib/inferno/terminology/expected_manifest.yml +1123 -0
  11. data/lib/inferno/terminology/fhir_package_manager.rb +69 -0
  12. data/lib/inferno/terminology/loader.rb +298 -0
  13. data/lib/inferno/terminology/tasks/check_built_terminology.rb +77 -0
  14. data/lib/inferno/terminology/tasks/cleanup.rb +13 -0
  15. data/lib/inferno/terminology/tasks/cleanup_precursors.rb +23 -0
  16. data/lib/inferno/terminology/tasks/count_codes_in_value_set.rb +20 -0
  17. data/lib/inferno/terminology/tasks/create_value_set_validators.rb +34 -0
  18. data/lib/inferno/terminology/tasks/download_fhir_terminology.rb +27 -0
  19. data/lib/inferno/terminology/tasks/download_umls.rb +109 -0
  20. data/lib/inferno/terminology/tasks/download_umls_notice.rb +20 -0
  21. data/lib/inferno/terminology/tasks/expand_value_set_to_file.rb +36 -0
  22. data/lib/inferno/terminology/tasks/process_umls.rb +91 -0
  23. data/lib/inferno/terminology/tasks/process_umls_translations.rb +85 -0
  24. data/lib/inferno/terminology/tasks/run_umls_jar.rb +75 -0
  25. data/lib/inferno/terminology/tasks/temp_dir.rb +27 -0
  26. data/lib/inferno/terminology/tasks/unzip_umls.rb +42 -0
  27. data/lib/inferno/terminology/tasks/validate_code.rb +36 -0
  28. data/lib/inferno/terminology/tasks.rb +11 -0
  29. data/lib/inferno/terminology/terminology_configuration.rb +52 -0
  30. data/lib/inferno/terminology/terminology_validation.rb +42 -0
  31. data/lib/inferno/terminology/validator.rb +64 -0
  32. data/lib/inferno/terminology/value_set.rb +462 -0
  33. data/lib/inferno/terminology.rb +16 -0
  34. data/lib/onc_certification_g10_test_kit/authorization_request_builder.rb +87 -0
  35. data/lib/onc_certification_g10_test_kit/base_token_refresh_group.rb +48 -0
  36. data/lib/onc_certification_g10_test_kit/bulk_data_authorization.rb +235 -0
  37. data/lib/onc_certification_g10_test_kit/bulk_data_group_export.rb +255 -0
  38. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_validation.rb +474 -0
  39. data/lib/onc_certification_g10_test_kit/bulk_data_jwks.json +58 -0
  40. data/lib/onc_certification_g10_test_kit/bulk_export_validation_tester.rb +171 -0
  41. data/lib/onc_certification_g10_test_kit/configuration_checker.rb +104 -0
  42. data/lib/onc_certification_g10_test_kit/export_kick_off_performer.rb +12 -0
  43. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-bodyheight.json +3772 -0
  44. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-bodytemp.json +3772 -0
  45. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-bodyweight.json +3772 -0
  46. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-bp.json +6034 -0
  47. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-heartrate.json +3756 -0
  48. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-resprate.json +3756 -0
  49. data/lib/onc_certification_g10_test_kit/limited_scope_grant_test.rb +66 -0
  50. data/lib/onc_certification_g10_test_kit/multi_patient_api.rb +43 -0
  51. data/lib/onc_certification_g10_test_kit/patient_context_test.rb +30 -0
  52. data/lib/onc_certification_g10_test_kit/profile_guesser.rb +69 -0
  53. data/lib/onc_certification_g10_test_kit/resource_access_test.rb +96 -0
  54. data/lib/onc_certification_g10_test_kit/restricted_access_test.rb +12 -0
  55. data/lib/onc_certification_g10_test_kit/restricted_resource_type_access_group.rb +303 -0
  56. data/lib/onc_certification_g10_test_kit/smart_app_launch_invalid_aud_group.rb +136 -0
  57. data/lib/onc_certification_g10_test_kit/smart_ehr_practitioner_app_group.rb +209 -0
  58. data/lib/onc_certification_g10_test_kit/smart_invalid_token_group.rb +197 -0
  59. data/lib/onc_certification_g10_test_kit/smart_limited_app_group.rb +123 -0
  60. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group.rb +113 -0
  61. data/lib/onc_certification_g10_test_kit/smart_scopes_test.rb +153 -0
  62. data/lib/onc_certification_g10_test_kit/smart_standalone_patient_app_group.rb +177 -0
  63. data/lib/onc_certification_g10_test_kit/terminology_binding_validator.rb +140 -0
  64. data/lib/onc_certification_g10_test_kit/token_revocation_group.rb +133 -0
  65. data/lib/onc_certification_g10_test_kit/unauthorized_access_test.rb +25 -0
  66. data/lib/onc_certification_g10_test_kit/unrestricted_resource_type_access_group.rb +375 -0
  67. data/lib/onc_certification_g10_test_kit/version.rb +3 -0
  68. data/lib/onc_certification_g10_test_kit/visual_inspection_and_attestations_group.rb +470 -0
  69. data/lib/onc_certification_g10_test_kit/well_known_capabilities_test.rb +37 -0
  70. data/lib/onc_certification_g10_test_kit.rb +223 -0
  71. metadata +310 -0
@@ -0,0 +1,133 @@
1
+ module ONCCertificationG10TestKit
2
+ class TokenRevocationGroup < Inferno::TestGroup
3
+ title 'Token Revocation'
4
+ description 'Demonstrate the Health IT module is capable of revoking access granted to an application.'
5
+ id :g10_token_revocation
6
+ run_as_group
7
+ input :token_revocation_attestation,
8
+ title: 'Prior to executing test, Health IT developer demonstrated revoking tokens provided during patient standalone launch.', # rubocop:disable Layout/LineLength
9
+ type: 'radio',
10
+ default: 'false',
11
+ options: {
12
+ list_options: [
13
+ {
14
+ label: 'Yes',
15
+ value: 'true'
16
+ },
17
+ {
18
+ label: 'No',
19
+ value: 'false'
20
+ }
21
+ ]
22
+ }
23
+ input :token_revocation_notes,
24
+ title: 'Notes, if applicable:',
25
+ type: 'textarea',
26
+ optional: true
27
+ input :url, :access_token, :refresh_token, :smart_token_url, :patient_id, :client_id, :client_secret
28
+
29
+ config(
30
+ inputs: {
31
+ url: {
32
+ title: 'FHIR Endpoint',
33
+ description: 'URL of the FHIR endpoint used by standalone applications'
34
+ },
35
+ smart_token_url: {
36
+ title: 'OAuth 2.0 Token Endpoint',
37
+ description: 'OAuth token endpoint provided during the patient standalone launch'
38
+ },
39
+ access_token: {
40
+ name: :standalone_access_token,
41
+ title: 'Revoked Bearer Token',
42
+ description: 'Prior to the test, please revoke this bearer token from patient standalone launch.'
43
+ },
44
+ refresh_token: {
45
+ name: :standalone_refresh_token,
46
+ title: 'Revoked Refresh Token',
47
+ description: 'Prior to the test, please revoke this refresh token from patient standalone launch.'
48
+ },
49
+ patient_id: {
50
+ name: :standalone_patient_id,
51
+ title: 'Patient ID',
52
+ description: 'Patient ID associated with revoked tokens provided as context in the patient standalone launch. This will be used to verify access is no longer granted using the revoked token.' # rubocop:disable Layout/LineLength
53
+ },
54
+ client_id: {
55
+ name: :standalone_client_id,
56
+ title: 'Standalone Client ID',
57
+ description: 'Client ID provided during registration of Inferno as a standalone application',
58
+ locked: true
59
+ },
60
+ client_secret: {
61
+ name: :standalone_client_secret,
62
+ title: 'Standalone Client Secret',
63
+ description: 'Client Secret provided during registration of Inferno as a standalone application',
64
+ locked: true
65
+ }
66
+ }
67
+ )
68
+
69
+ test do
70
+ title 'Health IT developer demonstrated the ability of the Health IT Module to revoke tokens.'
71
+ description %(
72
+ Health IT developer demonstrated the ability of the Health IT Module /
73
+ authorization server to revoke tokens.
74
+ )
75
+
76
+ run do
77
+ assert token_revocation_attestation == 'true',
78
+ 'Health IT Module did not demonstrate support for application registration for single patients.'
79
+ pass token_revocation_notes if token_revocation_notes.present?
80
+ end
81
+ end
82
+
83
+ test do
84
+ title 'Access to Patient resource returns unauthorized after token revocation.'
85
+ description %(
86
+ This test checks that the Patient resource returns unuathorized after token revocation.
87
+ )
88
+
89
+ fhir_client :revoked_token do
90
+ url :url
91
+ bearer_token :access_token
92
+ end
93
+
94
+ run do
95
+ skip_if patient_id.blank?,
96
+ 'Patient ID not provided to test. The patient ID is typically provided ' \
97
+ 'during a SMART launch context.'
98
+ skip_if access_token.blank?,
99
+ 'Bearer token not provided. This test verifies that the bearer token can ' \
100
+ 'no longer be used to access a Patient resource.'
101
+
102
+ fhir_read(:patient, patient_id, client: :revoked_token)
103
+
104
+ assert_response_status([401, 403, 404])
105
+ end
106
+ end
107
+
108
+ test do
109
+ title 'Token refresh fails after token revocation.'
110
+ description %(
111
+ This test checks that refreshing token fails after token revokation.
112
+ )
113
+
114
+ run do
115
+ skip_if refresh_token.blank?,
116
+ 'Refresh token not provided to test.'
117
+ oauth2_params = {
118
+ 'grant_type' => 'refresh_token',
119
+ 'refresh_token' => refresh_token
120
+ }
121
+ client_credentials = "#{client_id}:#{client_secret}"
122
+ oauth2_headers = {
123
+ 'Content-Type' => 'application/x-www-form-urlencoded',
124
+ 'Authorization' => "Basic #{Base64.strict_encode64(client_credentials)}"
125
+ }
126
+
127
+ post(smart_token_url, body: oauth2_params, headers: oauth2_headers)
128
+
129
+ assert_response_status([400, 401])
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,25 @@
1
+ module ONCCertificationG10TestKit
2
+ class UnauthorizedAccessTest < Inferno::Test
3
+ title 'Server rejects unauthorized access'
4
+ description %(
5
+ A server SHALL reject any unauthorized requests by returning an HTTP 401
6
+ unauthorized response code.
7
+ )
8
+ id :g10_unauthorized_access
9
+ input :patient_id, :url
10
+ uses_request :token
11
+
12
+ fhir_client :unauthenticated do
13
+ url :url
14
+ end
15
+
16
+ run do
17
+ skip_if request.status != 200, 'Token exchange was unsuccessful'
18
+ skip_if patient_id.blank?, 'Patient context expected to verify unauthorized read.'
19
+
20
+ fhir_read(:patient, patient_id, client: :unauthenticated)
21
+
22
+ assert_response_status(401)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,375 @@
1
+ require_relative 'resource_access_test'
2
+
3
+ module ONCCertificationG10TestKit
4
+ class UnrestrictedResourceTypeAccessGroup < Inferno::TestGroup
5
+ title 'Unrestricted Resource Type Access'
6
+ description %(
7
+ This test ensures that apps have full access to USCDI resources if granted
8
+ access by the tester. The tester must grant access to the following
9
+ resources during the SMART Launch process, and this test ensures they all
10
+ can be accessed:
11
+
12
+ * AllergyIntolerance
13
+ * CarePlan
14
+ * CareTeam
15
+ * Condition
16
+ * Device
17
+ * DiagnosticReport
18
+ * DocumentReference
19
+ * Goal
20
+ * Immunization
21
+ * MedicationRequest
22
+ * Observation
23
+ * Procedure
24
+ * Patient
25
+ * Provenance
26
+ * Encounter
27
+ * Practitioner
28
+ * Organization
29
+
30
+ For each of the resource types that can be mapped to USCDI data class or
31
+ elements, this set of tests performs a minimum number of requests to
32
+ determine that the resource type can be accessed given the scope granted.
33
+ In the case of the Patient resource, this test simply performs a read
34
+ request. For other resources, it performs a search by patient that must be
35
+ supported by the server. In some cases, servers can return an error
36
+ message if a status search parameter is not provided. For these, the test
37
+ will perform an additional search with the required status search
38
+ parameter.
39
+
40
+ This set of tests does not attempt to access resources that do not
41
+ directly map to USCDI v1, including Encounter, Location, Organization, and
42
+ Practitioner. It also does not test Provenance, as this resource type is
43
+ accessed by queries through other resource types. These resources types
44
+ are accessed in the more comprehensive Single Patient Query tests.
45
+
46
+ However, the authorization system must indicate that access is granted to
47
+ the Encounter, Practitioner and Organization resource types by providing
48
+ them in the returned scopes because they are required to support the read
49
+ interaction.
50
+ )
51
+ id :g10_unrestricted_resource_type_access
52
+
53
+ input :url, :smart_credentials, :patient_id, :received_scopes
54
+ input :smart_credentials, type: :oauth_credentials
55
+
56
+ fhir_client do
57
+ url :url
58
+ oauth_credentials :smart_credentials
59
+ end
60
+
61
+ test do
62
+ title 'Scope granted enables access to all US Core resource types.'
63
+ description %(
64
+ This test confirms that the scopes granted during authorization are
65
+ sufficient to access all relevant US Core resources.
66
+ )
67
+
68
+ def all_resources
69
+ [
70
+ 'AllergyIntolerance',
71
+ 'CarePlan',
72
+ 'CareTeam',
73
+ 'Condition',
74
+ 'Device',
75
+ 'DiagnosticReport',
76
+ 'DocumentReference',
77
+ 'Goal',
78
+ 'Immunization',
79
+ 'MedicationRequest',
80
+ 'Observation',
81
+ 'Procedure',
82
+ 'Patient',
83
+ 'Provenance',
84
+ 'Encounter',
85
+ 'Practitioner',
86
+ 'Organization'
87
+ ]
88
+ end
89
+
90
+ def non_patient_compartment_resources
91
+ [
92
+ 'Encounter',
93
+ 'Device',
94
+ 'Location',
95
+ 'Medication',
96
+ 'Organization',
97
+ 'Practitioner',
98
+ 'PractitionerRole',
99
+ 'RelatedPerson'
100
+ ]
101
+ end
102
+
103
+ def scope_granting_access?(resource_type)
104
+ received_scopes.split.find do |scope|
105
+ return true if non_patient_compartment_resources.include?(resource_type) &&
106
+ ["user/#{resource_type}.read", "user/#{resource_type}.*"].include?(scope)
107
+
108
+ [
109
+ 'patient/*.read',
110
+ 'patient/*.*',
111
+ "patient/#{resource_type}.read",
112
+ "patient/#{resource_type}.*"
113
+ ].include?(scope)
114
+ end
115
+ end
116
+
117
+ run do
118
+ skip_if received_scopes.blank?, 'A list of granted scopes was not provided to this test as required.'
119
+
120
+ allowed_resources = all_resources.select { |resource_type| scope_granting_access?(resource_type) }
121
+ denied_resources = all_resources - allowed_resources
122
+
123
+ assert denied_resources.empty?, %(
124
+ This test requires access to all US Core resources with patient
125
+ information, but the received scope:
126
+
127
+
128
+
129
+ `#{received_scopes}`
130
+
131
+
132
+
133
+ does not grant access to the `#{denied_resources.join(', ')}` resource
134
+ type(s).
135
+ )
136
+
137
+ pass 'Scopes received indicate access to all necessary resources.'
138
+ end
139
+ end
140
+
141
+ test from: :g10_resource_access_test do
142
+ title 'Access to Patient resources granted'
143
+ description %(
144
+ This test ensures that access to the Patient is granted or
145
+ denied based on the selection by the tester prior to the execution of
146
+ the test. If the tester indicated that access will be granted to this
147
+ resource, this test verifies that a search by patient in this resource
148
+ does not result in an access denied result. If the tester indicated that
149
+ access will be denied for this resource, this verifies that search by
150
+ patient in the resource results in an access denied result.
151
+ )
152
+ id :g10_patient_unrestricted_access
153
+
154
+ def resource_group
155
+ USCoreTestKit::PatientGroup
156
+ end
157
+ end
158
+
159
+ test from: :g10_resource_access_test do
160
+ title 'Access to AllergyIntolerance resources granted'
161
+ description %(
162
+ This test ensures that access to the AllergyIntolerance is granted or
163
+ denied based on the selection by the tester prior to the execution of
164
+ the test. If the tester indicated that access will be granted to this
165
+ resource, this test verifies that a search by patient in this resource
166
+ does not result in an access denied result. If the tester indicated that
167
+ access will be denied for this resource, this verifies that search by
168
+ patient in the resource results in an access denied result.
169
+ )
170
+ id :g10_allergy_intolerance_unrestricted_access
171
+
172
+ def resource_group
173
+ USCoreTestKit::AllergyIntoleranceGroup
174
+ end
175
+ end
176
+
177
+ test from: :g10_resource_access_test do
178
+ title 'Access to CarePlan resources granted'
179
+ description %(
180
+ This test ensures that access to the CarePlan is granted or
181
+ denied based on the selection by the tester prior to the execution of
182
+ the test. If the tester indicated that access will be granted to this
183
+ resource, this test verifies that a search by patient in this resource
184
+ does not result in an access denied result. If the tester indicated that
185
+ access will be denied for this resource, this verifies that search by
186
+ patient in the resource results in an access denied result.
187
+ )
188
+ id :g10_care_plan_unrestricted_access
189
+
190
+ def resource_group
191
+ USCoreTestKit::CarePlanGroup
192
+ end
193
+ end
194
+
195
+ test from: :g10_resource_access_test do
196
+ title 'Access to CareTeam resources granted'
197
+ description %(
198
+ This test ensures that access to the CareTeam is granted or
199
+ denied based on the selection by the tester prior to the execution of
200
+ the test. If the tester indicated that access will be granted to this
201
+ resource, this test verifies that a search by patient in this resource
202
+ does not result in an access denied result. If the tester indicated that
203
+ access will be denied for this resource, this verifies that search by
204
+ patient in the resource results in an access denied result.
205
+ )
206
+ id :g10_care_team_unrestricted_access
207
+
208
+ def resource_group
209
+ USCoreTestKit::CareTeamGroup
210
+ end
211
+ end
212
+
213
+ test from: :g10_resource_access_test do
214
+ title 'Access to Condition resources granted'
215
+ description %(
216
+ This test ensures that access to the Condition is granted or
217
+ denied based on the selection by the tester prior to the execution of
218
+ the test. If the tester indicated that access will be granted to this
219
+ resource, this test verifies that a search by patient in this resource
220
+ does not result in an access denied result. If the tester indicated that
221
+ access will be denied for this resource, this verifies that search by
222
+ patient in the resource results in an access denied result.
223
+ )
224
+ id :g10_condition_unrestricted_access
225
+
226
+ def resource_group
227
+ USCoreTestKit::ConditionGroup
228
+ end
229
+ end
230
+
231
+ test from: :g10_resource_access_test do
232
+ title 'Access to Device resources granted'
233
+ description %(
234
+ This test ensures that access to the Device is granted or
235
+ denied based on the selection by the tester prior to the execution of
236
+ the test. If the tester indicated that access will be granted to this
237
+ resource, this test verifies that a search by patient in this resource
238
+ does not result in an access denied result. If the tester indicated that
239
+ access will be denied for this resource, this verifies that search by
240
+ patient in the resource results in an access denied result.
241
+ )
242
+ id :g10_device_unrestricted_access
243
+
244
+ def resource_group
245
+ USCoreTestKit::DeviceGroup
246
+ end
247
+ end
248
+
249
+ test from: :g10_resource_access_test do
250
+ title 'Access to DiagnosticReport resources granted'
251
+ description %(
252
+ This test ensures that access to the DiagnosticReport is granted or
253
+ denied based on the selection by the tester prior to the execution of
254
+ the test. If the tester indicated that access will be granted to this
255
+ resource, this test verifies that a search by patient in this resource
256
+ does not result in an access denied result. If the tester indicated that
257
+ access will be denied for this resource, this verifies that search by
258
+ patient in the resource results in an access denied result.
259
+ )
260
+ id :g10_diagnostic_report_unrestricted_access
261
+
262
+ def resource_group
263
+ USCoreTestKit::DiagnosticReportLabGroup
264
+ end
265
+ end
266
+
267
+ test from: :g10_resource_access_test do
268
+ title 'Access to DocumentReference resources granted'
269
+ description %(
270
+ This test ensures that access to the DocumentReference is granted or
271
+ denied based on the selection by the tester prior to the execution of
272
+ the test. If the tester indicated that access will be granted to this
273
+ resource, this test verifies that a search by patient in this resource
274
+ does not result in an access denied result. If the tester indicated that
275
+ access will be denied for this resource, this verifies that search by
276
+ patient in the resource results in an access denied result.
277
+ )
278
+ id :g10_document_reference_unrestricted_access
279
+
280
+ def resource_group
281
+ USCoreTestKit::DocumentReferenceGroup
282
+ end
283
+ end
284
+
285
+ test from: :g10_resource_access_test do
286
+ title 'Access to Goal resources granted'
287
+ description %(
288
+ This test ensures that access to the Goal is granted or
289
+ denied based on the selection by the tester prior to the execution of
290
+ the test. If the tester indicated that access will be granted to this
291
+ resource, this test verifies that a search by patient in this resource
292
+ does not result in an access denied result. If the tester indicated that
293
+ access will be denied for this resource, this verifies that search by
294
+ patient in the resource results in an access denied result.
295
+ )
296
+ id :g10_goal_unrestricted_access
297
+
298
+ def resource_group
299
+ USCoreTestKit::GoalGroup
300
+ end
301
+ end
302
+
303
+ test from: :g10_resource_access_test do
304
+ title 'Access to Immunization resources granted'
305
+ description %(
306
+ This test ensures that access to the Immunization is granted or
307
+ denied based on the selection by the tester prior to the execution of
308
+ the test. If the tester indicated that access will be granted to this
309
+ resource, this test verifies that a search by patient in this resource
310
+ does not result in an access denied result. If the tester indicated that
311
+ access will be denied for this resource, this verifies that search by
312
+ patient in the resource results in an access denied result.
313
+ )
314
+ id :g10_immunization_unrestricted_access
315
+
316
+ def resource_group
317
+ USCoreTestKit::ImmunizationGroup
318
+ end
319
+ end
320
+
321
+ test from: :g10_resource_access_test do
322
+ title 'Access to MedicationRequest resources granted'
323
+ description %(
324
+ This test ensures that access to the MedicationRequest is granted or
325
+ denied based on the selection by the tester prior to the execution of
326
+ the test. If the tester indicated that access will be granted to this
327
+ resource, this test verifies that a search by patient in this resource
328
+ does not result in an access denied result. If the tester indicated that
329
+ access will be denied for this resource, this verifies that search by
330
+ patient in the resource results in an access denied result.
331
+ )
332
+ id :g10_medication_request_access
333
+
334
+ def resource_group
335
+ USCoreTestKit::MedicationRequestGroup
336
+ end
337
+ end
338
+
339
+ test from: :g10_resource_access_test do
340
+ title 'Access to Observation resources granted'
341
+ description %(
342
+ This test ensures that access to the Observation is granted or
343
+ denied based on the selection by the tester prior to the execution of
344
+ the test. If the tester indicated that access will be granted to this
345
+ resource, this test verifies that a search by patient in this resource
346
+ does not result in an access denied result. If the tester indicated that
347
+ access will be denied for this resource, this verifies that search by
348
+ patient in the resource results in an access denied result.
349
+ )
350
+ id :g10_observation_unrestricted_access
351
+
352
+ def resource_group
353
+ USCoreTestKit::PulseOximetryGroup
354
+ end
355
+ end
356
+
357
+ test from: :g10_resource_access_test do
358
+ title 'Access to Procedure resources granted'
359
+ description %(
360
+ This test ensures that access to the Procedure is granted or
361
+ denied based on the selection by the tester prior to the execution of
362
+ the test. If the tester indicated that access will be granted to this
363
+ resource, this test verifies that a search by patient in this resource
364
+ does not result in an access denied result. If the tester indicated that
365
+ access will be denied for this resource, this verifies that search by
366
+ patient in the resource results in an access denied result.
367
+ )
368
+ id :g10_procedure_unrestricted_access
369
+
370
+ def resource_group
371
+ USCoreTestKit::ProcedureGroup
372
+ end
373
+ end
374
+ end
375
+ end
@@ -0,0 +1,3 @@
1
+ module ONCCertificationG10TestKit
2
+ VERSION = '2.0.0.rc1'.freeze
3
+ end