foreman-tasks 2.0.3 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/js_tests.yml +27 -0
  3. data/.github/workflows/ruby_tests.yml +74 -0
  4. data/.rubocop.yml +12 -4
  5. data/.rubocop_todo.yml +32 -25
  6. data/Gemfile +5 -0
  7. data/app/controllers/foreman_tasks/api/tasks_controller.rb +31 -58
  8. data/app/controllers/foreman_tasks/concerns/parameters/triggering.rb +1 -1
  9. data/app/controllers/foreman_tasks/recurring_logics_controller.rb +7 -0
  10. data/app/helpers/foreman_tasks/foreman_tasks_helper.rb +3 -3
  11. data/app/models/foreman_tasks/recurring_logic.rb +4 -4
  12. data/app/models/foreman_tasks/task.rb +11 -0
  13. data/app/models/foreman_tasks/task/dynflow_task.rb +27 -33
  14. data/app/models/foreman_tasks/task/status_explicator.rb +1 -1
  15. data/app/models/foreman_tasks/triggering.rb +1 -1
  16. data/app/models/setting/foreman_tasks.rb +1 -1
  17. data/app/views/foreman_tasks/api/tasks/index.json.rabl +2 -0
  18. data/app/views/foreman_tasks/recurring_logics/index.html.erb +3 -1
  19. data/config/routes.rb +2 -1
  20. data/db/migrate/20200517215015_rename_bookmarks_controller.rb +2 -2
  21. data/db/seeds.d/30-notification_blueprints.rb +7 -7
  22. data/db/seeds.d/61-foreman_tasks_bookmarks.rb +1 -1
  23. data/lib/foreman_tasks/cleaner.rb +4 -6
  24. data/lib/foreman_tasks/dynflow/configuration.rb +1 -1
  25. data/lib/foreman_tasks/dynflow/persistence.rb +4 -6
  26. data/lib/foreman_tasks/engine.rb +2 -2
  27. data/lib/foreman_tasks/version.rb +1 -1
  28. data/package.json +0 -1
  29. data/test/controllers/api/recurring_logics_controller_test.rb +1 -1
  30. data/test/controllers/api/tasks_controller_test.rb +7 -7
  31. data/test/controllers/tasks_controller_test.rb +6 -6
  32. data/test/core/unit/runner_test.rb +20 -20
  33. data/test/core/unit/task_launcher_test.rb +8 -8
  34. data/test/helpers/foreman_tasks/foreman_tasks_helper_test.rb +7 -7
  35. data/test/helpers/foreman_tasks/tasks_helper_test.rb +3 -3
  36. data/test/lib/actions/middleware/keep_current_request_id_test.rb +3 -3
  37. data/test/support/history_tasks_builder.rb +1 -1
  38. data/test/tasks/generate_task_actions_test.rb +1 -1
  39. data/test/unit/actions/action_with_sub_plans_test.rb +2 -2
  40. data/test/unit/actions/bulk_action_test.rb +6 -6
  41. data/test/unit/actions/proxy_action_test.rb +20 -20
  42. data/test/unit/actions/recurring_action_test.rb +30 -32
  43. data/test/unit/cleaner_test.rb +24 -24
  44. data/test/unit/dashboard_table_filter_test.rb +5 -5
  45. data/test/unit/otp_manager_test.rb +2 -2
  46. data/test/unit/proxy_selector_test.rb +9 -9
  47. data/test/unit/recurring_logic_test.rb +32 -38
  48. data/test/unit/remote_task_test.rb +2 -2
  49. data/test/unit/task_groups_test.rb +4 -4
  50. data/test/unit/task_test.rb +18 -18
  51. data/test/unit/triggering_test.rb +8 -8
  52. data/test/unit/troubleshooting_help_generator_test.rb +6 -6
  53. data/test/unit/ui_notifications_test.rb +11 -11
  54. data/webpack/ForemanTasks/Components/TaskDetails/Components/RunningSteps.js +3 -3
  55. data/webpack/ForemanTasks/Components/TaskDetails/Components/Task.js +8 -157
  56. data/webpack/ForemanTasks/Components/TaskDetails/Components/TaskButtons.js +168 -0
  57. data/webpack/ForemanTasks/Components/TaskDetails/Components/TaskInfo.js +6 -7
  58. data/webpack/ForemanTasks/Components/TaskDetails/Components/TaskSkeleton.js +48 -0
  59. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/RunningSteps.test.js +1 -1
  60. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Task.test.js +12 -70
  61. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/TaskButtons.test.js +95 -0
  62. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/Task.test.js.snap +78 -225
  63. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/TaskButtons.test.js.snap +212 -0
  64. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/TaskInfo.test.js.snap +8 -4
  65. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetails.js +87 -70
  66. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsActions.js +48 -125
  67. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsConstants.js +3 -16
  68. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsSelectors.js +55 -29
  69. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetails.fixtures.js +2 -2
  70. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetails.test.js +6 -0
  71. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetailsActions.test.js +2 -18
  72. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/TaskDetails.test.js.snap +77 -27
  73. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/TaskDetailsActions.test.js.snap +14 -101
  74. data/webpack/ForemanTasks/Components/TaskDetails/index.js +6 -3
  75. data/webpack/ForemanTasks/Components/common/urlHelpers.js +7 -0
  76. data/webpack/ForemanTasks/ForemanTasksReducers.js +0 -2
  77. data/webpack/__mocks__/foremanReact/common/helpers.js +2 -0
  78. data/webpack/__mocks__/foremanReact/redux/API/APISelectors.js +10 -0
  79. data/webpack/__mocks__/foremanReact/redux/API/index.js +10 -0
  80. data/webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware.js +5 -0
  81. metadata +17 -14
  82. data/.travis.yml +0 -7
  83. data/script/travis_run_js_tests.sh +0 -7
  84. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsReducer.js +0 -38
  85. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetailsReducer.test.js +0 -33
  86. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/TaskDetailsReducer.test.js.snap +0 -26
  87. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/integration.test.js.snap +0 -122
  88. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/integration.test.js +0 -72
  89. data/webpack/__mocks__/foremanReact/redux/API.js +0 -7
