onc_certification_g10_test_kit 7.0.3 → 7.2.0

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/g10_reference_server_preset.json +1467 -0
  3. data/lib/inferno/ext/bloomer.rb +1 -1
  4. data/lib/inferno/terminology/tasks/process_umls.rb +1 -1
  5. data/lib/onc_certification_g10_test_kit/bulk_data_authorization.rb +73 -67
  6. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_cancel_stu1.rb +1 -2
  7. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_cancel_stu2.rb +7 -1
  8. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_parameters.rb +1 -1
  9. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_stu1.rb +10 -2
  10. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_validation.rb +6 -2
  11. data/lib/onc_certification_g10_test_kit/bulk_export_validation_tester.rb +7 -3
  12. data/lib/onc_certification_g10_test_kit/configuration_checker.rb +5 -13
  13. data/lib/onc_certification_g10_test_kit/encounter_context_test.rb +3 -3
  14. data/lib/onc_certification_g10_test_kit/export_kick_off_performer.rb +7 -3
  15. data/lib/onc_certification_g10_test_kit/feature.rb +5 -4
  16. data/lib/onc_certification_g10_test_kit/igs/01-us-core-v400.tgz +0 -0
  17. data/lib/onc_certification_g10_test_kit/igs/03-us-core-v311.tgz +0 -0
  18. data/lib/onc_certification_g10_test_kit/igs/04-us-core-610.tgz +0 -0
  19. data/lib/onc_certification_g10_test_kit/metadata.rb +103 -0
  20. data/lib/onc_certification_g10_test_kit/multi_patient_api_stu1.rb +0 -4
  21. data/lib/onc_certification_g10_test_kit/multi_patient_api_stu2.rb +8 -4
  22. data/lib/onc_certification_g10_test_kit/patient_context_test.rb +3 -3
  23. data/lib/onc_certification_g10_test_kit/patient_scope_test.rb +1 -1
  24. data/lib/onc_certification_g10_test_kit/restricted_resource_type_access_group.rb +3 -10
  25. data/lib/onc_certification_g10_test_kit/scope_constants.rb +52 -0
  26. data/lib/onc_certification_g10_test_kit/short_id_map.yml +11 -20
  27. data/lib/onc_certification_g10_test_kit/single_patient_api_group.rb +18 -17
  28. data/lib/onc_certification_g10_test_kit/single_patient_us_core_4_api_group.rb +18 -17
  29. data/lib/onc_certification_g10_test_kit/single_patient_us_core_5_api_group.rb +18 -17
  30. data/lib/onc_certification_g10_test_kit/single_patient_us_core_6_api_group.rb +20 -19
  31. data/lib/onc_certification_g10_test_kit/single_patient_us_core_7_api_group.rb +20 -19
  32. data/lib/onc_certification_g10_test_kit/smart_app_launch_invalid_aud_group.rb +108 -65
  33. data/lib/onc_certification_g10_test_kit/smart_asymmetric_launch_group.rb +42 -89
  34. data/lib/onc_certification_g10_test_kit/smart_ehr_patient_launch_group.rb +33 -43
  35. data/lib/onc_certification_g10_test_kit/smart_ehr_patient_launch_group_stu2.rb +32 -54
  36. data/lib/onc_certification_g10_test_kit/smart_ehr_patient_launch_group_stu2_2.rb +34 -55
  37. data/lib/onc_certification_g10_test_kit/smart_ehr_practitioner_app_group.rb +103 -146
  38. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_group.rb +17 -55
  39. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_group_stu2_2.rb +17 -55
  40. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_us_core_7_group.rb +17 -55
  41. data/lib/onc_certification_g10_test_kit/smart_fine_grained_scopes_us_core_7_group_stu2_2.rb +17 -55
  42. data/lib/onc_certification_g10_test_kit/smart_granular_scope_selection_group.rb +33 -68
  43. data/lib/onc_certification_g10_test_kit/smart_granular_scope_selection_test.rb +4 -3
  44. data/lib/onc_certification_g10_test_kit/smart_invalid_pkce_group.rb +45 -89
  45. data/lib/onc_certification_g10_test_kit/smart_invalid_token_group.rb +45 -89
  46. data/lib/onc_certification_g10_test_kit/smart_invalid_token_group_stu2.rb +53 -91
  47. data/lib/onc_certification_g10_test_kit/smart_invalid_token_refresh_test.rb +9 -6
  48. data/lib/onc_certification_g10_test_kit/smart_limited_app_group.rb +86 -278
  49. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group.rb +32 -59
  50. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group_stu2.rb +36 -75
  51. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group_stu2_2.rb +36 -75
  52. data/lib/onc_certification_g10_test_kit/smart_scopes_test.rb +6 -1
  53. data/lib/onc_certification_g10_test_kit/smart_standalone_patient_app_group.rb +90 -118
  54. data/lib/onc_certification_g10_test_kit/smart_v1_scopes_group.rb +62 -116
  55. data/lib/onc_certification_g10_test_kit/tasks/generate_matrix.rb +3 -12
  56. data/lib/onc_certification_g10_test_kit/token_introspection_group.rb +12 -25
  57. data/lib/onc_certification_g10_test_kit/token_introspection_group_stu2_2.rb +12 -14
  58. data/lib/onc_certification_g10_test_kit/token_revocation_group.rb +44 -33
  59. data/lib/onc_certification_g10_test_kit/unrestricted_resource_type_access_group.rb +3 -3
  60. data/lib/onc_certification_g10_test_kit/urls.rb +4 -0
  61. data/lib/onc_certification_g10_test_kit/version.rb +2 -1
  62. data/lib/onc_certification_g10_test_kit.rb +119 -65
  63. metadata +20 -68
