foreman_remote_execution 12.0.7 → 13.0.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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/js_ci.yml +1 -1
  3. data/.github/workflows/ruby_ci.yml +16 -81
  4. data/.packit.yaml +8 -3
  5. data/app/assets/javascripts/foreman_remote_execution/locale/de/foreman_remote_execution.js +23 -14
  6. data/app/assets/javascripts/foreman_remote_execution/locale/en/foreman_remote_execution.js +22 -4
  7. data/app/assets/javascripts/foreman_remote_execution/locale/en_GB/foreman_remote_execution.js +23 -14
  8. data/app/assets/javascripts/foreman_remote_execution/locale/es/foreman_remote_execution.js +23 -14
  9. data/app/assets/javascripts/foreman_remote_execution/locale/fr/foreman_remote_execution.js +23 -14
  10. data/app/assets/javascripts/foreman_remote_execution/locale/ja/foreman_remote_execution.js +23 -14
  11. data/app/assets/javascripts/foreman_remote_execution/locale/ka/foreman_remote_execution.js +23 -14
  12. data/app/assets/javascripts/foreman_remote_execution/locale/ko/foreman_remote_execution.js +23 -14
  13. data/app/assets/javascripts/foreman_remote_execution/locale/pt_BR/foreman_remote_execution.js +23 -14
  14. data/app/assets/javascripts/foreman_remote_execution/locale/ru/foreman_remote_execution.js +23 -14
  15. data/app/assets/javascripts/foreman_remote_execution/locale/zh_CN/foreman_remote_execution.js +23 -14
  16. data/app/assets/javascripts/foreman_remote_execution/locale/zh_TW/foreman_remote_execution.js +23 -14
  17. data/app/controllers/ui_job_wizard_controller.rb +1 -1
  18. data/app/helpers/job_invocations_helper.rb +1 -1
  19. data/app/helpers/remote_execution_helper.rb +2 -2
  20. data/app/lib/actions/remote_execution/proxy_action.rb +1 -1
  21. data/app/lib/actions/remote_execution/run_host_job.rb +9 -3
  22. data/app/lib/actions/remote_execution/run_hosts_job.rb +0 -1
  23. data/app/models/host_status/execution_status.rb +2 -2
  24. data/app/views/job_invocations/_preview_hosts_list.html.erb +1 -1
  25. data/app/views/job_invocations/show.html.erb +12 -5
  26. data/app/views/job_invocations/show.js.erb +8 -1
  27. data/app/views/job_invocations/welcome.html.erb +1 -1
  28. data/app/views/template_invocations/_refresh.js.erb +10 -4
  29. data/app/views/template_invocations/show.html.erb +2 -2
  30. data/app/views/templates/script/convert2rhel_analyze.erb +12 -1
  31. data/lib/foreman_remote_execution/engine.rb +1 -1
  32. data/lib/foreman_remote_execution/version.rb +1 -1
  33. data/locale/de/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  34. data/locale/de/foreman_remote_execution.po +24 -6
  35. data/locale/en/foreman_remote_execution.po +24 -6
  36. data/locale/en_GB/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  37. data/locale/en_GB/foreman_remote_execution.po +24 -6
  38. data/locale/es/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  39. data/locale/es/foreman_remote_execution.po +24 -6
  40. data/locale/foreman_remote_execution.pot +170 -142
  41. data/locale/fr/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  42. data/locale/fr/foreman_remote_execution.po +24 -6
  43. data/locale/ja/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  44. data/locale/ja/foreman_remote_execution.po +24 -6
  45. data/locale/ka/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  46. data/locale/ka/foreman_remote_execution.po +24 -6
  47. data/locale/ko/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  48. data/locale/ko/foreman_remote_execution.po +24 -6
  49. data/locale/pt_BR/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  50. data/locale/pt_BR/foreman_remote_execution.po +24 -6
  51. data/locale/ru/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  52. data/locale/ru/foreman_remote_execution.po +24 -6
  53. data/locale/zh_CN/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  54. data/locale/zh_CN/foreman_remote_execution.po +24 -6
  55. data/locale/zh_TW/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  56. data/locale/zh_TW/foreman_remote_execution.po +24 -6
  57. data/package.json +1 -5
  58. data/test/functional/api/v2/job_invocations_controller_test.rb +7 -7
  59. data/test/functional/api/v2/template_invocations_controller_test.rb +3 -3
  60. data/test/helpers/remote_execution_helper_test.rb +8 -7
  61. data/test/unit/actions/run_host_job_test.rb +1 -1
  62. data/test/unit/actions/run_hosts_job_test.rb +11 -11
  63. data/test/unit/concerns/foreman_tasks_cleaner_extensions_test.rb +5 -5
  64. data/test/unit/concerns/host_extensions_test.rb +34 -34
  65. data/test/unit/concerns/nic_extensions_test.rb +1 -1
  66. data/test/unit/execution_task_status_mapper_test.rb +10 -10
  67. data/test/unit/input_template_renderer_test.rb +53 -49
  68. data/test/unit/job_invocation_composer_test.rb +78 -78
  69. data/test/unit/job_invocation_test.rb +25 -25
  70. data/test/unit/job_template_effective_user_test.rb +3 -3
  71. data/test/unit/job_template_test.rb +28 -28
  72. data/test/unit/remote_execution_feature_test.rb +14 -14
  73. data/test/unit/remote_execution_provider_test.rb +39 -39
  74. data/test/unit/renderer_scope_input_test.rb +6 -6
  75. data/test/unit/targeting_test.rb +32 -32
  76. data/webpack/JobWizard/JobWizardConstants.js +4 -0
  77. data/webpack/JobWizard/JobWizardSelectors.js +31 -3
  78. data/webpack/JobWizard/PermissionDenied.js +64 -0
  79. data/webpack/JobWizard/__tests__/fixtures.js +3 -3
  80. data/webpack/JobWizard/autofill.js +8 -4
  81. data/webpack/JobWizard/index.js +40 -1
  82. data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js +26 -5
  83. data/webpack/JobWizard/steps/HostsAndInputs/HostPreviewModal.js +3 -3
  84. data/webpack/JobWizard/steps/HostsAndInputs/SelectGQL.js +1 -0
  85. data/webpack/JobWizard/steps/HostsAndInputs/SelectedChips.js +13 -6
  86. data/webpack/JobWizard/steps/HostsAndInputs/hosts.gql +1 -0
  87. data/webpack/JobWizard/steps/HostsAndInputs/index.js +21 -1
  88. data/webpack/JobWizard/steps/ReviewDetails/index.js +3 -2
  89. data/webpack/JobWizard/steps/form/SearchSelect.js +3 -1
  90. data/webpack/JobWizard/steps/form/__tests__/SelectSearch.test.js +2 -0
  91. metadata +7 -6