@@ -24,7 +24,7 @@ class DashboardTableFilterTest < ActiveSupport::TestCase
24
24
  let(:params) { { result: 'warning' } }
25
25
 
26
26
  it 'filters' do
27
- filtered_scope.count.must_equal @tasks_builder.distribution['stopped'][:by_result]['warning'][:total]
27
+ _(filtered_scope.count).must_equal @tasks_builder.distribution['stopped'][:by_result]['warning'][:total]
28
28
  end
29
29
  end
30
30
 
@@ -32,7 +32,7 @@ class DashboardTableFilterTest < ActiveSupport::TestCase
32
32
  let(:params) { { state: 'running' } }
33
33
 
34
34
  it 'filters' do
35
- filtered_scope.count.must_equal @tasks_builder.distribution['running'][:total]
35
+ _(filtered_scope.count).must_equal @tasks_builder.distribution['running'][:total]
36
36
  end
37
37
  end
38
38
 
@@ -44,7 +44,7 @@ class DashboardTableFilterTest < ActiveSupport::TestCase
44
44
  end
45
45
 
46
46
  it 'filters' do
47
- filtered_scope.count.must_equal @tasks_builder.distribution['running'][:recent]
47
+ _(filtered_scope.count).must_equal @tasks_builder.distribution['running'][:recent]
48
48
  end
49
49
  end
50
50
 
@@ -56,7 +56,7 @@ class DashboardTableFilterTest < ActiveSupport::TestCase
56
56
  end
57
57
 
58
58
  it 'filters' do
59
- filtered_scope.count.must_equal @tasks_builder.distribution['running'][:recent]
59
+ _(filtered_scope.count).must_equal @tasks_builder.distribution['running'][:recent]
60
60
  end
61
61
  end
62
62
 
@@ -70,7 +70,7 @@ class DashboardTableFilterTest < ActiveSupport::TestCase
70
70
  it 'filters' do
71
71
  old_tasks_count = @tasks_builder.distribution['running'][:total] -
72
72
  @tasks_builder.distribution['running'][:recent]
73
- filtered_scope.count.must_equal old_tasks_count
73
+ _(filtered_scope.count).must_equal old_tasks_count
74
74
  end
