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,66 @@
1
+ module ONCCertificationG10TestKit
2
+ class LimitedScopeGrantTest < Inferno::Test
3
+ title 'OAuth token exchange response grants scope that is limited to those selected by user'
4
+ description %(
5
+ The ONC certification criteria requires that patients are capable of
6
+ choosing which FHIR resources to authorize to the application. For this
7
+ test, the tester specifies which resources will be selected during
8
+ authorization, and this verifies that only those resources are granted
9
+ according to the scopes returned during the access token response.
10
+ )
11
+ id :g10_limited_scope_grant
12
+
13
+ input :received_scopes, :expected_resources
14
+
15
+ def possible_resources
16
+ [
17
+ 'AllergyIntolerance',
18
+ 'CarePlan',
19
+ 'CareTeam',
20
+ 'Condition',
21
+ 'Device',
22
+ 'DiagnosticReport',
23
+ 'DocumentReference',
24
+ 'Goal',
25
+ 'Immunization',
26
+ 'MedicationRequest',
27
+ 'Observation',
28
+ 'Procedure',
29
+ 'Patient'
30
+ ]
31
+ end
32
+
33
+ def scope_granting_access?(resource_type, scopes)
34
+ scopes.any? do |scope|
35
+ scope.start_with?("patient/#{resource_type}", 'patient/*') && scope.end_with?('*', 'read')
36
+ end
37
+ end
38
+
39
+ run do
40
+ expected_resources_list = expected_resources.split(',').map(&:strip).map(&:downcase)
41
+ allowed_resources =
42
+ possible_resources.select { |resource_type| expected_resources_list.include? resource_type.downcase }
43
+ forbidden_resources = possible_resources - allowed_resources
44
+
45
+ received_scope_list = received_scopes.split
46
+
47
+ improperly_granted_resources =
48
+ forbidden_resources.select { |resource_type| scope_granting_access?(resource_type, received_scope_list) }
49
+ improperly_denied_resources =
50
+ allowed_resources.reject { |resource_type| scope_granting_access?(resource_type, received_scope_list) }
51
+
52
+ assert improperly_granted_resources.empty?,
53
+ 'User expected to deny the following resources that were granted: ' \
54
+ "#{improperly_granted_resources.join(', ')}"
55
+ assert improperly_denied_resources.empty?,
56
+ 'User expected to grant access to the following resources: ' \
57
+ "#{improperly_denied_resources.join(', ')}"
58
+
59
+ assert forbidden_resources.present?,
60
+ 'This test requires at least one resource to be denied, but the received scopes ' \
61
+ "`#{received_scopes}` grant access to all resource types."
62
+
63
+ pass "Resources to be denied: #{forbidden_resources.join(', ')}"
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,43 @@
1
+ require_relative 'bulk_data_authorization'
2
+ require_relative 'bulk_data_group_export'
3
+ require_relative 'bulk_data_group_export_validation'
4
+
5
+ module ONCCertificationG10TestKit
6
+ class MultiPatientAPIGroup < Inferno::TestGroup
7
+ title 'Multi-Patient Authorization and API'
8
+ short_title 'Multi-Patient API'
9
+
10
+ input_instructions %(
11
+ Register Inferno as a bulk data client with the following information, and
12
+ enter the client id and client registration in the appropriate fields.
13
+ This set of tests only checks the Group export. Enter the group export
14
+ information in the appropriate box.
15
+
16
+ Register Inferno with the following JWK Set Url:
17
+
18
+ * `#{Inferno::Application[:base_url]}/custom/g10_certification/.well-known/jwks.json`
19
+ )
20
+
21
+ description %(
22
+ Demonstrate the ability to export clinical data for multiple patients in
23
+ a group using [FHIR Bulk Data Access
24
+ IG](https://hl7.org/fhir/uv/bulkdata/). This test uses [Backend Services
25
+ Authorization](https://hl7.org/fhir/uv/bulkdata/authorization/index.html)
26
+ to obtain an access token from the server. After authorization, a group
27
+ level bulk data export request is initialized. Finally, this test reads
28
+ exported NDJSON files from the server and validates the resources in
29
+ each file. To run the test successfully, the selected group export is
30
+ required to have every type of resource mapped to [USCDI data
31
+ elements](https://www.healthit.gov/isa/us-core-data-interoperability-uscdi).
32
+ Additionally, it is expected the server will provide Encounter,
33
+ Location, Organization, and Practitioner resources as they are
34
+ referenced as must support elements in required resources.
35
+ )
36
+ id :multi_patient_api
37
+ run_as_group
38
+
39
+ group from: :bulk_data_authorization
40
+ group from: :bulk_data_group_export
41
+ group from: :bulk_data_group_export_validation
42
+ end
43
+ end
@@ -0,0 +1,30 @@
1
+ module ONCCertificationG10TestKit
2
+ class PatientContextTest < Inferno::Test
3
+ title 'OAuth token exchange response body contains patient context and patient resource can be retrieved'
4
+ description %(
5
+ The `patient` field is a String value with a patient id, indicating that
6
+ the app was launched in the context of this FHIR Patient.
7
+ )
8
+ id :g10_patient_context
9
+ input :patient_id, :url
10
+ input :smart_credentials, type: :oauth_credentials
11
+
12
+ fhir_client :authenticated do
13
+ url :url
14
+ oauth_credentials :smart_credentials
15
+ end
16
+
17
+ run do
18
+ skip_if smart_credentials.access_token.blank?, 'No access token was received during the SMART launch'
19
+
20
+ skip_if patient_id.blank?, 'Token response did not contain `patient` field'
21
+
22
+ skip_if request.status != 200, 'Token was not successfully refreshed' if config.options[:refresh_test]
23
+
24
+ fhir_read(:patient, patient_id, client: :authenticated)
25
+
26
+ assert_response_status(200)
27
+ assert_resource_type(:patient)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,69 @@
1
+ module ONCCertificationG10TestKit
2
+ module ProfileGuesser
3
+ def extract_profile(profile)
4
+ if ['Location', 'Medication'].include?(profile)
5
+ return USCoreTestKit::USCoreTestSuite.metadata.find do |meta|
6
+ meta.resource == profile
7
+ end.profile_url
8
+ end
9
+ "USCoreTestKit::#{profile}Group".constantize.metadata.profile_url
10
+ end
11
+
12
+ def observation_contains_code(observation_resource, code)
13
+ observation_resource&.code&.coding&.any? { |coding| coding&.code == code }
14
+ end
15
+
16
+ def resource_contains_category(resource, category_code, category_system = nil) # rubocop:disable Metrics/CyclomaticComplexity
17
+ resource&.category&.any? do |category|
18
+ category.coding&.any? do |coding|
19
+ coding.code == category_code &&
20
+ (category_system.blank? || coding.system.blank? || category_system == coding.system)
21
+ end
22
+ end
23
+ end
24
+
25
+ def guess_profile(resource) # rubocop:disable Metrics/CyclomaticComplexity
26
+ case resource.resourceType
27
+ when 'DiagnosticReport'
28
+ return extract_profile('DiagnosticReportLab') if resource_contains_category(resource, 'LAB', 'http://terminology.hl7.org/CodeSystem/v2-0074')
29
+
30
+ extract_profile('DiagnosticReportNote')
31
+ when 'Observation'
32
+ return extract_profile('Smokingstatus') if observation_contains_code(resource, '72166-2')
33
+
34
+ return extract_profile('ObservationLab') if resource_contains_category(resource, 'laboratory', 'http://terminology.hl7.org/CodeSystem/observation-category')
35
+
36
+ return extract_profile('PediatricBmiForAge') if observation_contains_code(resource, '59576-9')
37
+
38
+ return extract_profile('PediatricWeightForHeight') if observation_contains_code(resource, '77606-2')
39
+
40
+ return extract_profile('PulseOximetry') if observation_contains_code(resource, '59408-5')
41
+
42
+ return extract_profile('HeadCircumference') if observation_contains_code(resource, '8289-1')
43
+
44
+ # FHIR Vital Signs profiles: https://www.hl7.org/fhir/observation-vitalsigns.html
45
+ # Vital Signs Panel, Oxygen Saturation are not required by USCDI
46
+ # Body Mass Index is replaced by :pediatric_bmi_age Profile
47
+ # Systolic Blood Pressure, Diastolic Blood Pressure are covered by :blood_pressure Profile
48
+ # Head Circumference is replaced by US Core Head Occipital-frontal Circumference Percentile Profile
49
+ return extract_profile('Bp') if observation_contains_code(resource, '85354-9')
50
+
51
+ return extract_profile('Bodyheight') if observation_contains_code(resource, '8302-2')
52
+
53
+ return extract_profile('Bodytemp') if observation_contains_code(resource, '8310-5')
54
+
55
+ return extract_profile('Bodyweight') if observation_contains_code(resource, '29463-7')
56
+
57
+ return extract_profile('Heartrate') if observation_contains_code(resource, '8867-4')
58
+
59
+ return extract_profile('Resprate') if observation_contains_code(resource, '9279-1')
60
+
61
+ nil
62
+ else
63
+ extract_profile(resource.resourceType)
64
+ end
65
+ rescue StandardError
66
+ skip "Could not determine profile of \"#{resource.resourceType}\" resource."
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,96 @@
1
+ module ONCCertificationG10TestKit
2
+ class ResourceAccessTest < Inferno::Test
3
+ id :g10_resource_access_test
4
+ input :patient_id, :received_scopes
5
+
6
+ title 'Access to resources are restricted properly based on patient-selected scope'
7
+ description %(
8
+ This test ensures that access to the resource is granted or denied
9
+ based on the selection by the tester prior to the execution of the test.
10
+ If the tester indicated that access will be granted to this resource,
11
+ this test verifies that a search by patient in this resource does not
12
+ result in an access denied result. If the tester indicated that access
13
+ will be denied for this resource, this verifies that search by patient
14
+ in the resource results in an access denied result.
15
+ )
16
+
17
+ def resource_group
18
+ raise StandardError, '#resource_group must be overridden'
19
+ end
20
+
21
+ def search_params
22
+ @search_params ||=
23
+ resource_group.metadata.searches.first[:names].each_with_object({}) do |name, params|
24
+ params[name] = search_param_value(name)
25
+ end
26
+ end
27
+
28
+ def search_param_value(name)
29
+ return patient_id if ['patient', '_id', 'subject'].include?(name)
30
+
31
+ resource_group.metadata.search_definitions[name.to_sym][:values].first
32
+ end
33
+
34
+ def status_search_params
35
+ {
36
+ "#{status_search_param_name}": search_param_value(status_search_param_name)
37
+ }
38
+ end
39
+
40
+ def status_search_param_name
41
+ @status_search_param_name ||=
42
+ resource_group.metadata.search_definitions.keys.find { |key| key.to_s.include? 'status' }
43
+ end
44
+
45
+ def status_search_param_value
46
+ @status_search_param_value ||=
47
+ resource_group.metadata.search_definitions[status_search_param_name][:values].first
48
+ end
49
+
50
+ def resource_search_test
51
+ resource_group.tests.first
52
+ end
53
+
54
+ def request_should_succeed?
55
+ true
56
+ end
57
+
58
+ def resource_type
59
+ resource_search_test.properties.resource_type
60
+ end
61
+
62
+ run do
63
+ skip_if patient_id.blank?, 'Patient ID not provided to test.'
64
+ skip_if received_scopes.blank?, 'No scopes were received.'
65
+
66
+ fhir_search(resource_type, params: search_params)
67
+
68
+ if request_should_succeed?
69
+ if request.status == 400 && resource_search_test.properties.possible_status_search?
70
+ error_message = %(
71
+ Server is expected to grant access to the resource. A search
72
+ without a status can return an HTTP 400 status, but must also must
73
+ include an OperationOutcome. No OperationOutcome is present in the
74
+ body of the response.
75
+ )
76
+ begin
77
+ parsed_body = JSON.parse(response[:body])
78
+ assert parsed_body['resourceType'] == 'OperationOutcome', error_message
79
+ rescue JSON::ParserError
80
+ assert false, error_message
81
+ end
82
+ fhir_search(
83
+ :allergy_intolerance,
84
+ params: search_params.merge(status_search_params)
85
+ )
86
+ end
87
+
88
+ assert_response_status(200)
89
+ pass "Access expected to be granted and request properly returned #{request.status}"
90
+ else
91
+ message = "Bad response code: expected 403 (Forbidden) or 401 (Unauthorized), but found #{request.status}."
92
+ assert [401, 403].include?(request.status), message
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,12 @@
1
+ require_relative 'resource_access_test'
2
+
3
+ module ONCCertificationG10TestKit
4
+ class RestrictedAccessTest < ResourceAccessTest
5
+ id :g10_restricted_access_test
6
+ input :expected_resources
7
+
8
+ def request_should_succeed?
9
+ expected_resources.split(',').any? { |resource| resource.strip.casecmp? resource_type }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,303 @@
1
+ require_relative 'restricted_access_test'
2
+
3
+ module ONCCertificationG10TestKit
4
+ class RestrictedResourceTypeAccessGroup < Inferno::TestGroup
5
+ title 'Restricted Resource Type Access'
6
+ description %(
7
+ This test ensures that patients are able to grant or deny access to a
8
+ subset of resources to an app as requied by the certification criteria.
9
+ The tester provides a list of resources that will be granted during the
10
+ SMART App Launch process, and this test verifies that the scopes granted
11
+ are consistent with what the tester provided. It also formulates queries
12
+ to ensure that the app is either given access to, or denied access to, the
13
+ appropriate resource types based on those chosen by the tester.
14
+
15
+ Resources that can be mapped to USCDI are checked in this test, including:
16
+
17
+ * AllergyIntolerance
18
+ * CarePlan
19
+ * CareTeam
20
+ * Condition
21
+ * Device
22
+ * DiagnosticReport
23
+ * DocumentReference
24
+ * Goal
25
+ * Immunization
26
+ * MedicationRequest
27
+ * Observation
28
+ * Procedure
29
+
30
+ For each of the resources that can be mapped to USCDI data class or
31
+ elements, this set of tests performs a minimum number of requests to
32
+ determine if access to the resource type is appropriately allowed or
33
+ denied given the scope granted. In the case of the Patient resource, this
34
+ test simply performs a read request. For other resources, it performs a
35
+ search by patient that must be supported by the server. In some cases,
36
+ servers can return an error message if a status search parameter is not
37
+ provided. For these, the test will perform an additional search with the
38
+ required status search 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 resource types are
44
+ accessed in the more comprehensive Single Patient Query tests.
45
+
46
+ If the tester chooses to not grant access to a resource, the queries
47
+ associated with that resource must result in either a 401 (Unauthorized)
48
+ or 403 (Forbidden) status code. The flexiblity provided here is due to
49
+ some ambiguity in the specifications tested.
50
+ )
51
+ id :g10_restricted_resource_type_access
52
+
53
+ input :url, :patient_id, :received_scopes, :expected_resources
54
+ input :smart_credentials, type: :oauth_credentials
55
+
56
+ config(
57
+ inputs: {
58
+ client_secret: {
59
+ optional: false
60
+ }
61
+ }
62
+ )
63
+
64
+ fhir_client do
65
+ url :url
66
+ oauth_credentials :smart_credentials
67
+ end
68
+
69
+ test from: :g10_restricted_access_test do
70
+ title 'Access to Patient resources are restricted properly based on patient-selected scope'
71
+ description %(
72
+ This test ensures that access to the Patient is granted or
73
+ denied based on the selection by the tester prior to the execution of
74
+ the test. If the tester indicated that access will be granted to this
75
+ resource, this test verifies that a search by patient in this resource
76
+ does not result in an access denied result. If the tester indicated that
77
+ access will be denied for this resource, this verifies that search by
78
+ patient in the resource results in an access denied result.
79
+ )
80
+ id :g10_patient_restricted_access
81
+
82
+ def resource_group
83
+ USCoreTestKit::PatientGroup
84
+ end
85
+ end
86
+
87
+ test from: :g10_restricted_access_test do
88
+ title 'Access to AllergyIntolerance resources are restricted properly based on patient-selected scope'
89
+ description %(
90
+ This test ensures that access to the AllergyIntolerance is granted or
91
+ denied based on the selection by the tester prior to the execution of
92
+ the test. If the tester indicated that access will be granted to this
93
+ resource, this test verifies that a search by patient in this resource
94
+ does not result in an access denied result. If the tester indicated that
95
+ access will be denied for this resource, this verifies that search by
96
+ patient in the resource results in an access denied result.
97
+ )
98
+ id :g10_allergy_intolerance_restricted_access
99
+
100
+ def resource_group
101
+ USCoreTestKit::AllergyIntoleranceGroup
102
+ end
103
+ end
104
+
105
+ test from: :g10_restricted_access_test do
106
+ title 'Access to CarePlan resources are restricted properly based on patient-selected scope'
107
+ description %(
108
+ This test ensures that access to the CarePlan is granted or
109
+ denied based on the selection by the tester prior to the execution of
110
+ the test. If the tester indicated that access will be granted to this
111
+ resource, this test verifies that a search by patient in this resource
112
+ does not result in an access denied result. If the tester indicated that
113
+ access will be denied for this resource, this verifies that search by
114
+ patient in the resource results in an access denied result.
115
+ )
116
+ id :g10_care_plan_restricted_access
117
+
118
+ def resource_group
119
+ USCoreTestKit::CarePlanGroup
120
+ end
121
+ end
122
+
123
+ test from: :g10_restricted_access_test do
124
+ title 'Access to CareTeam resources are restricted properly based on patient-selected scope'
125
+ description %(
126
+ This test ensures that access to the CareTeam is granted or
127
+ denied based on the selection by the tester prior to the execution of
128
+ the test. If the tester indicated that access will be granted to this
129
+ resource, this test verifies that a search by patient in this resource
130
+ does not result in an access denied result. If the tester indicated that
131
+ access will be denied for this resource, this verifies that search by
132
+ patient in the resource results in an access denied result.
133
+ )
134
+ id :g10_care_team_restricted_access
135
+
136
+ def resource_group
137
+ USCoreTestKit::CareTeamGroup
138
+ end
139
+ end
140
+
141
+ test from: :g10_restricted_access_test do
142
+ title 'Access to Condition resources are restricted properly based on patient-selected scope'
143
+ description %(
144
+ This test ensures that access to the Condition 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_condition_restricted_access
153
+
154
+ def resource_group
155
+ USCoreTestKit::ConditionGroup
156
+ end
157
+ end
158
+
159
+ test from: :g10_restricted_access_test do
160
+ title 'Access to Device resources are restricted properly based on patient-selected scope'
161
+ description %(
162
+ This test ensures that access to the Device 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_device_restricted_access
171
+
172
+ def resource_group
173
+ USCoreTestKit::DeviceGroup
174
+ end
175
+ end
176
+
177
+ test from: :g10_restricted_access_test do
178
+ title 'Access to DiagnosticReport resources are restricted properly based on patient-selected scope'
179
+ description %(
180
+ This test ensures that access to the DiagnosticReport 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_diagnostic_report_restricted_access
189
+
190
+ def resource_group
191
+ USCoreTestKit::DiagnosticReportLabGroup
192
+ end
193
+ end
194
+
195
+ test from: :g10_restricted_access_test do
196
+ title 'Access to DocumentReference resources are restricted properly based on patient-selected scope'
197
+ description %(
198
+ This test ensures that access to the DocumentReference 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_document_reference_restricted_access
207
+
208
+ def resource_group
209
+ USCoreTestKit::DocumentReferenceGroup
210
+ end
211
+ end
212
+
213
+ test from: :g10_restricted_access_test do
214
+ title 'Access to Goal resources are restricted properly based on patient-selected scope'
215
+ description %(
216
+ This test ensures that access to the Goal 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_goal_restricted_access
225
+
226
+ def resource_group
227
+ USCoreTestKit::GoalGroup
228
+ end
229
+ end
230
+
231
+ test from: :g10_restricted_access_test do
232
+ title 'Access to Immunization resources are restricted properly based on patient-selected scope'
233
+ description %(
234
+ This test ensures that access to the Immunization 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_immunization_restricted_access
243
+
244
+ def resource_group
245
+ USCoreTestKit::ImmunizationGroup
246
+ end
247
+ end
248
+
249
+ test from: :g10_restricted_access_test do
250
+ title 'Access to MedicationRequest resources are restricted properly based on patient-selected scope'
251
+ description %(
252
+ This test ensures that access to the MedicationRequest 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_medication_request_access
261
+
262
+ def resource_group
263
+ USCoreTestKit::MedicationRequestGroup
264
+ end
265
+ end
266
+
267
+ test from: :g10_restricted_access_test do
268
+ title 'Access to Observation resources are restricted properly based on patient-selected scope'
269
+ description %(
270
+ This test ensures that access to the Observation 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_observation_restricted_access
279
+
280
+ def resource_group
281
+ USCoreTestKit::PulseOximetryGroup
282
+ end
283
+ end
284
+
285
+ test from: :g10_restricted_access_test do
286
+ title 'Access to Procedure resources are restricted properly based on patient-selected scope'
287
+ description %(
288
+ This test ensures that access to the Procedure 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_procedure_restricted_access
297
+
298
+ def resource_group
299
+ USCoreTestKit::ProcedureGroup
300
+ end
301
+ end
302
+ end
303
+ end