onc_certification_g10_test_kit 2.0.0 → 2.1.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 (27) hide show
  1. checksums.yaml +4 -4
  2. data/lib/inferno/terminology/tasks/check_built_terminology.rb +14 -12
  3. data/lib/onc_certification_g10_test_kit/bulk_data_authorization.rb +7 -4
  4. data/lib/onc_certification_g10_test_kit/bulk_data_group_export.rb +60 -17
  5. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_validation.rb +10 -6
  6. data/lib/onc_certification_g10_test_kit/bulk_export_validation_tester.rb +37 -16
  7. data/lib/onc_certification_g10_test_kit/configuration_checker.rb +6 -5
  8. data/lib/onc_certification_g10_test_kit/multi_patient_api.rb +11 -0
  9. data/lib/onc_certification_g10_test_kit/onc_program_procedure.yml +1451 -0
  10. data/lib/onc_certification_g10_test_kit/profile_guesser.rb +2 -2
  11. data/lib/onc_certification_g10_test_kit/restricted_resource_type_access_group.rb +13 -13
  12. data/lib/onc_certification_g10_test_kit/single_patient_api_group.rb +89 -0
  13. data/lib/onc_certification_g10_test_kit/smart_app_launch_invalid_aud_group.rb +13 -12
  14. data/lib/onc_certification_g10_test_kit/smart_ehr_practitioner_app_group.rb +11 -5
  15. data/lib/onc_certification_g10_test_kit/smart_invalid_launch_group.rb +13 -16
  16. data/lib/onc_certification_g10_test_kit/smart_invalid_token_group.rb +11 -4
  17. data/lib/onc_certification_g10_test_kit/smart_limited_app_group.rb +18 -4
  18. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group.rb +15 -3
  19. data/lib/onc_certification_g10_test_kit/smart_standalone_patient_app_group.rb +8 -3
  20. data/lib/onc_certification_g10_test_kit/tasks/generate_matrix.rb +243 -0
  21. data/lib/onc_certification_g10_test_kit/tasks/test_procedure.rb +65 -0
  22. data/lib/onc_certification_g10_test_kit/token_revocation_group.rb +60 -60
  23. data/lib/onc_certification_g10_test_kit/unrestricted_resource_type_access_group.rb +13 -13
  24. data/lib/onc_certification_g10_test_kit/version.rb +1 -1
  25. data/lib/onc_certification_g10_test_kit/visual_inspection_and_attestations_group.rb +7 -6
  26. data/lib/onc_certification_g10_test_kit.rb +15 -82
  27. metadata +16 -12