75
75
  end
76
76
  end
@@ -28,7 +28,7 @@ module ForemanTasksCore
28
28
  it 'generates OTPs using SecureRandom.hex and converts them to strings' do
29
29
  otp = 4
30
30
  SecureRandom.stubs(:hex).returns(otp)
31
- TestOtpManager.generate_otp(username).must_equal otp.to_s
31
+ _(TestOtpManager.generate_otp(username)).must_equal otp.to_s
32
32
  end
33
33
 
34
34
  it 'provides #drop_otp method that removes OTP only when correct username and password is provided' do
@@ -64,7 +64,7 @@ module ForemanTasksCore
64
64
  end
65
65
 
66
66
  it 'creates token from username and password correctly' do
67
- TestOtpManager.tokenize(username, password).must_equal base64
67
+ _(TestOtpManager.tokenize(username, password)).must_equal base64
68
68
  end
69
69
 
70
70
  it 'overwrites old OTP when generating a new one for the same username' do
@@ -18,22 +18,22 @@ describe ForemanTasks::ProxySelector do
18
18
  found << proxy_selector.select_by_jobs_count(proxies)
19
19
  end
20
20
 
21
- available.count.must_equal count
22
- available.uniq.count.must_equal count - 1
23
- proxy_selector.offline.count.must_equal 1
21
+ _(available.count).must_equal count
22
+ _(available.uniq.count).must_equal count - 1
23
+ _(proxy_selector.offline.count).must_equal 1
24
24
  end
25
25
 
26
26
  it 'returns nil for if no proxy is available' do
27
- proxy_selector.select_by_jobs_count([]).must_be_nil
27
+ _(proxy_selector.select_by_jobs_count([])).must_be_nil
28
28
  end
29
29
  end
30
30
 
31
31
  describe '#determine_proxy' do
32
32
  it 'returns :not_defined when avialable proxies returns empty hash' do
33
33
  proxy_selector.stubs(:available_proxies => [])
34
- proxy_selector.determine_proxy.must_equal :not_defined
34
+ _(proxy_selector.determine_proxy).must_equal :not_defined
35
35
  proxy_selector.stubs(:available_proxies => { :global => [] })
36
- proxy_selector.determine_proxy.must_equal :not_defined
36
+ _(proxy_selector.determine_proxy).must_equal :not_defined
37
37
  end
38
38
 
39
39
  it 'returns :not_available when proxies are set but offline' do
@@ -41,7 +41,7 @@ describe ForemanTasks::ProxySelector do
41
41
  ProxyAPI::ForemanDynflow::DynflowProxy.any_instance.expects(:tasks_count).times(count).raises
42
42
  proxy_selector.stubs(:available_proxies =>
43
43
  { :global => FactoryBot.create_list(:smart_proxy, count) })
44
- proxy_selector.determine_proxy.must_equal :not_available
44
+ _(proxy_selector.determine_proxy).must_equal :not_available
45
45
  end
46
46
 
47
47
  it 'returns first available proxy, prioritizing by strategy' do
@@ -51,9 +51,9 @@ describe ForemanTasks::ProxySelector do
51
51
  ForemanTasks::ProxySelector.any_instance.stubs(:available_proxies =>
52
52
  { :fallback => [fallback_proxy],
53
53
  :global => [global_proxy] })
54
- ForemanTasks::ProxySelector.new.determine_proxy.must_equal fallback_proxy
54
+ _(ForemanTasks::ProxySelector.new.determine_proxy).must_equal fallback_proxy
55
55
  ProxyAPI::ForemanDynflow::DynflowProxy.any_instance.expects(:tasks_count).raises.then.returns(0)
56
- ForemanTasks::ProxySelector.new.determine_proxy.must_equal global_proxy
56
+ _(ForemanTasks::ProxySelector.new.determine_proxy).must_equal global_proxy
57
57
  end
58
58
  end
59
59
  end
@@ -4,17 +4,17 @@ class RecurringLogicsTest < ActiveSupport::TestCase
4
4
  describe 'generating times' do
5
5
  it 'assembles cronline' do
6
6
  hash = {}