@@ -63,19 +63,21 @@ module ONCCertificationG10TestKit
63
63
  :well_known_introspection_url,
64
64
  :custom_authorization_header,
65
65
  :optional_introspection_request_params,
66
- :standalone_client_id,
67
- :standalone_client_secret,
68
- :authorization_method,
69
- :use_pkce,
70
- :pkce_code_challenge_method,
71
- :standalone_requested_scopes,
72
- :token_introspection_auth_type,
73
- :client_auth_encryption_method
66
+ :standalone_smart_auth_info
74
67
 
75
68
  config(
76
69
  inputs: {
77
- client_auth_type: {
78
- name: :token_introspection_auth_type
70
+ smart_auth_info: {
71
+ name: :standalone_smart_auth_info,
72
+ title: 'Standalone Launch Credentials',
73
+ options: {
74
+ components: [
75
+ {
76
+ name: :jwks,
77
+ locked: true
78
+ }
79
+ ]
80
+ }
79
81
  }
80
82
  }
81
83
  )
@@ -91,20 +93,5 @@ module ONCCertificationG10TestKit
91
93
  the correct HTTP response is returned but does not validate the contents
92
94
  of the token introspection response.
93
95
  DESCRIPTION
94
-
95
- # The token introspection tests are SMART v2 only, so they use v2 discovery
96
- # and launch groups. g10 needs them for SMART v1 and v2, so this sets the
97
- # original discovery and launch groups to only appear when using SMART v2,
98
- # and adds the v1 groups when using v1.
99
-
100
- groups.first.groups.each do |group|
101
- group.required_suite_options(G10Options::SMART_2_REQUIREMENT)
102
- end
103
-
104
- groups.first.group from: :smart_discovery,
105
- required_suite_options: G10Options::SMART_1_REQUIREMENT
106
-
107
- groups.first.group from: :smart_standalone_launch,
108
- required_suite_options: G10Options::SMART_1_REQUIREMENT
109
96
  end
110
97
  end
@@ -61,19 +61,21 @@ module ONCCertificationG10TestKit
61
61
  :well_known_introspection_url,
62
62
  :custom_authorization_header,
63
63
  :optional_introspection_request_params,
64
- :standalone_client_id,
65
- :standalone_client_secret,
66
- :authorization_method,
67
- :use_pkce,
68
- :pkce_code_challenge_method,
69
- :standalone_requested_scopes,
70
- :token_introspection_auth_type,
71
- :client_auth_encryption_method
64
+ :standalone_smart_auth_info
72
65
 
73
66
  config(
74
67
  inputs: {
75
- client_auth_type: {
76
- name: :token_introspection_auth_type
68
+ smart_auth_info: {
69
+ name: :standalone_smart_auth_info,
70
+ title: 'Standalone Launch Credentials',
71
+ options: {
72
+ components: [
73
+ {
74
+ name: :jwks,
75
+ locked: true
76
+ }
77
+ ]
78
+ }
77
79
  }
78
80
  }
79
81
  )
@@ -89,9 +91,5 @@ module ONCCertificationG10TestKit
89
91
  the correct HTTP response is returned but does not validate the contents
90
92
  of the token introspection response.
91
93
  DESCRIPTION
92
-
93
- groups.first.groups.each do |group|
94
- group.required_suite_options(G10Options::SMART_2_2_REQUIREMENT)
95
- end
96
94
  end
97
95
  end
@@ -11,13 +11,43 @@ module ONCCertificationG10TestKit
11
11
 
12
12
  input_order :token_revocation_attestation,
13
13
  :token_revocation_notes,
14
- :standalone_access_token,
15
- :standalone_refresh_token,
16
14
  :standalone_patient_id,
17
- :url,
18
- :smart_token_url,
19
- :standalone_client_id,
20
- :standalone_client_secret
15
+ :url
16
+
17
+ config(
18
+ inputs: {
19
+ smart_auth_info: {
20
+ title: 'Revoked Bearer Token',
21
+ description: 'Prior to the test, please revoke this bearer token from patient standalone launch.',
22
+ options: {
23
+ mode: 'access',
24
+ components: [
25
+ Inferno::DSL::AuthInfo.default_auth_type_component_without_backend_services,
26
+ {
27
+ name: :client_id,
28
+ locked: true
29
+ },
30
+ {
31
+ name: :client_secret,
32
+ locked: true
33
+ },
34
+ {
35
+ name: :refresh_token,
36
+ optional: false
37
+ },
38
+ {
39
+ name: :token_url,
40
+ optional: false
41
+ },
42
+ {
43
+ name: :jwks,
44
+ locked: true
45
+ }
46
+ ]
47
+ }
48
+ }
49
+ }
50
+ )
21
51
 
22
52
  test do
23
53
  title 'Health IT developer demonstrated the ability of the Health IT Module to revoke tokens within one hour of a patient\'s request.' # rubocop:disable Layout/LineLength
@@ -68,21 +98,18 @@ module ONCCertificationG10TestKit
68
98
  name: :standalone_patient_id,
69
99
  title: 'Patient ID',
70
100
  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
71
- input :access_token,
72
- name: :standalone_access_token,
73
- title: 'Revoked Bearer Token',
74
- description: 'Prior to the test, please revoke this bearer token from patient standalone launch.'
101
+ input :smart_auth_info, type: :auth_info
75
102
 
76
103
  fhir_client :revoked_token do
77
104
  url :url
78
- bearer_token :access_token
105
+ auth_info :smart_auth_info
79
106
  end
80
107
 
81
108
  run do
82
109
  skip_if patient_id.blank?,
83
110
  'Patient ID not provided to test. The patient ID is typically provided ' \
84
111
  'during a SMART launch context.'
85
- skip_if access_token.blank?,
112
+ skip_if smart_auth_info.access_token.blank?,
86
113
  'Bearer token not provided. This test verifies that the bearer token can ' \
87
114
  'no longer be used to access a Patient resource.'
88
115
 
@@ -98,38 +125,22 @@ module ONCCertificationG10TestKit
98
125
  This test checks that refreshing token fails after token revocation.
99
126
  )
100
127
 
101
- input :smart_token_url,
102
- title: 'OAuth 2.0 Token Endpoint',
103
- description: 'OAuth token endpoint provided during the patient standalone launch'
104
- input :refresh_token,
105
- name: :standalone_refresh_token,
106
- title: 'Revoked Refresh Token',
107
- description: 'Prior to the test, please revoke this refresh token from patient standalone launch.'
108
- input :client_id,
109
- name: :standalone_client_id,
110
- title: 'Standalone Client ID',
111
- description: 'Client ID provided during registration of Inferno as a standalone application',
112
- locked: true
113
- input :client_secret,
114
- name: :standalone_client_secret,
115
- title: 'Standalone Client Secret',
116
- description: 'Client Secret provided during registration of Inferno as a standalone application',
117
- locked: true
128
+ input :smart_auth_info, type: :auth_info
118
129
 
119
130
  run do
120
- skip_if refresh_token.blank?,
131
+ skip_if smart_auth_info.refresh_token.blank?,
121
132
  'Refresh token not provided to test.'
122
133
  oauth2_params = {
123
134
  'grant_type' => 'refresh_token',
124
- 'refresh_token' => refresh_token
135
+ 'refresh_token' => smart_auth_info.refresh_token
125
136
  }
126
- client_credentials = "#{client_id}:#{client_secret}"
137
+ client_credentials = "#{smart_auth_info.client_id}:#{smart_auth_info.client_secret}"
127
138
  oauth2_headers = {
128
139
  'Content-Type' => 'application/x-www-form-urlencoded',
129
140
  'Authorization' => "Basic #{Base64.strict_encode64(client_credentials)}"
130
141
  }
131
142
 
132
- post(smart_token_url, body: oauth2_params, headers: oauth2_headers)
143
+ post(smart_auth_info.token_url, body: oauth2_params, headers: oauth2_headers)
133
144
 
134
145
  assert_response_status([400, 401])
135
146
  end
@@ -86,12 +86,12 @@ module ONCCertificationG10TestKit
86
86
  )