@@ -0,0 +1,243 @@
1
+ require 'rubyXL'
2
+ require 'rubyXL/convenience_methods'
3
+ require 'inferno'
4
+ require_relative '../../onc_certification_g10_test_kit'
5
+ require_relative 'test_procedure'
6
+
7
+ module ONCCertificationG10TestKit
8
+ module Tasks
9
+ class GenerateMatrix
10
+ include ONCCertificationG10TestKit
11
+
12
+ FILE_NAME = 'onc_certification_g10_matrix.xlsx'.freeze
13
+
14
+ def inferno_to_procedure_map
15
+ @inferno_to_procedure_map ||= Hash.new { |h, k| h[k] = [] }
16
+ end
17
+
18
+ def test_procedure
19
+ @test_procedure ||=
20
+ if File.file? File.join('lib', 'onc_certification_g10_test_kit', 'onc_program_procedure.yml')
21
+ TestProcedure.new(
22
+ YAML.load_file(File.join('lib', 'onc_certification_g10_test_kit',
23
+ 'onc_program_procedure.yml')).deep_symbolize_keys
24
+ )
25
+ else
26
+ TestProcedure.new
27
+ end
28
+ end
29
+
30
+ def test_suite
31
+ ONCCertificationG10TestKit::G10CertificationSuite
32
+ end
33
+
34
+ def workbook
35
+ @workbook ||= RubyXL::Workbook.new
36
+ end
37
+
38
+ def run
39
+ generate_matrix_worksheet
40
+ generate_test_procedure_worksheet
41
+ generate_inferno_test_worksheet
42
+
43
+ Inferno.logger.info "Writing to #{FILE_NAME}"
44
+ workbook.write(FILE_NAME)
45
+ end
46
+
47
+ def generate_matrix_worksheet # rubocop:disable Metrics/CyclomaticComplexity
48
+ matrix_worksheet = workbook.worksheets[0]
49
+ matrix_worksheet.sheet_name = 'Matrix'
50
+
51
+ col = 2
52
+ matrix_worksheet.add_cell(0, 1, "ONC Certification (g)(10) Test Kit (v#{ONCCertificationG10TestKit::VERSION})")
53
+ matrix_worksheet.change_row_height(0, 20)
54
+ matrix_worksheet.change_row_vertical_alignment(0, 'distributed')
55
+ column_map = {}
56
+ matrix_worksheet.change_column_width(1, 25)
57
+ matrix_worksheet.change_row_height(1, 20)
58
+ matrix_worksheet.change_row_horizontal_alignment(1, 'center')
59
+ matrix_worksheet.change_row_vertical_alignment(1, 'distributed')
60
+ matrix_worksheet.change_row_height(2, 70)
61
+ column_borders = []
62
+
63
+ test_suite.groups.each do |group|
64
+ matrix_worksheet.add_cell(1, col, group.title).change_text_wrap(true)
65
+ matrix_worksheet.merge_cells(1, col, 1, col + group.groups.length - 1)
66
+ matrix_worksheet.change_column_border(col, :left, 'medium')
67
+ matrix_worksheet.change_column_border_color(col, :left, '000000')
68
+ column_borders << col
69
+
70
+ group.groups.each do |test_case|
71
+ matrix_worksheet.change_column_width(col, 4.2)
72
+
73
+ cell = matrix_worksheet.add_cell(2, col,
74
+ "#{test_case.short_id} #{test_case.short_title || test_case.title}")
75
+ cell.change_text_rotation(90)
76
+ cell.change_border_color(:bottom, '000000')
77
+ cell.change_border(:bottom, 'medium')
78
+ matrix_worksheet.change_column_border(col, :right, 'thin')
79
+ matrix_worksheet.change_column_border_color(col, :right, '666666')
80
+
81
+ test_case.tests.each do |test|
82
+ # tests << { test_case: test_case, test: test }
83
+ # full_test_id = "#{test_case.prefix}#{test.id}"
84
+ column_map[test.short_id] = col
85
+ end
86
+ col += 1
87
+ end
88
+ end
89
+
90
+ total_width = col - 1
91
+ matrix_worksheet.merge_cells(0, 1, 0, total_width)
92
+ matrix_worksheet.change_row_horizontal_alignment(0, 'center')
93
+
94
+ matrix_worksheet.add_cell(2, total_width + 2, 'Supported?')
95
+ row = 3
96
+
97
+ test_procedure.sections.each do |section|
98
+ section.steps.each do |step|
99
+ step_id = step.id.upcase
100
+ matrix_worksheet.add_cell(row, 1, "#{step_id} ")
101
+ matrix_worksheet.change_row_height(row, 13)
102
+ matrix_worksheet.change_row_vertical_alignment(row, 'distributed')
103
+
104
+ (2..total_width).each do |column|
105
+ matrix_worksheet.add_cell(row, column, '')
106
+ end
107
+
108
+ step.inferno_tests.each do |test_id|
109
+ column = column_map[test_id]
110
+ inferno_to_procedure_map[test_id].push(step_id)
111
+ if column.nil?
112
+ puts "No such test found: #{test_id}"
113
+ next
114
+ end
115
+
116
+ matrix_worksheet.add_cell(row, column, '').change_fill('3C63FF')
117
+ end
118
+
119
+ matrix_worksheet.add_cell(row, total_width + 2, step.inferno_supported.upcase)
120
+
121
+ row += 1
122
+ end
123
+ end
124
+ matrix_worksheet.change_column_horizontal_alignment(1, 'right')
125
+ matrix_worksheet.change_row_horizontal_alignment(0, 'center')
126
+
127
+ column_borders.each do |column|
128
+ matrix_worksheet.change_column_border(column, :left, 'medium')
129
+ matrix_worksheet.change_column_border_color(column, :left, '000000')
130
+ end
131
+ matrix_worksheet.change_column_border_color(total_width, :right, '000000')
132
+ matrix_worksheet.change_column_border(total_width, :right, 'medium')
133
+ matrix_worksheet.change_column_width(total_width + 1, 3)
134
+
135
+ matrix_worksheet.change_column_width(total_width + 3, 6)
136
+ matrix_worksheet.change_column_width(total_width + 4, 2)
137
+ matrix_worksheet.change_column_width(total_width + 5, 60)
138
+ matrix_worksheet.add_cell(1, total_width + 3, '').change_fill('3C63FF')
139
+ this_text = 'Blue boxes indicate that the Inferno test (top) covers this test procedure step (left).'
140
+ matrix_worksheet.add_cell(1, total_width + 5, this_text).change_text_wrap(true)
141
+ matrix_worksheet.change_column_horizontal_alignment(total_width + 5, :left)
142
+ end
143
+
144
+ def generate_test_procedure_worksheet # rubocop:disable Metrics/CyclomaticComplexity
145
+ workbook.add_worksheet('Test Procedure')
146
+ tp_worksheet = workbook.worksheets[1]
147
+
148
+ [3, 3, 22, 65, 65, 3, 15, 30, 65, 65].each_with_index do |width, index|
149
+ tp_worksheet.change_column_width(index, width)
150
+ end
151
+ ['',
152
+ '',
153
+ 'ID',
154
+ 'System Under Test',
155
+ 'Test Lab Verifies',
156
+ '',
157
+ 'Inferno Supports?',
158
+ 'Inferno Tests',
159
+ 'Inferno Notes',
160
+ 'Alternate Test Methodology'].each_with_index { |text, index| tp_worksheet.add_cell(0, index, text) }
161
+
162
+ row = 2
163
+
164
+ test_procedure.sections.each do |section|
165
+ tp_worksheet.add_cell(row, 0, section.name)
166
+ row += 1
167
+ section.steps.group_by(&:group).each do |group_name, steps|
168
+ tp_worksheet.add_cell(row, 1, group_name)
169
+ row += 1
170
+ steps.each do |step|
171
+ longest_line = [step.s_u_t, step.t_l_v, step.inferno_notes, step.alternate_test].map do |text|
172
+ text&.lines&.count || 0
173
+ end.max
174
+ tp_worksheet.change_row_height(row, (longest_line * 10) + 10)
175
+ tp_worksheet.change_row_vertical_alignment(row, 'top')
176
+ tp_worksheet.add_cell(row, 2, "#{step.id.upcase} ")
177
+ tp_worksheet.add_cell(row, 3, step.s_u_t).change_text_wrap(true)
178
+ tp_worksheet.add_cell(row, 4, step.t_l_v).change_text_wrap(true)
179
+ tp_worksheet.add_cell(row, 5, '')
180
+ tp_worksheet.add_cell(row, 6, step.inferno_supported)
181
+ tp_worksheet.add_cell(row, 7, step.inferno_tests.join(', ')).change_text_wrap(true)
182
+ tp_worksheet.add_cell(row, 8, step.inferno_notes).change_text_wrap(true)
183
+ tp_worksheet.add_cell(row, 9, step.alternate_test).change_text_wrap(true)
184
+ row += 1
185
+ end
186
+ end
187
+ row += 1
188
+ end
189
+ end
190
+
191
+ def generate_inferno_test_worksheet # rubocop:disable Metrics/CyclomaticComplexity
192
+ workbook.add_worksheet('Inferno Tests')
193
+ inferno_worksheet = workbook.worksheets[2]
194
+
195
+ columns = [
196
+ ['', 3, ->(_test) { '' }],
197
+ ['', 3, ->(_test) { '' }],
198
+ ['Inferno Test ID', 22, ->(test) { test.short_id.to_s }],
199
+ ['Inferno Test Name', 65, ->(test) { test.title }],
200
+ ['Inferno Test Description', 65, lambda do |test|
201
+ natural_indent = test.description.lines
202
+ .collect { |l| l.index(/[^ ]/) }
203
+ .select { |l| !l.nil? && l.positive? }.min || 0
204
+ test.description.lines.map { |l| l[natural_indent..] || "\n" }.join.strip
205
+ end],
206
+ ['Test Procedure Steps', 30, ->(test) { inferno_to_procedure_map[test.short_id].join(', ') }]
207
+ ]
208
+
209
+ columns.each_with_index do |row_name, index|
210
+ inferno_worksheet.add_cell(0, index, row_name.first)
211
+ end
212
+
213
+ row = 1
214
+
215
+ test_suite.groups.each do |group|
216
+ row += 1
217
+ inferno_worksheet.add_cell(row, 0, group.title)
218
+ row += 1
219
+ group.groups.each do |test_case|
220
+ inferno_worksheet.add_cell(row, 1, "#{test_case.short_id}: #{test_case.title}")
221
+ row += 1
222
+ test_case.tests.each do |test|
223
+ this_row = columns.map do |column|
224
+ column[2].call(test)
225
+ end
226
+
227
+ this_row.each_with_index do |value, index|
228
+ inferno_worksheet.add_cell(row, index, value).change_text_wrap(true)
229
+ end
230
+ inferno_worksheet.change_row_height(row, [26, (test.description.strip.lines.count * 10) + 10].max)
231
+ inferno_worksheet.change_row_vertical_alignment(row, 'top')
232
+ row += 1
233
+ end
234
+ end
235
+ end
236
+
237
+ columns.each_with_index do |column, index|
238
+ inferno_worksheet.change_column_width(index, column[1])
239
+ end
240
+ end
241
+ end
242
+ end
243
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ONCCertificationG10TestKit
4
+ module Tasks
5
+ class TestProcedure
6
+ # procedure -> section -> steps
7
+ attr_accessor :sections
8
+
9
+ def initialize(data)
10
+ @sections = data[:procedure].map { |section| Section.new(section) }
11
+ end
12
+
13
+ class Section
14
+ attr_accessor :name, :steps
15
+
16
+ def initialize(data)
17
+ @name = data[:section]
18
+
19
+ group = nil
20
+ @steps = data[:steps].map do |step|
21
+ if step[:group].nil?
22
+ step[:group] = group
23
+ else
24
+ group = step[:group]
25
+ end
26
+
27
+ Step.new(step)
28
+ end
29
+ end
30
+ end
31
+
32
+ class Step
33
+ attr_accessor :group, :id, :s_u_t, :t_l_v, :inferno_supported, :inferno_notes, :inferno_tests, :alternate_test
34
+
35
+ def initialize(data)
36
+ @group = data[:group]
37
+ @id = data[:id]
38
+ @s_u_t = data[:SUT]
39
+ @t_l_v = data[:TLV]
40
+ @inferno_supported = data[:inferno_supported]
41
+ @inferno_notes = data[:inferno_notes]
42
+ @alternate_test = data[:alternate_test]
43
+ @inferno_tests = expand_tests(data[:inferno_tests]).flatten
44
+ end
45
+
46
+ def expand_tests(test_list)
47
+ return [] if test_list.nil?
48
+
49
+ test_list.map do |test|
50
+ if test.include?(' - ')
51
+ first, second = test.split(' - ')
52
+ prefix, _, beginning = first.rpartition('.')
53
+ second_prefix, _, ending = second.rpartition('.')
54
+ raise "'#{prefix}' != '#{second_prefix}' in #{@group} #{@id}" unless prefix == second_prefix
55
+
56
+ (beginning.to_i..ending.to_i).map { |index| "#{prefix}.#{format('%02<index>d', { index: index })}" }
57
+ else
58
+ [test]
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -4,67 +4,16 @@ module ONCCertificationG10TestKit
4
4
  description 'Demonstrate the Health IT module is capable of revoking access granted to an application.'