7
- ForemanTasks::RecurringLogic.assemble_cronline(hash).must_equal '* * * * *'
7
+ _(ForemanTasks::RecurringLogic.assemble_cronline(hash)).must_equal '* * * * *'
8
8
  hash.update :minutes => '*'
9
- ForemanTasks::RecurringLogic.assemble_cronline(hash).must_equal '* * * * *'
9
+ _(ForemanTasks::RecurringLogic.assemble_cronline(hash)).must_equal '* * * * *'
10
10
  hash.update :hours => '0,12'
11
- ForemanTasks::RecurringLogic.assemble_cronline(hash).must_equal '* 0,12 * * *'
11
+ _(ForemanTasks::RecurringLogic.assemble_cronline(hash)).must_equal '* 0,12 * * *'
12
12
  hash.update :days => '*/2'
13
- ForemanTasks::RecurringLogic.assemble_cronline(hash).must_equal '* 0,12 */2 * *'
13
+ _(ForemanTasks::RecurringLogic.assemble_cronline(hash)).must_equal '* 0,12 */2 * *'
14
14
  hash.update :months => '12'
15
- ForemanTasks::RecurringLogic.assemble_cronline(hash).must_equal '* 0,12 */2 12 *'
15
+ _(ForemanTasks::RecurringLogic.assemble_cronline(hash)).must_equal '* 0,12 */2 12 *'
16
16
  hash.update :days_of_week => '1,2,3,4,5,6,7'
17
- ForemanTasks::RecurringLogic.assemble_cronline(hash).must_equal '* 0,12 */2 12 1,2,3,4,5,6,7'
17
+ _(ForemanTasks::RecurringLogic.assemble_cronline(hash)).must_equal '* 0,12 */2 12 1,2,3,4,5,6,7'
18
18
  end
19
19
 
20
20
  it 'generates correct times' do
@@ -25,17 +25,17 @@ class RecurringLogicsTest < ActiveSupport::TestCase
25
25
  minute = 0
26
26
  reference_time = Time.utc(year, month, day, hour, minute)
27
27
  parser = ForemanTasks::RecurringLogic.new_from_cronline('* * * * *')
28
- parser.next_occurrence_time(reference_time).must_equal Time.utc(year, month, day, hour, minute)
28
+ _(parser.next_occurrence_time(reference_time)).must_equal Time.utc(year, month, day, hour, minute)
29
29
  parser = ForemanTasks::RecurringLogic.new_from_cronline('*/2 * * * *')
30
- parser.next_occurrence_time(reference_time).must_equal Time.utc(year, month, day, hour, minute)
30
+ _(parser.next_occurrence_time(reference_time)).must_equal Time.utc(year, month, day, hour, minute)
31
31
  parser = ForemanTasks::RecurringLogic.new_from_cronline('*/2 18,19 * * *')
32
- parser.next_occurrence_time(reference_time).must_equal Time.utc(year, month, day, 18)
32
+ _(parser.next_occurrence_time(reference_time)).must_equal Time.utc(year, month, day, 18)
33
33
  parser = ForemanTasks::RecurringLogic.new_from_cronline('*/2 18,19 10 * *')
34
- parser.next_occurrence_time(reference_time).must_equal Time.utc(year, month + 1, 10, 18, minute)
34
+ _(parser.next_occurrence_time(reference_time)).must_equal Time.utc(year, month + 1, 10, 18, minute)
35
35
  parser = ForemanTasks::RecurringLogic.new_from_cronline('*/2 18,19 10 11,12 *')
36
- parser.next_occurrence_time(reference_time).must_equal Time.utc(year, 11, 10, 18, 0)
36
+ _(parser.next_occurrence_time(reference_time)).must_equal Time.utc(year, 11, 10, 18, 0)
37
37
  parser = ForemanTasks::RecurringLogic.new_from_cronline('* * * * 1')
38
- parser.next_occurrence_time(reference_time).must_equal Time.utc(year, month + 1, 5)
38
+ _(parser.next_occurrence_time(reference_time)).must_equal Time.utc(year, month + 1, 5)
39
39
  end
40
40
 
41
41
  it 'creates correct cronline hash' do