@@ -30,7 +30,7 @@ class JobTemplateTest < ActiveSupport::TestCase
30
30
  job_template.foreign_input_sets << FactoryBot.build(:foreign_input_set, :target_template => template_with_inputs)
31
31
  job_template.foreign_input_sets << FactoryBot.build(:foreign_input_set, :target_template => template_with_inputs)
32
32
  assert_not job_template.valid?
33
- _(job_template.errors.full_messages.first).must_include 'Duplicated inputs detected: ["command"]'
33
+ assert_includes job_template.errors.full_messages.first, 'Duplicated inputs detected: ["command"]'
34
34
  end
35
35
  end
36
36
 
@@ -40,21 +40,21 @@ class JobTemplateTest < ActiveSupport::TestCase
40
40
  let(:minimal_template) { FactoryBot.build(:job_template) }
41
41
 
42
42
  it 'uses the description_format attribute if set' do
43
- _(template_with_description.generate_description_format).must_equal template_with_description.description_format
43
+ assert_equal template_with_description.generate_description_format, template_with_description.description_format
44
44
  end
45
45
 
46
46
  it 'uses the job name as description_format if not set or blank and has no inputs' do
47
- _(minimal_template.generate_description_format).must_equal '%{template_name}'
47
+ assert_equal minimal_template.generate_description_format, '%{template_name}'
48
48
  minimal_template.description_format = ''
49
- _(minimal_template.generate_description_format).must_equal '%{template_name}'
49
+ assert_equal minimal_template.generate_description_format, '%{template_name}'
50
50
  end
51
51
 
52
52
  it 'generates the description_format if not set or blank and has inputs' do
53
53
  input_name = template.template_inputs.first.name