5
5
  id :g10_token_revocation
6
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
7
 
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
- )
8
+ input_order :token_revocation_attestation,
9
+ :token_revocation_notes,
10
+ :standalone_access_token,
11
+ :standalone_refresh_token,
12
+ :standalone_patient_id,
13
+ :url,
14
+ :smart_token_url,
15
+ :standalone_client_id,
16
+ :standalone_client_secret
68
17
 
69
18
  test do
70
19
  title 'Health IT developer demonstrated the ability of the Health IT Module to revoke tokens.'
@@ -73,6 +22,27 @@ module ONCCertificationG10TestKit
73
22
  authorization server to revoke tokens.
74
23
  )
75
24
 
25
+ input :token_revocation_attestation,
26
+ title: 'Prior to executing test, Health IT developer demonstrated revoking tokens provided during patient standalone launch.', # rubocop:disable Layout/LineLength
27
+ type: 'radio',
28
+ default: 'false',
29
+ options: {
30
+ list_options: [
31
+ {
32
+ label: 'Yes',
33
+ value: 'true'
34
+ },
35
+ {
36
+ label: 'No',
37
+ value: 'false'
38
+ }
39
+ ]
40
+ }
41
+ input :token_revocation_notes,
42
+ title: 'Notes, if applicable:',
43
+ type: 'textarea',
44
+ optional: true
45
+
76
46
  run do