@@ -48,27 +48,27 @@ class RecurringLogicsTest < ActiveSupport::TestCase
48
48
  expected_result_daily = { :minutes => minutes, :hours => hours }
49
49
  expected_result_weekly = { :minutes => minutes, :hours => hours, :days_of_week => '1,4,6' }
50
50
  expected_result_monthly = { :minutes => minutes, :hours => hours, :days => days }
51
- ForemanTasks::RecurringLogic.cronline_hash(:hourly, time_hash, days, days_of_week).must_equal expected_result_hourly
52
- ForemanTasks::RecurringLogic.cronline_hash(:daily, time_hash, days, days_of_week).must_equal expected_result_daily
53
- ForemanTasks::RecurringLogic.cronline_hash(:weekly, time_hash, days, days_of_week).must_equal expected_result_weekly
54
- ForemanTasks::RecurringLogic.cronline_hash(:monthly, time_hash, days, days_of_week).must_equal expected_result_monthly
51
+ _(ForemanTasks::RecurringLogic.cronline_hash(:hourly, time_hash, days, days_of_week)).must_equal expected_result_hourly
52
+ _(ForemanTasks::RecurringLogic.cronline_hash(:daily, time_hash, days, days_of_week)).must_equal expected_result_daily
53
+ _(ForemanTasks::RecurringLogic.cronline_hash(:weekly, time_hash, days, days_of_week)).must_equal expected_result_weekly
54
+ _(ForemanTasks::RecurringLogic.cronline_hash(:monthly, time_hash, days, days_of_week)).must_equal expected_result_monthly
55
55
  end
56
56
 
57
57
  it 'can have limited number of repeats' do
58
58
  parser = ForemanTasks::RecurringLogic.new_from_cronline('* * * * *')
59
59
  parser.state = 'active'
60
- parser.must_be :can_continue?
60
+ _(parser).must_be :can_continue?
61
61
  parser.max_iteration = 5
62
62
  parser.expects(:iteration).twice.returns(5)
63
- parser.wont_be :can_continue?
63
+ _(parser).wont_be :can_continue?
64
64
  parser.max_iteration = nil
65
65
  time = Time.utc(2015, 9, 29, 15, 0)
66
66
  parser.end_time = time
67
- parser.wont_be :can_continue?, time
67
+ _(parser).wont_be :can_continue?, time
68
68
  parser.end_time = time + 120
69
- parser.must_be :can_continue?, time
69
+ _(parser).must_be :can_continue?, time
70
70
  parser.max_iteration = 5
71
- parser.wont_be :can_continue?, time
71
+ _(parser).wont_be :can_continue?, time
72
72
  end
73
73
 
74
74
  it 'generates delay options' do
@@ -76,9 +76,9 @@ class RecurringLogicsTest < ActiveSupport::TestCase
76
76
  parser.stubs(:id).returns(1)
77
77
  reference_time = Time.utc(2015, 9, 29, 15)
78
78
  expected_hash = { :start_at => reference_time, :start_before => nil, :recurring_logic_id => parser.id, :frozen => false }
79
- parser.generate_delay_options(reference_time).must_equal expected_hash
80
- parser.generate_delay_options(reference_time, 'start_before' => reference_time + 3600)
81
- .must_equal expected_hash.merge(:start_before => reference_time + 3600)
79
+ _(parser.generate_delay_options(reference_time)).must_equal expected_hash
80
+ _(parser.generate_delay_options(reference_time, 'start_before' => reference_time + 3600))
81
+ .must_equal expected_hash.merge(:start_before => reference_time + 3600)
82
82
  end
83
83
 
84
84
  it 'can start' do
@@ -108,19 +108,19 @@ class RecurringLogicsTest < ActiveSupport::TestCase
108
108
  it 'has a task group associated to all tasks that were created as part of the recurring logic' do
109
109
  recurring_logic = ForemanTasks::RecurringLogic.new_from_cronline('* * * * *')
110
110
  recurring_logic.save
111
- recurring_logic.task_group.must_be_kind_of ForemanTasks::TaskGroups::RecurringLogicTaskGroup
111
+ _(recurring_logic.task_group).must_be_kind_of ForemanTasks::TaskGroups::RecurringLogicTaskGroup
112
112
  task = FactoryBot.build(:dynflow_task, :user_create_task)
