onc_certification_g10_test_kit 2.0.0.rc2 → 2.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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 +15 -13
  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 +15 -17
  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 +14 -10
@@ -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.rc2'.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