77
47
  assert token_revocation_attestation == 'true',
78
48
  'Health IT Module did not demonstrate support for application registration for single patients.'
@@ -86,6 +56,18 @@ module ONCCertificationG10TestKit
86
56
  This test checks that the Patient resource returns unuathorized after token revocation.
87
57
  )
88
58
 
59
+ input :url,
60
+ title: 'FHIR Endpoint',
61
+ description: 'URL of the FHIR endpoint used by standalone applications'
62
+ input :patient_id,
63
+ name: :standalone_patient_id,
64
+ title: 'Patient ID',
65
+ 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
66
+ input :access_token,
67
+ name: :standalone_access_token,
68
+ title: 'Revoked Bearer Token',
69
+ description: 'Prior to the test, please revoke this bearer token from patient standalone launch.'
70
+
89
71
  fhir_client :revoked_token do
90
72
  url :url
91
73
  bearer_token :access_token
@@ -111,6 +93,24 @@ module ONCCertificationG10TestKit
111
93
  This test checks that refreshing token fails after token revokation.
112
94
  )
113
95
 
96
+ input :smart_token_url,
97
+ title: 'OAuth 2.0 Token Endpoint',
98
+ description: 'OAuth token endpoint provided during the patient standalone launch'
99
+ input :refresh_token,
100
+ name: :standalone_refresh_token,
101
+ title: 'Revoked Refresh Token',
102
+ description: 'Prior to the test, please revoke this refresh token from patient standalone launch.'
103
+ input :client_id,
104
+ name: :standalone_client_id,
105
+ title: 'Standalone Client ID',
106
+ description: 'Client ID provided during registration of Inferno as a standalone application',
107
+ locked: true
108
+ input :client_secret,
109
+ name: :standalone_client_secret,
110
+ title: 'Standalone Client Secret',
111
+ description: 'Client Secret provided during registration of Inferno as a standalone application',
112
+ locked: true
113
+
114
114
  run do