87
87
  id :g10_unrestricted_resource_type_access
88
88
 
89
- input :url, :smart_credentials, :patient_id, :received_scopes
90
- input :smart_credentials, type: :oauth_credentials
89
+ input :url, :patient_id, :received_scopes
90
+ input :smart_auth_info, type: 'auth_info'
91
91
 
92
92
  fhir_client do
93
93
  url :url
94
- oauth_credentials :smart_credentials
94
+ oauth_credentials :smart_auth_info
95
95
  end
96
96
 
97
97
  V5_EXCLUDED_RESOURCES = ['RelatedPerson'].freeze
@@ -0,0 +1,4 @@
1
+ module ONCCertificationG10TestKit
2
+ REDIRECT_URI = "#{Inferno::Application['base_url']}/custom/smart/redirect".freeze
3
+ LAUNCH_URI = "#{Inferno::Application['base_url']}/custom/smart/launch".freeze
4
+ end
@@ -1,3 +1,4 @@
1
1
  module ONCCertificationG10TestKit
2
- VERSION = '7.0.3'.freeze
2
+ VERSION = '7.2.0'.freeze
3
+ LAST_UPDATED = '2025-04-08'.freeze # TODO: update next release
3
4
  end
@@ -3,8 +3,9 @@ require 'smart_app_launch/smart_stu2_suite'
3
3
  require 'smart_app_launch/smart_stu2_2_suite'