113
113
  task.task_groups << Support::DummyTaskGroup.new
114
114
  task.save!
115
115
  recurring_logic.task_group.tasks << task
116
- recurring_logic.task_groups.must_include(*task.task_groups)
116
+ _(recurring_logic.task_groups).must_include(*task.task_groups)
117
117
  end
118
118
 
119
119
  it 'can be created from triggering' do
120
120
  triggering = FactoryBot.build(:triggering, :recurring, :end_time_limited)
121
121
  logic = ForemanTasks::RecurringLogic.new_from_triggering(triggering)
122
122
  # Mysql coerces the times a bit
123
- logic.end_time.must_be_close_to(triggering.end_time, 1.second)
123
+ _(logic.end_time).must_be_close_to(triggering.end_time, 1.second)
124
124
  end
125
125
 
126
126
  it 'cannot trigger tasks when cancelled' do
@@ -148,12 +148,6 @@ class RecurringLogicsTest < ActiveSupport::TestCase
148
148
  assert ForemanTasks.dynflow.world.persistence.load_delayed_plan(task.execution_plan.id).frozen
149
149
  end
150
150
 
151
- it 'handles if the task has been deleted' do
152
- logic.tasks.find_by(:state => 'scheduled').destroy
153
- logic.update!(:enabled => false)
154
- assert_equal 'disabled', logic.state
155
- end
156
-
157
151
  it 'properly re-enables on disable' do
158
152
  logic.update!(:enabled => false)
159
153
  logic.update!(:enabled => true)
@@ -170,24 +164,24 @@ class RecurringLogicsTest < ActiveSupport::TestCase
170
164
  let(:logic) { FactoryBot.build(:recurring_logic) }
171
165
 
172
166
  it 'is valid by default' do
173
- logic.must_be :valid?
167
+ _(logic).must_be :valid?
174
168
  end
175
169
 
176
170
  it 'is invalid when end time in past' do
177
171
  logic.end_time = (Time.zone.now - 120)
178
- logic.wont_be :valid?
172
+ _(logic).wont_be :valid?
179
173
  end
180
174
 
181
175
  it 'is invalid when iteration limit < 1' do
182
176
  logic.max_iteration = 0
183
- logic.wont_be :valid?
177
+ _(logic).wont_be :valid?
184
178
  end
185
179
 
186
180
  it 'is valid when in active state' do
187
181
  logic.end_time = (Time.zone.now - 120)
188
- logic.wont_be :valid?
182
+ _(logic).wont_be :valid?
189
183
  logic.state = 'active'
190
- logic.must_be :valid?
184
+ _(logic).must_be :valid?
191
185
  end
192
186
  end
193
187
  end
@@ -24,8 +24,8 @@ module ForemanTasks
24
24
  RemoteTask.batch_trigger('a_operation', remote_tasks)
25
25
  remote_tasks.each do |remote_task|
26
26
  remote_task.reload
27
- remote_task.state.must_equal 'triggered'
28
- remote_task.remote_task_id.must_equal((remote_task.id + 5).to_s)
27
+ _(remote_task.state).must_equal 'triggered'
28
+ _(remote_task.remote_task_id).must_equal((remote_task.id + 5).to_s)
29
29
  end
30
30
  end
31
31
 
@@ -55,18 +55,18 @@ module ForemanTasks
55
55
 
56
56
  it 'has the task group assigned' do
57
57
  task = spawn_task.call ChildAction
58
- task.task_groups.map(&:id).must_equal [1]
58
+ _(task.task_groups.map(&:id)).must_equal [1]
59
59
  end
60
60
 
61
61
  it 'tasks inherit task groups correctly' do
62
62
  children_count = 3
63
63
  task = spawn_task.call ParentAction, children_count
64
64
  # Parent task has task groups of its children
65
- task.task_groups.map(&:id).sort.must_equal [1, 2, 3, 4]
65
+ _(task.task_groups.map(&:id).sort).must_equal [1, 2, 3, 4]
66
66
  # Children have the parent's and their own, they don't have their siblings' task groups