115
115
  skip_if refresh_token.blank?,
116
116
  'Refresh token not provided to test.'
@@ -152,7 +152,7 @@ module ONCCertificationG10TestKit
152
152
  id :g10_patient_unrestricted_access
153
153
 
154
154
  def resource_group
155
- USCoreTestKit::PatientGroup
155
+ USCoreTestKit::USCoreV311::PatientGroup
156
156
  end
157
157
  end
158
158
 
@@ -170,7 +170,7 @@ module ONCCertificationG10TestKit
170
170
  id :g10_allergy_intolerance_unrestricted_access
171
171
 
172
172
  def resource_group
173
- USCoreTestKit::AllergyIntoleranceGroup
173
+ USCoreTestKit::USCoreV311::AllergyIntoleranceGroup
174
174
  end
175
175
  end
176
176
 
@@ -188,7 +188,7 @@ module ONCCertificationG10TestKit
188
188
  id :g10_care_plan_unrestricted_access
189
189
 
190
190
  def resource_group
191
- USCoreTestKit::CarePlanGroup
191
+ USCoreTestKit::USCoreV311::CarePlanGroup
192
192
  end
193
193
  end
194
194
 
@@ -206,7 +206,7 @@ module ONCCertificationG10TestKit
206
206
  id :g10_care_team_unrestricted_access
207
207
 
208
208
  def resource_group
209
- USCoreTestKit::CareTeamGroup
209
+ USCoreTestKit::USCoreV311::CareTeamGroup
210
210
  end
211
211
  end
212
212
 
@@ -224,7 +224,7 @@ module ONCCertificationG10TestKit
224
224
  id :g10_condition_unrestricted_access
225
225
 
226
226
  def resource_group
227
- USCoreTestKit::ConditionGroup
227
+ USCoreTestKit::USCoreV311::ConditionGroup
228
228
  end
229
229
  end
230
230
 
@@ -242,7 +242,7 @@ module ONCCertificationG10TestKit
242
242
  id :g10_device_unrestricted_access
243
243
 
244
244
  def resource_group
245
- USCoreTestKit::DeviceGroup
245
+ USCoreTestKit::USCoreV311::DeviceGroup
246
246
  end
247
247
  end
248
248
 