4
4
  require 'us_core_test_kit'
5
5
 
6
+ require_relative 'onc_certification_g10_test_kit/metadata'
6
7
  require_relative 'onc_certification_g10_test_kit/configuration_checker'
7
- require_relative 'onc_certification_g10_test_kit/version'
8
+ require_relative 'onc_certification_g10_test_kit/urls'
8
9
 
9
10
  require_relative 'onc_certification_g10_test_kit/feature'
10
11
  require_relative 'onc_certification_g10_test_kit/g10_options'
@@ -50,7 +51,6 @@ module ONCCertificationG10TestKit
50
51
  class G10CertificationSuite < Inferno::TestSuite
51
52
  title 'ONC Certification (g)(10) Standardized API'
52
53
  short_title '(g)(10) Standardized API'
53
- version VERSION
54
54
  id :g10_certification
55
55
  links [
56
56
  {
@@ -89,26 +89,16 @@ module ONCCertificationG10TestKit
89
89
  ].freeze
90
90
 
91
91
  def self.setup_validator(us_core_version_requirement) # rubocop:disable Metrics/CyclomaticComplexity
92
- validator_method = if Feature.use_hl7_resource_validator?
93
- method(:fhir_resource_validator)
94
- else
95
- method(:validator)
96
- end
97
-
98
- validator_method.call :default, required_suite_options: us_core_version_requirement do
99
- if Feature.use_hl7_resource_validator?
100
- cli_context do
101
- txServer nil
102
- displayWarnings true
103
- disableDefaultResourceFetcher true
104
- end
92
+ fhir_resource_validator :default, required_suite_options: us_core_version_requirement do
93
+ cli_context do
94
+ txServer nil
95
+ displayWarnings true
96
+ disableDefaultResourceFetcher true
97
+ end
105
98
 
106
- us_core_version_num = G10Options::US_CORE_VERSION_NUMBERS[us_core_version_requirement[:us_core_version]]
99
+ us_core_version_num = G10Options::US_CORE_VERSION_NUMBERS[us_core_version_requirement[:us_core_version]]
107
100
 
108
- igs("hl7.fhir.us.core##{us_core_version_num}")
109
- else
110
- url ENV.fetch('G10_VALIDATOR_URL', 'http://validator_service:4567')
111
- end
101
+ igs("hl7.fhir.us.core##{us_core_version_num}")
112
102
 
113
103
  us_core_message_filters =
114
104
  case (us_core_version_requirement[:us_core_version])
@@ -263,12 +253,6 @@ module ONCCertificationG10TestKit
263
253
  ]