54
54
  expected_result = %(%{template_name} with inputs #{input_name}="%{#{input_name}}")
55
- _(template.generate_description_format).must_equal expected_result
55
+ assert_equal template.generate_description_format, expected_result
56
56
  template.description_format = ''
57
- _(template.generate_description_format).must_equal expected_result
57
+ assert_equal template.generate_description_format, expected_result
58
58
  end
59
59
  end
60
60
 
@@ -64,10 +64,10 @@ class JobTemplateTest < ActiveSupport::TestCase
64
64
  describe '#dup' do
65
65
  it 'duplicates also template inputs' do
66
66
  duplicate = job_template.dup
67
- _(duplicate).wont_equal job_template
68
- _(duplicate.template_inputs).wont_be_empty
69
- _(duplicate.template_inputs.first).wont_equal job_template.template_inputs.first
70
- _(duplicate.template_inputs.first.name).must_equal job_template.template_inputs.first.name
67
+ refute_equal duplicate, job_template
68
+ refute_empty duplicate.template_inputs
69
+ refute_equal duplicate.template_inputs.first, job_template.template_inputs.first
70
+ assert_equal duplicate.template_inputs.first.name, job_template.template_inputs.first.name
71
71
  end
72
72
  end
73
73
  end
@@ -120,30 +120,30 @@ class JobTemplateTest < ActiveSupport::TestCase
120
120
  end
121
121
 
122
122
  it 'sets the name' do
123
- _(template.name).must_equal 'Service Restart'
123
+ assert_equal template.name, 'Service Restart'
124
124
  end
125
125
 
126
126
  it 'has a template' do
127
- _(template.template.squish).must_equal 'service <%= input("service_name") %> restart <%# test comment %>'
127
+ assert_equal template.template.squish, 'service <%= input("service_name") %> restart <%# test comment %>'
128
128
  end
129
129
 
130
130
  it 'imports inputs' do
131
- _(template.template_inputs.first.name).must_equal 'service_name'
131
+ assert_equal template.template_inputs.first.name, 'service_name'
132
132
  end
133
133
 
134
134
  it 'imports input sets' do
135
- _(template_with_input_sets.foreign_input_sets.first.target_template).must_equal template
136
- _(template_with_input_sets.template_inputs_with_foreign.map(&:name)).must_equal ['service_name']
135
+ assert_equal template_with_input_sets.foreign_input_sets.first.target_template, template
136
+ assert_equal template_with_input_sets.template_inputs_with_foreign.map(&:name), ['service_name']
137
137
  end
138
138
 
139
139
  it 'imports feature' do
140
140
  template # let is lazy
141
141
  remote_execution_feature.reload
142
- _(remote_execution_feature.job_template).must_equal template
142
+ assert_equal remote_execution_feature.job_template, template
143
143
  end
144
144
 
145
145
  it 'sets additional options' do
146
- _(template.default).must_equal true
146
+ assert_equal template.default, true
147
147
  end
148
148
  end
149
149
 
@@ -226,16 +226,16 @@ class JobTemplateTest < ActiveSupport::TestCase
226
226
 
227
227
  it 'syncs inputs' do
228
228
  hostname = synced_template.template_inputs.find { |input| input.name == 'hostname' }
229
- _(hostname.options).must_equal 'www.redhat.com'
229
+ assert_equal hostname.options, 'www.redhat.com'
230
230
  end
231
231
 
232
232
  it 'syncs content' do
233
- _(synced_template.template).must_match(/ping -c <%= input\('count'\) %> <%= input\('hostname'\) %>/m)
233
+ assert_match(/ping -c <%= input\('count'\) %> <%= input\('hostname'\) %>/m, synced_template.template)
234
234
  end
235
235
 
236
236
  it 'syncs input sets' do
237
- _(synced_template.foreign_input_sets.first.target_template).must_equal included
238
- _(synced_template.template_inputs_with_foreign.map(&:name)).must_equal ['hostname', 'count']
237
+ assert_equal synced_template.foreign_input_sets.first.target_template, included
238
+ assert_equal synced_template.template_inputs_with_foreign.map(&:name), ['hostname', 'count']
239
239
  end
240
240
  end
241
241
 
@@ -249,15 +249,15 @@ class JobTemplateTest < ActiveSupport::TestCase
249
249
  end
250
250
 
251
251
  it 'exports name' do
252
- _(erb).must_match(/^name: #{exportable_template.name}$/)
252
+ assert_match(/^name: #{exportable_template.name}$/, erb)
253
253
  end
254
254
 
255
255
  it 'includes template inputs' do
256
- _(erb).must_match(/^template_inputs:$/)
256
+ assert_match(/^template_inputs:$/, erb)
257
257
  end
258
258
 
259
259
  it 'includes template contents' do
260
- _(erb).must_include exportable_template.template
260
+ assert_includes erb, exportable_template.template
261
261
  end
262
262
 
263
263
  it 'is importable' do
@@ -266,8 +266,8 @@ class JobTemplateTest < ActiveSupport::TestCase
266
266
  exportable_template.update(:name => "#{old_name}_renamed")
267
267
 
268
268
  imported = JobTemplate.import_raw!(erb)
269
- _(imported.name).must_equal old_name
270
- _(imported.template_inputs.first.to_export).must_equal exportable_template.template_inputs.first.to_export
269
+ assert_equal imported.name, old_name
270
+ assert_equal imported.template_inputs.first.to_export, exportable_template.template_inputs.first.to_export
271
271
  end
272
272
 
273
273
  it 'has taxonomies in metadata' do
@@ -282,7 +282,7 @@ class JobTemplateTest < ActiveSupport::TestCase
282
282
 
283
283
  describe 'job template deletion' do
284
284
  it 'succeeds' do
285
- _(job_template.pattern_template_invocations).wont_be_empty
285
+ refute_empty job_template.pattern_template_invocations
286
286
  assert job_template.destroy
287
287
  end
288
288
  end
@@ -310,7 +310,7 @@ class JobTemplateTest < ActiveSupport::TestCase
310
310
  template_invocation.host,
311
311
  template_invocation
312
312
  result = renderer.render
313
- _(result).must_equal "<wrap>#{inner.template}</wrap>"
313
+ assert_equal result, "<wrap>#{inner.template}</wrap>"
314
314
  end
315
315
  end
316
316
  end
@@ -31,16 +31,16 @@ class RemoteExecutionFeatureTest < ActiveSupport::TestCase
31
31
  it 'prepares composer for given feature based on the mapping' do
32
32
  composer = JobInvocationComposer.for_feature(:katello_install_package, host, :package => 'zsh')
33
33
  assert composer.valid?
34
- _(composer.pattern_template_invocations.size).must_equal 1
34
+ assert_equal 1, composer.pattern_template_invocations.size
35
35
  template_invocation = composer.pattern_template_invocations.first
36
- _(template_invocation.template).must_equal package_template
37
- _(template_invocation.input_values.size).must_equal 1
36
+ assert_equal package_template, template_invocation.template
37
+ assert_equal 1, template_invocation.input_values.size
38
38
 
39
39
  input_value = template_invocation.input_values.first
40
- _(input_value.value).must_equal 'zsh'
41
- _(input_value.template_input.name).must_equal 'package'
40
+ assert_equal 'zsh', input_value.value
41
+ assert_equal 'package', input_value.template_input.name
42
42
 
43
- _(composer.targeting.search_query).must_equal "name ^ (#{host.name})"
43
+ assert_equal "name ^ (#{host.name})", composer.targeting.search_query
44
44
  end
45
45
 
46
46
  it 'updates the feature when attributes change' do
@@ -48,24 +48,24 @@ class RemoteExecutionFeatureTest < ActiveSupport::TestCase
48
48
  :description => 'New description',
49
49
  :provided_inputs => ['package', 'force'])
50
50
  updated_feature.reload
51
- _(updated_feature.id).must_equal(install_feature.id)
52
- _(updated_feature.description).must_equal 'New description'
53
- _(updated_feature.provided_input_names).must_equal ['package', 'force']
51
+ assert_equal install_feature.id, updated_feature.id
52
+ assert_equal 'New description', updated_feature.description
53
+ assert_equal ['package', 'force'], updated_feature.provided_input_names
54
54
  end
55
55
  end
56
56
 
57
57
  describe '.register' do
58
58
  it "creates a feature if it's missing" do
59
59
  feature = RemoteExecutionFeature.register('new_feature_that_does_not_exist', 'name')
60
- _(feature).must_be :persisted?
61
- _(feature.label).must_equal 'new_feature_that_does_not_exist'
62
- _(feature.name).must_equal 'name'
60
+ assert_predicate feature, :persisted?
61
+ assert_equal 'new_feature_that_does_not_exist', feature.label
62
+ assert_equal 'name', feature.name
63
63
  assert_not feature.host_action_button
64
64
  end
65
65
 
66
66
  it 'creates a feature with host action flag' do
67
67
  feature = RemoteExecutionFeature.register('new_feature_that_does_not_exist_button', 'name', :host_action_button => true)
68
- _(feature).must_be :persisted?
68
+ assert_predicate feature, :persisted?
69
69
  assert feature.host_action_button
70
70
  end
71
71
 
@@ -78,7 +78,7 @@ class RemoteExecutionFeatureTest < ActiveSupport::TestCase
78
78
  it 'updates a feature if it exists' do
79
79
  existing = FactoryBot.create(:remote_execution_feature, :name => 'existing_feature_withou_action_button')
80
80
  feature = RemoteExecutionFeature.register(existing.label, existing.name, :host_action_button => true)
81
- _(feature).must_be :persisted?
81
+ assert_predicate feature, :persisted?
82
82
  existing.reload
83
83
  assert existing.host_action_button
84
84
  end
@@ -3,39 +3,39 @@ require 'test_plugin_helper'
3
3
  class RemoteExecutionProviderTest < ActiveSupport::TestCase
4
4
  describe '.providers' do
5
5
  let(:providers) { RemoteExecutionProvider.providers }
6
- it { _(providers).must_be_kind_of HashWithIndifferentAccess }
6
+ it { assert_kind_of HashWithIndifferentAccess, providers }
7
7
  it 'makes providers accessible using symbol' do
8
- _(providers[:SSH]).must_equal SSHExecutionProvider
9
- _(providers[:script]).must_equal ScriptExecutionProvider
8
+ assert_equal SSHExecutionProvider, providers[:SSH]
9
+ assert_equal ScriptExecutionProvider, providers[:script]
10
10
  end
11
11
  it 'makes providers accessible using string' do
12
- _(providers['SSH']).must_equal SSHExecutionProvider
13
- _(providers['script']).must_equal ScriptExecutionProvider
12
+ assert_equal SSHExecutionProvider, providers['SSH']
13
+ assert_equal ScriptExecutionProvider, providers['script']
14
14
  end
15
15
  end
16
16
 
17
17
  describe '.register_provider' do
18
18
  before { RemoteExecutionProvider.providers.delete(:new) }
19
19
  let(:new_provider) { RemoteExecutionProvider.providers[:new] }
20
- it { _(new_provider).must_be_nil }
20
+ it { assert_nil new_provider }
21
21
 
22
22
  context 'registers a provider under key :new' do
23
23
  before { RemoteExecutionProvider.register(:new, String) }
24
- it { _(new_provider).must_equal String }
24
+ it { assert_equal String, new_provider }
25
25
  end
26
26
  end
27
27
 
28
28
  describe '.provider_for' do
29
29
  it 'accepts symbols' do
30
- RemoteExecutionProvider.provider_for(:SSH).must_equal SSHExecutionProvider
30
+ assert_equal SSHExecutionProvider, RemoteExecutionProvider.provider_for(:SSH)
31
31
  end
32
32
 
33
33
  it 'accepts strings' do
34
- RemoteExecutionProvider.provider_for('SSH').must_equal SSHExecutionProvider
34
+ assert_equal SSHExecutionProvider, RemoteExecutionProvider.provider_for('SSH')
35
35
  end
36
36
 
37
37
  it 'returns a default one if unknown value is provided' do
38
- RemoteExecutionProvider.provider_for('WinRM').must_equal ScriptExecutionProvider
38
+ assert_equal ScriptExecutionProvider, RemoteExecutionProvider.provider_for('WinRM')
39
39
  end
40
40
  end
41
41
 
@@ -44,15 +44,15 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
44
44
 
45
45
  it 'returns only strings' do
46
46
  provider_names.each do |name|
47
- _(name).must_be_kind_of String
47
+ assert_kind_of String, name
48
48
  end
49
49
  end
50
50
 
51
51
  context 'provider is registetered under :custom symbol' do
52
52
  before { RemoteExecutionProvider.register(:Custom, String) }
53
53
 
54
- it { _(provider_names).must_include 'SSH' }
55
- it { _(provider_names).must_include 'Custom' }
54
+ it { assert_includes provider_names, 'SSH' }
55
+ it { assert_includes provider_names, 'Custom' }
56
56
  end
57
57
  end
58
58
 
@@ -71,7 +71,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
71
71
  ::RemoteExecutionProvider.register('custom', CustomProvider)
72
72
 
73
73
  feature = CustomProvider.proxy_feature
74
- _(feature).must_equal 'custom'
74
+ assert_equal 'custom', feature
75
75
  ensure
76
76
  ::RemoteExecutionProvider = old
77
77
  end
@@ -86,8 +86,8 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
86
86
  )
87
87
 
88
88
  features = RemoteExecutionProvider.provider_proxy_features
89
- _(features).must_include 'SSH'
90
- _(features).must_include 'Script'
89
+ assert_includes features, 'SSH'
90
+ assert_includes features, 'Script'
91
91
  RemoteExecutionProvider.unstub(:providers)
92
92
  end
93
93
 
@@ -95,7 +95,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
95
95
  provider = OpenStruct.new(proxy_feature: 'Testing')
96
96
  RemoteExecutionProvider.stubs(:providers).returns(:testing => provider)
97
97
  features = RemoteExecutionProvider.provider_proxy_features
98
- _(features).must_include 'Testing'
98
+ assert_includes features, 'Testing'
99
99
  RemoteExecutionProvider.unstub(:providers)
100
100
  end
101
101
  end
@@ -125,14 +125,14 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
125
125
  describe 'effective user' do
126
126
  it 'takes the effective user from value from the template invocation' do
127
127
  template_invocation.effective_user = 'my user'
128
- _(proxy_options[:effective_user]).must_equal 'my user'
128
+ assert_equal 'my user', proxy_options[:effective_user]
129
129
  end
130
130
  end
131
131
 
132
132
  describe 'ssh user' do
133
133
  it 'uses the remote_execution_ssh_user on the host param' do
134
134
  host.host_parameters << FactoryBot.create(:host_parameter, :host => host, :name => 'remote_execution_ssh_user', :value => 'my user')
135
- _(proxy_options[:ssh_user]).must_equal 'my user'
135
+ assert_equal 'my user', proxy_options[:ssh_user]
136
136
  end
137
137
  end
138
138
 
@@ -140,8 +140,8 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
140
140
  it 'uses the remote_execution_effective_user_password on the host param' do
141
141
  host.params['remote_execution_effective_user_password'] = 'mypassword'
142
142
  host.host_parameters << FactoryBot.create(:host_parameter, :host => host, :name => 'remote_execution_effective_user_password', :value => 'mypassword')
143
- assert_not proxy_options.key?(:effective_user_password)
144
- _(secrets[:effective_user_password]).must_equal 'mypassword'
143
+ assert_nil proxy_options[:effective_user_password]
144
+ assert_equal 'mypassword', secrets[:effective_user_password]
145
145
  end
146
146
  end
147
147
 
@@ -150,15 +150,15 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
150
150
  host.params['remote_execution_effective_user_method'] = 'sudo'
151
151
  method_param = FactoryBot.create(:host_parameter, :host => host, :name => 'remote_execution_effective_user_method', :value => 'sudo')
152
152
  host.host_parameters << method_param
153
- _(proxy_options[:effective_user_method]).must_equal 'sudo'
153
+ assert_equal 'sudo', proxy_options[:effective_user_method]
154
154
  method_param.update!(:value => 'su')
155
155
  host.clear_host_parameters_cache!
156
156
  proxy_options = SSHExecutionProvider.proxy_command_options(template_invocation, host)
157
- _(proxy_options[:effective_user_method]).must_equal 'su'
157
+ assert_equal 'su', proxy_options[:effective_user_method]
158
158
  method_param.update!(:value => 'dzdo')
159
159
  host.clear_host_parameters_cache!
160
160
  proxy_options = SSHExecutionProvider.proxy_command_options(template_invocation, host)
161
- _(proxy_options[:effective_user_method]).must_equal 'dzdo'
161
+ assert_equal 'dzdo', proxy_options[:effective_user_method]
162
162
  end
163
163
  end
164
164
 
@@ -168,8 +168,8 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
168
168
  end
169
169
 
170
170
  it 'has ssh port changed in settings and check return type' do
171
- _(proxy_options[:ssh_port]).must_be_kind_of Integer
172
- _(proxy_options[:ssh_port]).must_equal 66
171
+ assert_kind_of Integer, proxy_options[:ssh_port]
172
+ assert_equal 66, proxy_options[:ssh_port]
173
173
  end
174
174
  end
175
175
 
@@ -178,8 +178,8 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
178
178
  host.params['remote_execution_ssh_port'] = '30'
179
179
  host.host_parameters << FactoryBot.build(:host_parameter, :name => 'remote_execution_ssh_port', :value => '30')
180
180
  host.clear_host_parameters_cache!
181
- _(proxy_options[:ssh_port]).must_be_kind_of Integer
182
- _(proxy_options[:ssh_port]).must_equal 30
181
+ assert_kind_of Integer, proxy_options[:ssh_port]
182
+ assert_equal 30, proxy_options[:ssh_port]
183
183
  end
184
184
  end
185
185
 
@@ -189,7 +189,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
189
189
  end
190
190
 
191
191
  it 'updates the value via settings' do
192
- _(proxy_options[:cleanup_working_dirs]).must_equal false
192
+ refute proxy_options[:cleanup_working_dirs]
193
193
  end
194
194
  end
195
195
 
@@ -198,7 +198,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
198
198
  host.params['remote_execution_cleanup_working_dirs'] = 'false'
199
199
  host.host_parameters << FactoryBot.build(:host_parameter, :name => 'remote_execution_cleanup_working_dirs', :value => 'false')
200
200
  host.clear_host_parameters_cache!
201
- _(proxy_options[:cleanup_working_dirs]).must_equal false
201
+ refute proxy_options[:cleanup_working_dirs]
202
202
  end
203
203
  end
204
204
 
@@ -219,7 +219,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
219
219
 
220
220
  it 'gets fqdn from flagged interfaces if not preferring ips' do
221
221
  # falling to primary interface
222
- SSHExecutionProvider.find_ip_or_hostname(host).must_equal 'somehost.somedomain.org'
222
+ assert_equal 'somehost.somedomain.org', SSHExecutionProvider.find_ip_or_hostname(host)
223
223
 
224
224
  # execution wins if present
225
225
  execution_interface = FactoryBot.build(:nic_managed,
@@ -228,13 +228,13 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
228
228
  host.primary_interface.update(:execution => false)
229
229
  host.interfaces.each(&:save)
230
230
  host.reload
231
- SSHExecutionProvider.find_ip_or_hostname(host).must_equal execution_interface.fqdn
231
+ assert_equal execution_interface.fqdn, SSHExecutionProvider.find_ip_or_hostname(host)
232
232
  end
233
233
 
234
234
  it 'gets ip from flagged interfaces' do
235
235
  host.host_params['remote_execution_connect_by_ip'] = true
236
236
  # no ip address set on relevant interface - fallback to fqdn
237
- SSHExecutionProvider.find_ip_or_hostname(host).must_equal 'somehost.somedomain.org'
237
+ assert_equal 'somehost.somedomain.org', SSHExecutionProvider.find_ip_or_hostname(host)
238
238
 
239
239
  # provision interface with ip while primary without
240
240
  provision_interface = FactoryBot.build(:nic_managed,
@@ -243,12 +243,12 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
243
243
  host.primary_interface.update(:provision => false)
244
244
  host.interfaces.each(&:save)
245
245
  host.reload
246
- SSHExecutionProvider.find_ip_or_hostname(host).must_equal provision_interface.ip
246
+ assert_equal provision_interface.ip, SSHExecutionProvider.find_ip_or_hostname(host)
247
247
 
248
248
  # both primary and provision interface have IPs: the primary wins
249
249
  host.primary_interface.update(:ip => '10.0.0.2', :execution => false)
250
250
  host.reload
251
- SSHExecutionProvider.find_ip_or_hostname(host).must_equal host.primary_interface.ip
251
+ assert_equal host.primary_interface.ip, SSHExecutionProvider.find_ip_or_hostname(host)
252
252
 
253
253
  # there is an execution interface with IP: it wins
254
254
  execution_interface = FactoryBot.build(:nic_managed,
@@ -257,7 +257,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
257
257
  host.primary_interface.update(:execution => false)
258
258
  host.interfaces.each(&:save)
259
259
  host.reload
260
- SSHExecutionProvider.find_ip_or_hostname(host).must_equal execution_interface.ip
260
+ assert_equal execution_interface.ip, SSHExecutionProvider.find_ip_or_hostname(host)
261
261
 
262
262
  # there is an execution interface with both IPv6 and IPv4: IPv4 is being preferred over IPv6 by default
263
263
  execution_interface = FactoryBot.build(:nic_managed,
@@ -265,7 +265,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
265
265
  host.interfaces = [execution_interface]
266
266
  host.interfaces.each(&:save)
267
267
  host.reload
268
- SSHExecutionProvider.find_ip_or_hostname(host).must_equal execution_interface.ip
268
+ assert_equal execution_interface.ip, SSHExecutionProvider.find_ip_or_hostname(host)
269
269
  end
270
270
 
271
271
  it 'gets ipv6 from flagged interfaces with IPv6 preference' do
@@ -278,7 +278,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
278
278
  host.interfaces = [execution_interface]
279
279
  host.interfaces.each(&:save)
280
280
  host.reload
281
- SSHExecutionProvider.find_ip_or_hostname(host).must_equal execution_interface.ip6
281
+ assert_equal execution_interface.ip6, SSHExecutionProvider.find_ip_or_hostname(host)
282
282
  end
283
283
 
284
284
  it 'gets ipv6 from flagged interfaces with IPv4 preference but without IPv4 address' do
@@ -291,7 +291,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
291
291
  host.interfaces = [execution_interface]
292
292
  host.interfaces.each(&:save)
293
293
  host.reload
294
- SSHExecutionProvider.find_ip_or_hostname(host).must_equal execution_interface.ip6
294
+ assert_equal execution_interface.ip6, SSHExecutionProvider.find_ip_or_hostname(host)
295
295
  end
296
296
  end
297
297
  end
@@ -13,15 +13,15 @@ class RendererScopeInputTest < ActiveSupport::TestCase
13
13
  it 'caches the value under given key' do
14
14
  i = 1
15
15
  result = input.cached('some_key') { i }
16
- _(result).must_equal 1
16
+ assert_equal 1, result
17
17
 
18
18
  i += 1
19
19
  result = input.cached('some_key') { i }
20
- _(result).must_equal 1
20
+ assert_equal 1, result
21
21
 
22
22
  i += 1
23
23
  result = input.cached('different_key') { i }
24
- _(result).must_equal 3
24
+ assert_equal 3, result
25
25
  end
26
26
  end
27
27
 
@@ -35,15 +35,15 @@ class RendererScopeInputTest < ActiveSupport::TestCase
35
35
  it 'does not cache the value' do
36
36
  i = 1
37
37
  result = input.cached('some_key') { i }
38
- _(result).must_equal 1
38
+ assert_equal 1, result
39
39
 
40
40
  i += 1
41
41
  result = input.cached('some_key') { i }
42
- _(result).must_equal 2
42
+ assert_equal 2, result
43
43
 
44
44
  i += 1
45
45
  result = input.cached('different_key') { i }
46
- _(result).must_equal 3
46
+ assert_equal 3, result
47
47
  end
48
48
  end
49
49
  end
@@ -51,7 +51,7 @@ class TargetingTest < ActiveSupport::TestCase
51
51
  targeting.resolve_hosts!
52
52
  end
53
53
 
54
- it { _(targeting.hosts).must_include(host) }
54
+ it { assert_includes targeting.hosts, host }
55
55
  end
56
56
 
57
57
  context 'can delete a user' do
@@ -63,7 +63,7 @@ class TargetingTest < ActiveSupport::TestCase
63
63
 
64
64
  it { assert_nil targeting.reload.user }
65
65
  it do
66
- -> { targeting.resolve_hosts! }.must_raise(Foreman::Exception)
66
+ assert_raises(Foreman::Exception) { targeting.resolve_hosts! }
67
67
  end
68
68
  end
69
69
 
@@ -74,7 +74,7 @@ class TargetingTest < ActiveSupport::TestCase
74
74
  host.destroy
75
75
  end
76
76
 
77
- it { _(targeting.reload.hosts).must_be_empty }
77
+ it { assert_empty targeting.reload.hosts }
78
78
  end
79
79
 
80
80
  describe '#resolve_hosts!' do
@@ -100,9 +100,9 @@ class TargetingTest < ActiveSupport::TestCase
100
100
  targeting.user = User.current
101
101
  targeting.resolve_hosts!
102
102
 
103
- targeting.hosts.must_include host
104
- targeting.hosts.must_include second_host
105
- targeting.hosts.must_include infra_host
103
+ assert_includes targeting.hosts, host
104
+ assert_includes targeting.hosts, second_host
105
+ assert_includes targeting.hosts, infra_host
106
106
  end
107
107
  end
108
108
 
@@ -115,9 +115,9 @@ class TargetingTest < ActiveSupport::TestCase
115
115
  targeting.user = User.current
116
116
  targeting.resolve_hosts!
117
117
 
118
- targeting.hosts.must_include host
119
- targeting.hosts.must_include second_host
120
- targeting.hosts.wont_include infra_host
118
+ assert_includes targeting.hosts, host
119
+ assert_includes targeting.hosts, second_host
120
+ refute_includes targeting.hosts, infra_host
121
121
  end
122
122
  end
123
123
  end
@@ -136,14 +136,14 @@ class TargetingTest < ActiveSupport::TestCase
136
136
  let(:query) { Targeting.build_query_from_hosts([ host.id, second_host.id, infra_host.id ]) }
137
137
 
138
138
  it 'builds query using host names joining inside ^' do
139
- _(query).must_include host.name
140
- _(query).must_include second_host.name
141
- _(query).must_include infra_host.name
142
- _(query).must_include 'name ^'
143
-
144
- Host.search_for(query).must_include host
145
- Host.search_for(query).must_include second_host
146
- Host.search_for(query).must_include infra_host
139
+ assert_includes query, host.name
140
+ assert_includes query, second_host.name
141
+ assert_includes query, infra_host.name
142
+ assert_includes query, 'name ^'
143
+
144
+ assert_includes Host.search_for(query), host
145
+ assert_includes Host.search_for(query), second_host
146
+ assert_includes Host.search_for(query), infra_host
147
147
  end
148
148
  end
149
149
 
@@ -151,10 +151,10 @@ class TargetingTest < ActiveSupport::TestCase
151
151
  let(:query) { Targeting.build_query_from_hosts([ host.id ]) }
152
152
 
153
153
  it 'builds query using host name' do
154
- _(query).must_equal "name ^ (#{host.name})"
155
- Host.search_for(query).must_include host
156
- Host.search_for(query).wont_include second_host
157
- Host.search_for(query).wont_include infra_host
154
+ assert_equal "name ^ (#{host.name})", query
155
+ assert_includes Host.search_for(query), host
156
+ refute_includes Host.search_for(query), second_host
157
+ refute_includes Host.search_for(query), infra_host
158
158
  end
159
159
  end
160
160
 
@@ -162,9 +162,9 @@ class TargetingTest < ActiveSupport::TestCase
162
162
  let(:query) { Targeting.build_query_from_hosts([]) }
163
163
 
164
164
  it 'builds query to find all hosts' do
165
- Host.search_for(query).must_include host
166
- Host.search_for(query).must_include second_host
167
- Host.search_for(query).must_include infra_host
165
+ assert_includes Host.search_for(query), host
166
+ assert_includes Host.search_for(query), second_host
167
+ assert_includes Host.search_for(query), infra_host
168
168
  end
169
169
  end
170
170
 
@@ -173,14 +173,14 @@ class TargetingTest < ActiveSupport::TestCase
173
173
 
174
174
  it 'ignores the infrastructure host' do
175
175
  query = Targeting.build_query_from_hosts([host.id, second_host.id, infra_host.id])
176
- _(query).must_include host.name
177
- _(query).must_include second_host.name
178
- _(query).wont_include infra_host.name
179
- _(query).must_include 'name ^'
180
-
181
- Host.search_for(query).must_include host
182
- Host.search_for(query).must_include second_host
183
- Host.search_for(query).wont_include infra_host
176
+ assert_includes query, host.name
177
+ assert_includes query, second_host.name
178
+ refute_includes query, infra_host.name
179
+ assert_includes query, 'name ^'
180
+
181
+ assert_includes Host.search_for(query), host
182
+ assert_includes Host.search_for(query), second_host
183
+ refute_includes Host.search_for(query), infra_host
184
184
  end
185
185
  end
186
186
  end
@@ -5,6 +5,10 @@ export const JOB_TEMPLATES = 'JOB_TEMPLATES';
5
5
  export const JOB_CATEGORIES = 'JOB_CATEGORIES';
6
6
  export const JOB_TEMPLATE = 'JOB_TEMPLATE';
7
7
  export const JOB_INVOCATION = 'JOB_INVOCATION';
8
+ export const CURRENT_PERMISSIONS = 'CURRENT_PERMISSIONS';
9
+ export const currentPermissionsUrl = foremanUrl(
10
+ '/api/v2/permissions/current_permissions'
11
+ );
8
12
  export const templatesUrl = foremanUrl('/api/v2/job_templates');
9
13
 
10
14
  export const repeatTypes = {