67
- task.sub_tasks.count.must_equal children_count
67
+ _(task.sub_tasks.count).must_equal children_count
68
68
  task.sub_tasks.each do |sub_task|
69
- sub_task.task_groups.map(&:id).sort.must_equal [1, sub_task.input[:id]].sort
69
+ _(sub_task.task_groups.map(&:id).sort).must_equal [1, sub_task.input[:id]].sort
70
70
  end
71
71
  end
72
72
  end
@@ -32,8 +32,8 @@ class TasksTest < ActiveSupport::TestCase
32
32
  end
33
33
 
34
34
  test 'cannot search by arbitrary key' do
35
- proc { ForemanTasks::Task.search_for('user.my_key ~ 5') }.must_raise(ScopedSearch::QueryNotSupported)
36
- proc { ForemanTasks::Task.search_for('user. = 5') }.must_raise(ScopedSearch::QueryNotSupported)
35
+ _ { proc { ForemanTasks::Task.search_for('user.my_key ~ 5') } }.must_raise(ScopedSearch::QueryNotSupported)
36
+ _ { proc { ForemanTasks::Task.search_for('user. = 5') } }.must_raise(ScopedSearch::QueryNotSupported)
37
37
  end
38
38
 
39
39
  test 'can search the tasks by negated user' do
@@ -59,8 +59,8 @@ class TasksTest < ActiveSupport::TestCase
59
59
  end
60
60
 
61
61
  test 'cannot glob on user\'s id' do
62
- proc { ForemanTasks::Task.search_for("user.id ~ something") }.must_raise(ScopedSearch::QueryNotSupported)
63
- proc { ForemanTasks::Task.search_for("user.id ~ 5") }.must_raise(ScopedSearch::QueryNotSupported)
62
+ _ { proc { ForemanTasks::Task.search_for("user.id ~ something") } }.must_raise(ScopedSearch::QueryNotSupported)
63
+ _ { proc { ForemanTasks::Task.search_for("user.id ~ 5") } }.must_raise(ScopedSearch::QueryNotSupported)
64
64
  end
65
65
 
66
66
  test 'can search the tasks by user with wildcards' do
@@ -126,7 +126,7 @@ class TasksTest < ActiveSupport::TestCase
126
126
  end
127
127
 
128
128
  it 'raises an exception if duration is unknown' do
129
- proc { ForemanTasks::Task.search_for('duration = "25 potatoes"') }.must_raise ScopedSearch::QueryNotSupported
129
+ _ { proc { ForemanTasks::Task.search_for('duration = "25 potatoes"') } }.must_raise ScopedSearch::QueryNotSupported
130
130
  end
131
131
  end
132
132
  end
@@ -176,13 +176,13 @@ class TasksTest < ActiveSupport::TestCase
176
176
  let(:inconsistent_task) { FactoryBot.create(:dynflow_task, :inconsistent_dynflow_task) }
177
177
 
178
178
  it 'ensures the tasks marked as running are really running in Dynflow' do
179
- consistent_task.state.must_equal 'planned'
180
- inconsistent_task.state.must_equal 'running'
179
+ _(consistent_task.state).must_equal 'planned'
180
+ _(inconsistent_task.state).must_equal 'running'
181
181
 
182
182
  ForemanTasks::Task::DynflowTask.consistency_check
183
183
 
184
- consistent_task.reload.state.must_equal 'planned'
185
- inconsistent_task.reload.state.must_equal 'planned'
184
+ _(consistent_task.reload.state).must_equal 'planned'
185
+ _(inconsistent_task.reload.state).must_equal 'planned'
186
186
  end
187
187
  end
188
188
 
@@ -190,8 +190,8 @@ class TasksTest < ActiveSupport::TestCase
190
190
  it 'when scheduled to the future, the label and action is set properly' do
191
191
  job = Support::DummyActiveJob.set(:wait => 12.hours).perform_later
192
192
  task = ForemanTasks::Task.find_by!(:external_id => job.provider_job_id)
193
- task.action.must_equal "Dummy action"
194
- task.label.must_equal "Support::DummyActiveJob"
193
+ _(task.action).must_equal "Dummy action"
194
+ _(task.label).must_equal "Support::DummyActiveJob"
195
195
  end
