onc_certification_g10_test_kit 2.0.0.rc1

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 (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