264
254
 
265
255
  config(
266
- inputs: {
267
- client_auth_encryption_method: {
268
- title: 'Client Authentication Encryption Method',
269
- locked: true
270
- }
271
- },
272
256
  options: {
273
257
  post_authorization_uri: "#{Inferno::Application['base_url']}/custom/smart_stu2/post_auth",
274
258
  incorrectly_permitted_tls_version_message_type: 'warning'
@@ -308,8 +292,8 @@ module ONCCertificationG10TestKit
308
292
  To get started with the first group of scenarios, please first register the
309
293
  Inferno client as a SMART App with the following information:
310
294
 
311
- * SMART Launch URI: `#{SMARTAppLaunch::AppLaunchTest.config.options[:launch_uri]}`
312
- * OAuth Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
295
+ * SMART Launch URI: `#{LAUNCH_URI}`
296
+ * OAuth Redirect URI: `#{REDIRECT_URI}`
313
297
 
314
298
  For the multi-patient API, register Inferno with the following JWK Set
315
299
  Url:
@@ -336,8 +320,8 @@ module ONCCertificationG10TestKit
336
320
  input_instructions %(
337
321
  Register Inferno as a SMART app using the following information:
338
322
 
339
- * Launch URI: `#{SMARTAppLaunch::AppLaunchTest.config.options[:launch_uri]}`
340
- * Redirect URI: `#{SMARTAppLaunch::AppRedirectTest.config.options[:redirect_uri]}`
323
+ * Launch URI: `#{LAUNCH_URI}`
324
+ * Redirect URI: `#{REDIRECT_URI}`
341
325
 
342
326
  For the multi-patient API, register Inferno with the following JWK Set
343
327
  Url:
@@ -347,7 +331,24 @@ module ONCCertificationG10TestKit
347
331
 
348
332
  group from: 'g10_smart_standalone_patient_app'
349
333
 
350
- group from: 'g10_smart_limited_app'
334
+ group from: 'g10_smart_limited_app' do
335
+ # This has to be configured here, otherwise the `smart_auth_info` config
336
+ # will get clobbered and will use `standalone_smart_auth_info` instead of
337
+ # `limited_smart_auth_info`
338
+ groups
339
+ .select { |group| group.id.include? 'smart_standalone_launch' }
340
+ .flat_map(&:tests)
341
+ .select { |test| test.id.include? 'g10_patient_context' }
342
+ .each do |test|
343
+ test
344
+ .config(
345
+ inputs: {
346
+ patient_id: { name: :limited_patient_id },
347
+ smart_auth_info: { name: :limited_smart_auth_info }
348
+ }
349
+ )
350
+ end
351
+ end
351
352
 
352
353
  group from: 'g10_smart_ehr_practitioner_app'
353
354
 
@@ -393,18 +394,10 @@ module ONCCertificationG10TestKit
393
394
  [Follow this link to authorize with the SMART server](#{auth_url}).
394
395
 
395
396
  Tests will resume once Inferno receives a request at
396
- `#{config.options[:redirect_uri]}` with a state of `#{state}`.
397
+ `#{REDIRECT_URI}` with a state of `#{state}`.
397
398
  )
398
399
  end
399
400
 
400
- config(
401
- inputs: {
402
- client_auth_encryption_method: {
403
- locked: false
404
- }
405
- }
406
- )
407
-
408
401
  group from: :g10_public_standalone_launch,
409
402
  required_suite_options: G10Options::SMART_1_REQUIREMENT,
410
403
  config: { options: { redirect_message_proc: default_redirect_message_proc } }
@@ -416,6 +409,7 @@ module ONCCertificationG10TestKit
416
409
  config: { options: { redirect_message_proc: default_redirect_message_proc } }
417
410
 
418
411
  group from: :g10_token_revocation
412
+
419
413
  group from: :g10_smart_invalid_aud,
420
414
  config: { options: { redirect_message_proc: default_redirect_message_proc } }
421
415
 
@@ -455,34 +449,94 @@ module ONCCertificationG10TestKit
455
449
  required_suite_options: G10Options::SMART_2_2_REQUIREMENT
456
450
 
457
451
  group from: :g10_smart_v1_scopes,
458
- required_suite_options: G10Options::SMART_2_REQUIREMENT,
459
- config: {
460
- inputs: {
461
- client_auth_encryption_method: { locked: true }
462
- }
463
- }
452
+ required_suite_options: G10Options::SMART_2_REQUIREMENT
464
453
  group from: :g10_smart_v1_scopes,
465
454
  id: :g10_smart_v1_scopes_stu2_2, # rubocop:disable Naming/VariableNumber
466
- required_suite_options: G10Options::SMART_2_2_REQUIREMENT,
467
- config: {
468
- inputs: {
469
- client_auth_encryption_method: { locked: true }
470
- }
471
- }
455
+ required_suite_options: G10Options::SMART_2_2_REQUIREMENT
456
+
457
+ group from: :g10_smart_fine_grained_scopes, exclude_optional: true do
458
+ required_suite_options G10Options::SMART_2_REQUIREMENT.merge(G10Options::US_CORE_6_REQUIREMENT)
459
+ groups.first.config(
460
+ inputs: {
461
+ smart_auth_info: { name: :granular_scopes_1_auth_info }
462
+ },
463
+ outputs: {
464
+ smart_auth_info: { name: :granular_scopes_1_auth_info }
465
+ }
466
+ )
467
+
468
+ groups.last.config(
469
+ inputs: {
470
+ smart_auth_info: { name: :granular_scopes_2_auth_info }
471
+ },
472
+ outputs: {
473
+ smart_auth_info: { name: :granular_scopes_2_auth_info }
474
+ }
475
+ )
476
+ end
477
+
478
+ group from: :g10_smart_fine_grained_scopes_stu2_2, exclude_optional: true do # rubocop:disable Naming/VariableNumber
479
+ required_suite_options G10Options::SMART_2_2_REQUIREMENT.merge(G10Options::US_CORE_6_REQUIREMENT)
480
+ groups.first.config(
481
+ inputs: {
482
+ smart_auth_info: { name: :granular_scopes_1_auth_info }
483
+ },
484
+ outputs: {
485
+ smart_auth_info: { name: :granular_scopes_1_auth_info }
486
+ }
487
+ )
488
+
489
+ groups.last.config(
490
+ inputs: {
491
+ smart_auth_info: { name: :granular_scopes_2_auth_info }
492
+ },
493
+ outputs: {
494
+ smart_auth_info: { name: :granular_scopes_2_auth_info }
495
+ }
496
+ )
497
+ end
498
+
499
+ group from: :g10_us_core_7_smart_fine_grained_scopes, exclude_optional: true do
500
+ required_suite_options G10Options::SMART_2_REQUIREMENT.merge(G10Options::US_CORE_7_REQUIREMENT)
501
+ groups.first.config(
502
+ inputs: {
503
+ smart_auth_info: { name: :granular_scopes_1_auth_info }
504
+ },
505
+ outputs: {
506
+ smart_auth_info: { name: :granular_scopes_1_auth_info }
507
+ }
508
+ )
509
+
510
+ groups.last.config(
511
+ inputs: {
512
+ smart_auth_info: { name: :granular_scopes_2_auth_info }
513
+ },
514
+ outputs: {
515
+ smart_auth_info: { name: :granular_scopes_2_auth_info }
516
+ }
517
+ )
518
+ end
472
519
 
473
- group from: :g10_smart_fine_grained_scopes,
474
- required_suite_options: G10Options::SMART_2_REQUIREMENT.merge(G10Options::US_CORE_6_REQUIREMENT),
475
- exclude_optional: true
476
- group from: :g10_smart_fine_grained_scopes_stu2_2, # rubocop:disable Naming/VariableNumber
477
- required_suite_options: G10Options::SMART_2_2_REQUIREMENT.merge(G10Options::US_CORE_6_REQUIREMENT),
478
- exclude_optional: true
479
-
480
- group from: :g10_us_core_7_smart_fine_grained_scopes,
481
- required_suite_options: G10Options::SMART_2_REQUIREMENT.merge(G10Options::US_CORE_7_REQUIREMENT),
482
- exclude_optional: true
483
- group from: :g10_us_core_7_smart_fine_grained_scopes_stu2_2, # rubocop:disable Naming/VariableNumber
484
- required_suite_options: G10Options::SMART_2_2_REQUIREMENT.merge(G10Options::US_CORE_7_REQUIREMENT),
485
- exclude_optional: true
520
+ group from: :g10_us_core_7_smart_fine_grained_scopes_stu2_2, exclude_optional: true do # rubocop:disable Naming/VariableNumber
521
+ required_suite_options G10Options::SMART_2_2_REQUIREMENT.merge(G10Options::US_CORE_7_REQUIREMENT)
522
+ groups.first.config(
523
+ inputs: {
524
+ smart_auth_info: { name: :granular_scopes_1_auth_info }
525
+ },
526
+ outputs: {
527
+ smart_auth_info: { name: :granular_scopes_1_auth_info }
528
+ }
529
+ )
530
+
531
+ groups.last.config(
532
+ inputs: {
533
+ smart_auth_info: { name: :granular_scopes_2_auth_info }
534
+ },
535
+ outputs: {
536
+ smart_auth_info: { name: :granular_scopes_2_auth_info }
537
+ }
538
+ )
539
+ end
486
540
 
487
541
  group from: :g10_smart_granular_scope_selection,
488
542
  required_suite_options: G10Options::SMART_2_REQUIREMENT.merge(G10Options::US_CORE_6_REQUIREMENT)