196
196
  end
197
197
 
@@ -224,14 +224,14 @@ class TasksTest < ActiveSupport::TestCase
224
224
  :total => 0,
225
225
  :success => 0,
226
226
  :cancelled => 0,
227
- :pending => 0
227
+ :pending => 0,
228
228
  }
229
229
  end
230
230
  let(:task) { FactoryBot.create(:dynflow_task) }
231
231
 
232
232
  describe 'without sub tasks' do
233
233
  it 'calculates the progress report correctly' do
234
- task.sub_tasks_counts.must_equal result_base
234
+ _(task.sub_tasks_counts).must_equal result_base
235
235
  end
236
236
  end
237
237
 
@@ -242,7 +242,7 @@ class TasksTest < ActiveSupport::TestCase
242
242
 
243
243
  it 'calculate the progress report correctly' do
244
244
  expected_result = result_base.merge(:success => 1, :error => 1, :total => 2)
245
- task.sub_tasks_counts.must_equal expected_result
245
+ _(task.sub_tasks_counts).must_equal expected_result
246
246
  end
247
247
 
248
248
  it 'calculates the progress report correctly when using batch planning' do
@@ -252,11 +252,11 @@ class TasksTest < ActiveSupport::TestCase
252
252
 
253
253
  task.state = 'stopped'
254
254
  expected_result = result_base.merge(:cancelled => 23)
255
- task.sub_tasks_counts.must_equal expected_result
255
+ _(task.sub_tasks_counts).must_equal expected_result
256
256
 
257
257
  task.state = 'pending'
258
258
  expected_result = result_base.merge(:pending => 23)
259
- task.sub_tasks_counts.must_equal expected_result
259
+ _(task.sub_tasks_counts).must_equal expected_result
260
260
  end
261
261
  end
262
262
  end
@@ -278,10 +278,10 @@ class TasksTest < ActiveSupport::TestCase
278
278
 
279
279
  it 'can indicate it is delayed' do
280
280
  assert_not task.delayed?
281
- task.execution_type.must_equal 'Immediate'
281
+ _(task.execution_type).must_equal 'Immediate'
282
282
  task.start_at = Time.now.utc + 100
283
283
  assert task.delayed?
284
- task.execution_type.must_equal 'Delayed'
284
+ _(task.execution_type).must_equal 'Delayed'
285
285
  end
286
286
  end
287
287
 
@@ -3,28 +3,28 @@ require 'foreman_tasks_test_helper'
3
3
  class TriggeringTest < ActiveSupport::TestCase
4
4
  describe 'validation' do
5
5
  it 'is valid when immediate' do
6
- FactoryBot.build(:triggering).must_be :valid?
6
+ _(FactoryBot.build(:triggering)).must_be :valid?
7
7
  end
8
8
 
9
9
  it 'is validates future execution' do
10
10
  triggering = FactoryBot.build(:triggering, :future)
11
- triggering.must_be :valid?
11
+ _(triggering).must_be :valid?
12
12
  triggering.start_before = triggering.start_at - 120
13
- triggering.wont_be :valid?
13
+ _(triggering).wont_be :valid?
14
14
  end
15
15
 
16
16
  it 'is invalid when recurring logic is invalid' do
17
17
  triggering = FactoryBot.build(:triggering, :recurring)
18
- triggering.must_be :valid?
18
+ _(triggering).must_be :valid?
19
19
  triggering.recurring_logic.stubs(:valid?).returns(false)
20
- triggering.wont_be :valid?
20
+ _(triggering).wont_be :valid?
21
21
  end
22
22
  end
23
23
 
24
24
  it 'cannot have mode set to arbitrary value' do
25
25
  triggering = FactoryBot.build(:triggering)
26
- triggering.must_be :valid?
27
- proc { triggering.mode = 'bogus' }.must_raise ArgumentError
28
- proc { triggering.mode = 27 }.must_raise ArgumentError
26
+ _(triggering).must_be :valid?
27
+ _ { proc { triggering.mode = 'bogus' } }.must_raise ArgumentError
28
+ _ { proc { triggering.mode = 27 } }.must_raise ArgumentError
29
29
  end
30
30
  end