@@ -260,7 +260,7 @@ module ONCCertificationG10TestKit
260
260
  id :g10_diagnostic_report_unrestricted_access
261
261
 
262
262
  def resource_group
263
- USCoreTestKit::DiagnosticReportLabGroup
263
+ USCoreTestKit::USCoreV311::DiagnosticReportLabGroup
264
264
  end
265
265
  end
266
266
 
@@ -278,7 +278,7 @@ module ONCCertificationG10TestKit
278
278
  id :g10_document_reference_unrestricted_access
279
279
 
280
280
  def resource_group
281
- USCoreTestKit::DocumentReferenceGroup
281
+ USCoreTestKit::USCoreV311::DocumentReferenceGroup
282
282
  end
283
283
  end
284
284
 
@@ -296,7 +296,7 @@ module ONCCertificationG10TestKit
296
296
  id :g10_goal_unrestricted_access
297
297
 
298
298
  def resource_group
299
- USCoreTestKit::GoalGroup
299
+ USCoreTestKit::USCoreV311::GoalGroup
300
300
  end
301
301
  end
302
302
 
@@ -314,7 +314,7 @@ module ONCCertificationG10TestKit
314
314
  id :g10_immunization_unrestricted_access
315
315
 
316
316
  def resource_group
317
- USCoreTestKit::ImmunizationGroup
317
+ USCoreTestKit::USCoreV311::ImmunizationGroup
318
318
  end
319
319
  end
320
320
 
@@ -332,7 +332,7 @@ module ONCCertificationG10TestKit
332
332
  id :g10_medication_request_access
333
333
 
334
334
  def resource_group
335
- USCoreTestKit::MedicationRequestGroup
335
+ USCoreTestKit::USCoreV311::MedicationRequestGroup
336
336
  end
337
337
  end
338
338
 
@@ -350,7 +350,7 @@ module ONCCertificationG10TestKit
350
350
  id :g10_observation_unrestricted_access
351
351
 
352
352
  def resource_group
353
- USCoreTestKit::PulseOximetryGroup
353
+ USCoreTestKit::USCoreV311::PulseOximetryGroup
354
354
  end
355
355
  end
356
356
 
@@ -368,7 +368,7 @@ module ONCCertificationG10TestKit
368
368
  id :g10_procedure_unrestricted_access
369
369
 
370
370
  def resource_group
371
- USCoreTestKit::ProcedureGroup
371
+ USCoreTestKit::USCoreV311::ProcedureGroup
372
372
  end
373
373
  end
374
374
  end
@@ -1,3 +1,3 @@
1
1
  module ONCCertificationG10TestKit
2
- VERSION = '2.0.0'.freeze
2
+ VERSION = '2.1.0.rc1'.freeze
3
3
  end
@@ -144,13 +144,14 @@ module ONCCertificationG10TestKit
144
144
  end
145
145
 
146
146
  test do
147
- title 'Health IT Module attested that refresh tokens are valid for a period of no shorter than three months.'
147
+ title 'Health IT Module attested that it is capable of issuing refresh tokens ' \
148
+ 'that are valid for a period of no shorter than three months.'
148
149
  description %(
149
- Health IT Module attested that refresh tokens are valid for a period of
150
- no shorter than three months.
150
+ Health IT Module attested that it is capable of issuing refresh tokens
151
+ that are valid for a period of no shorter than three months.
151
152
  )
152
153
  input :refresh_token_period_attestation,
153
- title: 'Health IT Module attested that refresh tokens are valid for a period of no shorter than three months.', # rubocop:disable Layout/LineLength
154
+ title: 'Health IT Module attested that it is capable of issuing refresh tokens that are valid for a period of no shorter than three months.', # rubocop:disable Layout/LineLength
154
155
  type: 'radio',
155
156
  default: 'false',
156
157
  options: {
@@ -172,8 +173,8 @@ module ONCCertificationG10TestKit
172
173
 
173
174
  run do
174
175
  assert refresh_token_period_attestation == 'true',
175
- 'Health IT Module did not attest that refresh tokens are valid ' \
176
- 'for a period of no shorter than three months.'
176
+ 'Health IT Module did not attest that it is capable of issuing refresh tokens ' \
177
+ 'that are valid for a period of no shorter than three months.'
177
178
  pass refresh_token_period_notes if refresh_token_period_notes.present?
178
179
  end
179
180
  end