rocketjob_mission_control 4.3.0 → 6.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/Rakefile +12 -13
- data/app/assets/config/manifest.js +3 -0
- data/app/assets/javascripts/rocket_job_mission_control/application.js +2 -4
- data/app/assets/javascripts/rocket_job_mission_control/nested_fields.js +112 -0
- data/app/assets/stylesheets/rocket_job_mission_control/{application.scss → application.css} +9 -9
- data/app/assets/stylesheets/rocket_job_mission_control/base.css +420 -0
- data/app/assets/stylesheets/rocket_job_mission_control/{callout.scss → callout.css} +50 -52
- data/app/assets/stylesheets/rocket_job_mission_control/jobs.css +57 -0
- data/app/assets/stylesheets/rocket_job_mission_control/worker_processes.css +7 -0
- data/app/controllers/rocket_job_mission_control/application_controller.rb +2 -3
- data/app/controllers/rocket_job_mission_control/dirmon_entries_controller.rb +53 -33
- data/app/controllers/rocket_job_mission_control/jobs_controller.rb +78 -37
- data/app/controllers/rocket_job_mission_control/servers_controller.rb +32 -38
- data/app/datatables/rocket_job_mission_control/abstract_datatable.rb +8 -6
- data/app/datatables/rocket_job_mission_control/active_workers_datatable.rb +5 -5
- data/app/datatables/rocket_job_mission_control/dirmon_entries_datatable.rb +4 -4
- data/app/datatables/rocket_job_mission_control/jobs_datatable.rb +55 -62
- data/app/datatables/rocket_job_mission_control/servers_datatable.rb +13 -14
- data/app/helpers/rocket_job_mission_control/application_helper.rb +70 -52
- data/app/helpers/rocket_job_mission_control/dirmon_entries_helper.rb +8 -0
- data/app/helpers/rocket_job_mission_control/jobs_helper.rb +80 -13
- data/app/helpers/rocket_job_mission_control/pagination_helper.rb +1 -1
- data/app/helpers/rocket_job_mission_control/servers_helper.rb +6 -6
- data/app/helpers/rocket_job_mission_control/slices_helper.rb +2 -4
- data/app/models/rocket_job_mission_control/access_policy.rb +3 -4
- data/app/models/rocket_job_mission_control/authorization.rb +3 -2
- data/app/models/rocket_job_mission_control/dirmon_sanitizer.rb +68 -0
- data/app/models/rocket_job_mission_control/job_sanitizer.rb +48 -16
- data/app/models/rocket_job_mission_control/query.rb +2 -5
- data/app/views/rocket_job_mission_control/dirmon_entries/_form.html.erb +78 -42
- data/app/views/rocket_job_mission_control/dirmon_entries/_input_categories.html.erb +59 -0
- data/app/views/rocket_job_mission_control/dirmon_entries/_input_category_fields.html.erb +56 -0
- data/app/views/rocket_job_mission_control/dirmon_entries/_output_categories.html.erb +44 -0
- data/app/views/rocket_job_mission_control/dirmon_entries/_output_category_fields.html.erb +36 -0
- data/app/views/rocket_job_mission_control/dirmon_entries/_status.html.erb +22 -16
- data/app/views/rocket_job_mission_control/dirmon_entries/copy.html.erb +4 -0
- data/app/views/rocket_job_mission_control/dirmon_entries/edit.html.erb +7 -3
- data/app/views/rocket_job_mission_control/dirmon_entries/show.html.erb +8 -5
- data/app/views/rocket_job_mission_control/jobs/_attributes.html.erb +89 -0
- data/app/views/rocket_job_mission_control/jobs/_dates.html.erb +39 -0
- data/app/views/rocket_job_mission_control/jobs/_details.html.erb +86 -0
- data/app/views/rocket_job_mission_control/jobs/_exception.html.erb +33 -0
- data/app/views/rocket_job_mission_control/jobs/_exceptions.html.erb +1 -1
- data/app/views/rocket_job_mission_control/jobs/_input_categories.html.erb +126 -0
- data/app/views/rocket_job_mission_control/jobs/_input_category_fields.html.erb +56 -0
- data/app/views/rocket_job_mission_control/jobs/_output_categories.html.erb +60 -0
- data/app/views/rocket_job_mission_control/jobs/_output_category_fields.html.erb +36 -0
- data/app/views/rocket_job_mission_control/jobs/_retryable.html.erb +27 -0
- data/app/views/rocket_job_mission_control/jobs/_status.html.erb +21 -49
- data/app/views/rocket_job_mission_control/jobs/edit.html.erb +28 -0
- data/app/views/rocket_job_mission_control/jobs/edit_slice.html.erb +1 -1
- data/app/views/rocket_job_mission_control/jobs/exception.html.erb +1 -1
- data/app/views/rocket_job_mission_control/jobs/index.html.erb +24 -18
- data/app/views/rocket_job_mission_control/jobs/show.html.erb +32 -58
- data/app/views/rocket_job_mission_control/jobs/view_slice.html.erb +4 -4
- data/app/views/rocket_job_mission_control/servers/index.html.erb +2 -2
- data/config/initializers/assets.rb +5 -8
- data/config/locales/en.yml +3 -0
- data/config/routes.rb +24 -21
- data/lib/rocket_job_mission_control/engine.rb +6 -9
- data/lib/rocket_job_mission_control/version.rb +1 -1
- data/lib/rocketjob_mission_control.rb +1 -1
- data/test/compare_hashes.rb +1 -2
- data/test/controllers/rocket_job_mission_control/application_controller_test.rb +13 -21
- data/test/controllers/rocket_job_mission_control/dirmon_entries_controller_test.rb +124 -157
- data/test/controllers/rocket_job_mission_control/jobs_controller_test.rb +103 -127
- data/test/controllers/rocket_job_mission_control/servers_controller_test.rb +66 -103
- data/test/helpers/rocket_job_mission_control/application_helper_test.rb +13 -14
- data/test/helpers/rocket_job_mission_control/jobs_helper_test.rb +31 -31
- data/test/helpers/rocket_job_mission_control/pagination_helper_test.rb +7 -9
- data/test/helpers/rocket_job_mission_control/servers_helper_test.rb +15 -15
- data/test/helpers/rocket_job_mission_control/slices_helper_test.rb +8 -10
- data/test/models/rocket_job_mission_control/dirmon_sanitizer_test.rb +146 -0
- data/test/models/rocket_job_mission_control/job_sanitizer_test.rb +47 -42
- data/test/models/rocket_job_mission_control/query_test.rb +26 -28
- data/test/test_helper.rb +9 -15
- data/vendor/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/vendor/assets/fonts/glyphicons-halflings-regular.svg +288 -0
- data/vendor/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/vendor/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/vendor/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/vendor/assets/javascripts/datatables.min.js +881 -0
- data/vendor/assets/stylesheets/bootstrap.min.css.erb +6 -0
- data/vendor/assets/stylesheets/datatables.min.css +141 -0
- metadata +61 -65
- data/app/assets/stylesheets/rocket_job_mission_control/base.scss +0 -436
- data/app/assets/stylesheets/rocket_job_mission_control/bootstrap_and_overrides.scss +0 -488
- data/app/assets/stylesheets/rocket_job_mission_control/jobs.scss +0 -72
- data/app/assets/stylesheets/rocket_job_mission_control/worker_processes.scss +0 -9
- data/vendor/assets/stylesheets/bootstrap.min.css +0 -6
@@ -1,9 +1,8 @@
|
|
1
|
-
require_relative
|
2
|
-
require_relative
|
1
|
+
require_relative "../../test_helper"
|
2
|
+
require_relative "../../compare_hashes"
|
3
3
|
|
4
4
|
module RocketJobMissionControl
|
5
5
|
class JobsControllerTest < ActionController::TestCase
|
6
|
-
|
7
6
|
class PausableJob < RocketJob::Job
|
8
7
|
self.pausable = true
|
9
8
|
|
@@ -27,11 +26,12 @@ module RocketJobMissionControl
|
|
27
26
|
end
|
28
27
|
|
29
28
|
let :failed_job do
|
30
|
-
job = KaboomBatchJob.new
|
29
|
+
job = KaboomBatchJob.new
|
30
|
+
job.input_category.slice_size = 1
|
31
31
|
job.upload do |stream|
|
32
|
-
stream <<
|
33
|
-
stream <<
|
34
|
-
stream <<
|
32
|
+
stream << "first record"
|
33
|
+
stream << "second record"
|
34
|
+
stream << "third record"
|
35
35
|
end
|
36
36
|
job.save!
|
37
37
|
|
@@ -49,29 +49,27 @@ module RocketJobMissionControl
|
|
49
49
|
|
50
50
|
let :one_job_for_every_state do
|
51
51
|
job_states.collect do |state|
|
52
|
-
RocketJob::Jobs::SimpleJob.create!(state: state, worker_name:
|
52
|
+
RocketJob::Jobs::SimpleJob.create!(state: state, worker_name: "worker", started_at: (Time.now - 0.5))
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
[
|
56
|
+
%i[pause resume abort retry fail].each do |state|
|
57
57
|
describe "PATCH ##{state}" do
|
58
|
-
describe
|
58
|
+
describe "with an invalid job id" do
|
59
59
|
before do
|
60
|
-
params
|
61
|
-
params = {params: params} if Rails.version.to_i >= 5
|
62
|
-
patch state, params
|
60
|
+
patch state, params: {id: 42, job: {id: 42, priority: 12}}
|
63
61
|
end
|
64
62
|
|
65
|
-
it
|
63
|
+
it "redirects" do
|
66
64
|
assert_redirected_to jobs_path
|
67
65
|
end
|
68
66
|
|
69
|
-
it
|
70
|
-
assert_equal I18n.t(:failure, scope: [
|
67
|
+
it "adds a flash alert message" do
|
68
|
+
assert_equal I18n.t(:failure, scope: %i[job find], id: 42), flash[:alert]
|
71
69
|
end
|
72
70
|
end
|
73
71
|
|
74
|
-
describe
|
72
|
+
describe "with a valid job id" do
|
75
73
|
before do
|
76
74
|
case state
|
77
75
|
when :pause, :fail, :abort
|
@@ -82,69 +80,62 @@ module RocketJobMissionControl
|
|
82
80
|
pausable_job.fail!
|
83
81
|
end
|
84
82
|
params = {id: pausable_job.id, job: {id: pausable_job.id, priority: pausable_job.priority}}
|
85
|
-
|
86
|
-
patch state, params
|
83
|
+
patch state, params: params
|
87
84
|
end
|
88
85
|
|
89
|
-
it
|
86
|
+
it "redirects to the job" do
|
90
87
|
assert_redirected_to job_path(pausable_job.id)
|
91
88
|
end
|
92
89
|
|
93
|
-
it
|
90
|
+
it "transitions the job" do
|
94
91
|
refute_equal state, pausable_job.state
|
95
92
|
end
|
96
93
|
end
|
97
94
|
end
|
98
95
|
end
|
99
96
|
|
100
|
-
describe
|
97
|
+
describe "PATCH #run_now" do
|
101
98
|
let(:scheduled_job) { RocketJob::Jobs::SimpleJob.create!(run_at: 2.days.from_now) }
|
102
99
|
|
103
100
|
before do
|
104
|
-
params
|
105
|
-
params = {params: params} if Rails.version.to_i >= 5
|
106
|
-
patch :run_now, params
|
101
|
+
patch :run_now, params: {id: scheduled_job.id}
|
107
102
|
end
|
108
103
|
|
109
|
-
it
|
104
|
+
it "redirects to the job path" do
|
110
105
|
assert_redirected_to job_path(scheduled_job.id)
|
111
106
|
end
|
112
107
|
|
113
|
-
it
|
108
|
+
it "updates run_at" do
|
114
109
|
assert_nil scheduled_job.reload.run_at
|
115
110
|
end
|
116
111
|
end
|
117
112
|
|
118
|
-
|
119
113
|
describe "PATCH #update" do
|
120
|
-
describe
|
114
|
+
describe "with an invalid job id" do
|
121
115
|
before do
|
122
|
-
params
|
123
|
-
params = {params: params} if Rails.version.to_i >= 5
|
124
|
-
patch :update, params
|
116
|
+
patch :update, params: {id: 42, job: {id: 42, priority: 12}}
|
125
117
|
end
|
126
118
|
|
127
|
-
it
|
119
|
+
it "redirects" do
|
128
120
|
assert_redirected_to jobs_path
|
129
121
|
end
|
130
122
|
|
131
|
-
it
|
132
|
-
assert_equal I18n.t(:failure, scope: [
|
123
|
+
it "adds a flash alert message" do
|
124
|
+
assert_equal I18n.t(:failure, scope: %i[job find], id: 42), flash[:alert]
|
133
125
|
end
|
134
126
|
end
|
135
127
|
|
136
128
|
describe "with a valid job id" do
|
137
129
|
before do
|
138
|
-
params = {id: job.id, job: {id: job.id, priority: 12, blah: 23, description:
|
139
|
-
|
140
|
-
patch :update, params
|
130
|
+
params = {id: job.id, job: {id: job.id, priority: 12, blah: 23, description: "", log_level: "", state: "failed"}}
|
131
|
+
patch :update, params: params
|
141
132
|
end
|
142
133
|
|
143
|
-
it
|
134
|
+
it "redirects to the job" do
|
144
135
|
assert_redirected_to job_path(job.id)
|
145
136
|
end
|
146
137
|
|
147
|
-
it
|
138
|
+
it "updates the job correctly" do
|
148
139
|
assert_equal 12, job.reload.priority
|
149
140
|
end
|
150
141
|
|
@@ -157,97 +148,87 @@ module RocketJobMissionControl
|
|
157
148
|
end
|
158
149
|
end
|
159
150
|
|
160
|
-
describe
|
161
|
-
describe
|
151
|
+
describe "GET #show" do
|
152
|
+
describe "with an invalid job id" do
|
162
153
|
before do
|
163
|
-
params
|
164
|
-
params = {params: params} if Rails.version.to_i >= 5
|
165
|
-
get :show, params
|
154
|
+
get :show, params: {id: 42}
|
166
155
|
end
|
167
156
|
|
168
|
-
it
|
157
|
+
it "redirects" do
|
169
158
|
assert_redirected_to jobs_path
|
170
159
|
end
|
171
160
|
|
172
|
-
it
|
173
|
-
assert_equal I18n.t(:failure, scope: [
|
161
|
+
it "adds a flash alert message" do
|
162
|
+
assert_equal I18n.t(:failure, scope: %i[job find], id: 42), flash[:alert]
|
174
163
|
end
|
175
164
|
end
|
176
165
|
|
177
166
|
describe "with a valid job id" do
|
178
167
|
before do
|
179
|
-
params
|
180
|
-
params = {params: params} if Rails.version.to_i >= 5
|
181
|
-
get :show, params
|
168
|
+
get :show, params: {id: job.id}
|
182
169
|
end
|
183
170
|
|
184
|
-
it
|
171
|
+
it "succeeds" do
|
185
172
|
assert_response :success
|
186
173
|
end
|
187
174
|
|
188
|
-
it
|
175
|
+
it "assigns the job" do
|
189
176
|
assert_equal job.id, assigns(:job).id
|
190
177
|
end
|
191
178
|
end
|
192
179
|
end
|
193
180
|
|
194
|
-
describe
|
195
|
-
describe
|
181
|
+
describe "GET #exception" do
|
182
|
+
describe "with an invalid job id" do
|
196
183
|
before do
|
197
|
-
params
|
198
|
-
params = {params: params} if Rails.version.to_i >= 5
|
199
|
-
get :exception, params
|
184
|
+
get :exception, params: {id: 42}
|
200
185
|
end
|
201
186
|
|
202
|
-
it
|
187
|
+
it "redirects" do
|
203
188
|
assert_redirected_to jobs_path
|
204
189
|
end
|
205
190
|
|
206
|
-
it
|
207
|
-
assert_equal I18n.t(:failure, scope: [
|
191
|
+
it "adds a flash alert message" do
|
192
|
+
assert_equal I18n.t(:failure, scope: %i[job find], id: 42), flash[:alert]
|
208
193
|
end
|
209
194
|
end
|
210
195
|
|
211
|
-
describe
|
212
|
-
describe
|
196
|
+
describe "with a valid job id" do
|
197
|
+
describe "without an exception" do
|
213
198
|
before do
|
214
|
-
params
|
215
|
-
params = {params: params} if Rails.version.to_i >= 5
|
216
|
-
get :exception, params
|
199
|
+
get :exception, params: {id: failed_job.id, error_type: "Blah"}
|
217
200
|
end
|
218
201
|
|
219
|
-
it
|
202
|
+
it "redirects to job path" do
|
220
203
|
assert_redirected_to job_path(failed_job.id)
|
221
204
|
end
|
222
205
|
|
223
|
-
it
|
224
|
-
assert_equal I18n.t(:no_errors, scope: [
|
206
|
+
it "notifies the user" do
|
207
|
+
assert_equal I18n.t(:no_errors, scope: %i[job failures]), flash[:notice]
|
225
208
|
end
|
226
209
|
end
|
227
210
|
|
228
|
-
describe
|
211
|
+
describe "with exception" do
|
229
212
|
before do
|
230
|
-
params
|
231
|
-
params = {params: params} if Rails.version.to_i >= 5
|
232
|
-
get :exception, params
|
213
|
+
get :exception, params: {id: failed_job.id, error_type: "ArgumentError"}
|
233
214
|
end
|
234
215
|
|
235
|
-
it
|
216
|
+
it "succeeds" do
|
236
217
|
assert_response :success
|
237
218
|
end
|
238
219
|
|
239
|
-
it
|
220
|
+
it "assigns the job" do
|
240
221
|
assert_equal failed_job.id, assigns(:job).id
|
241
222
|
end
|
242
223
|
|
243
|
-
it
|
224
|
+
it "paginates" do
|
244
225
|
assert_equal 0, assigns(:pagination)[:offset], assigns(:pagination)
|
245
226
|
assert_equal 1, assigns(:pagination)[:total], assigns(:pagination)
|
246
227
|
end
|
247
228
|
|
248
|
-
it
|
249
|
-
assert_equal
|
250
|
-
assert_equal
|
229
|
+
it "returns the first exception" do
|
230
|
+
assert_equal "ArgumentError", assigns(:failure_exception).class_name
|
231
|
+
assert_equal "Blowing up on record: 1", assigns(:failure_exception).message
|
251
232
|
assert assigns(:failure_exception).backtrace.present?
|
252
233
|
end
|
253
234
|
end
|
@@ -256,17 +237,17 @@ module RocketJobMissionControl
|
|
256
237
|
|
257
238
|
([:index] + job_states).each do |state|
|
258
239
|
describe "GET ##{state}" do
|
259
|
-
describe
|
240
|
+
describe "html" do
|
260
241
|
describe "with no #{state} servers" do
|
261
242
|
before do
|
262
243
|
get state
|
263
244
|
end
|
264
245
|
|
265
|
-
it
|
246
|
+
it "succeeds" do
|
266
247
|
assert_response :success
|
267
248
|
end
|
268
249
|
|
269
|
-
it
|
250
|
+
it "renders template" do
|
270
251
|
assert_template :index
|
271
252
|
end
|
272
253
|
end
|
@@ -277,23 +258,23 @@ module RocketJobMissionControl
|
|
277
258
|
get state
|
278
259
|
end
|
279
260
|
|
280
|
-
it
|
261
|
+
it "succeeds" do
|
281
262
|
assert_response :success
|
282
263
|
end
|
283
264
|
|
284
|
-
it
|
265
|
+
it "renders template" do
|
285
266
|
assert_template :index
|
286
267
|
end
|
287
268
|
end
|
288
269
|
end
|
289
270
|
|
290
|
-
describe
|
271
|
+
describe "json" do
|
291
272
|
describe "with no #{state} server" do
|
292
273
|
before do
|
293
274
|
get state, format: :json
|
294
275
|
end
|
295
276
|
|
296
|
-
it
|
277
|
+
it "succeeds" do
|
297
278
|
assert_response :success
|
298
279
|
json = JSON.parse(response.body)
|
299
280
|
expected = {
|
@@ -313,81 +294,79 @@ module RocketJobMissionControl
|
|
313
294
|
get state, format: :json
|
314
295
|
end
|
315
296
|
|
316
|
-
it
|
297
|
+
it "succeeds" do
|
317
298
|
assert_response :success
|
318
299
|
json = JSON.parse(response.body)
|
319
300
|
expected_data = {
|
320
301
|
aborted: {
|
321
302
|
"0" => /#{RocketJob::Jobs::SimpleJob.name}/,
|
322
|
-
"1" =>
|
303
|
+
"1" => "",
|
323
304
|
"2" => /UTC/,
|
324
305
|
"3" => /ms/,
|
325
|
-
"4" =>
|
306
|
+
"4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.aborted.first.id}},
|
326
307
|
"DT_RowClass" => "card callout callout-aborted"
|
327
308
|
},
|
328
309
|
failed: {
|
329
310
|
"0" => /#{RocketJob::Jobs::SimpleJob.name}/,
|
330
|
-
"1" =>
|
311
|
+
"1" => "",
|
331
312
|
"2" => /UTC/,
|
332
313
|
"3" => /ms/,
|
333
|
-
"4" =>
|
314
|
+
"4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.failed.first.id}},
|
334
315
|
"DT_RowClass" => "card callout callout-failed"
|
335
316
|
},
|
336
317
|
paused: {
|
337
318
|
"0" => /#{RocketJob::Jobs::SimpleJob.name}/,
|
338
|
-
"1" =>
|
319
|
+
"1" => "",
|
339
320
|
"2" => /UTC/,
|
340
321
|
"3" => /ms/,
|
341
|
-
"4" =>
|
322
|
+
"4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.paused.first.id}},
|
342
323
|
"DT_RowClass" => "card callout callout-paused"
|
343
324
|
},
|
344
325
|
completed: {
|
345
326
|
"0" => /#{RocketJob::Jobs::SimpleJob.name}/,
|
346
|
-
"1" =>
|
327
|
+
"1" => "",
|
347
328
|
"2" => /UTC/,
|
348
329
|
"3" => /ms/,
|
349
|
-
"4" =>
|
330
|
+
"4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.completed.first.id}},
|
350
331
|
"DT_RowClass" => "card callout callout-completed"
|
351
332
|
},
|
352
333
|
running: {
|
353
334
|
"0" => /#{RocketJob::Jobs::SimpleJob.name}/,
|
354
|
-
"1" =>
|
335
|
+
"1" => "",
|
355
336
|
"2" => /UTC/,
|
356
337
|
"3" => /ms/,
|
357
|
-
"4" =>
|
338
|
+
"4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.running.first.id}},
|
358
339
|
"DT_RowClass" => "card callout callout-running"
|
359
340
|
},
|
360
341
|
queued: {
|
361
342
|
"0" => /#{RocketJob::Jobs::SimpleJob.name}/,
|
362
|
-
"1" =>
|
363
|
-
"2" => /
|
343
|
+
"1" => "",
|
344
|
+
"2" => /0/,
|
364
345
|
"3" => /ms/,
|
365
|
-
"4" =>
|
346
|
+
"4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.queued.first.id}},
|
366
347
|
"DT_RowClass" => "card callout callout-queued"
|
367
|
-
}
|
348
|
+
}
|
368
349
|
}
|
369
350
|
|
370
351
|
if state == :index
|
371
|
-
assert_equal 0, json[
|
372
|
-
assert_equal 6, json[
|
373
|
-
assert_equal 6, json[
|
374
|
-
compare_array_of_hashes
|
352
|
+
assert_equal 0, json["draw"]
|
353
|
+
assert_equal 6, json["recordsTotal"]
|
354
|
+
assert_equal 6, json["recordsFiltered"]
|
355
|
+
compare_array_of_hashes(expected_data.values, json["data"])
|
375
356
|
else
|
376
|
-
assert_equal 0, json[
|
377
|
-
assert_equal 1, json[
|
378
|
-
assert_equal 1, json[
|
357
|
+
assert_equal 0, json["draw"]
|
358
|
+
assert_equal 1, json["recordsTotal"]
|
359
|
+
assert_equal 1, json["recordsFiltered"]
|
379
360
|
# Columns change by state
|
380
|
-
#compare_hash expected_data[state], json['data'].first
|
361
|
+
# compare_hash expected_data[state], json['data'].first
|
381
362
|
end
|
382
363
|
end
|
383
364
|
end
|
384
|
-
|
385
365
|
end
|
386
|
-
|
387
366
|
end
|
388
367
|
end
|
389
368
|
|
390
|
-
describe
|
369
|
+
describe "role base authentication control" do
|
391
370
|
%i[index aborted completed failed paused queued running scheduled].each do |method|
|
392
371
|
it "#{method} has read access as default" do
|
393
372
|
get method, format: :json
|
@@ -396,7 +375,7 @@ module RocketJobMissionControl
|
|
396
375
|
end
|
397
376
|
|
398
377
|
%i[update abort retry pause resume run_now fail].each do |method|
|
399
|
-
describe
|
378
|
+
describe method.to_s do
|
400
379
|
before do
|
401
380
|
case method
|
402
381
|
when :pause, :fail, :abort
|
@@ -408,13 +387,12 @@ module RocketJobMissionControl
|
|
408
387
|
end
|
409
388
|
|
410
389
|
@params = {id: pausable_job.id, job: {id: pausable_job.id, priority: pausable_job.priority}}
|
411
|
-
@params = {params: @params} if Rails.version.to_i >= 5
|
412
390
|
end
|
413
391
|
|
414
392
|
%i[admin editor operator manager].each do |role|
|
415
393
|
it "redirects with #{method} method and role #{role}" do
|
416
394
|
set_role(role)
|
417
|
-
patch method, @params
|
395
|
+
patch method, params: @params
|
418
396
|
assert_response(:redirect)
|
419
397
|
end
|
420
398
|
end
|
@@ -423,7 +401,7 @@ module RocketJobMissionControl
|
|
423
401
|
it "raises authentication error for #{role}" do
|
424
402
|
set_role(role)
|
425
403
|
assert_raises AccessGranted::AccessDenied do
|
426
|
-
patch method, @params
|
404
|
+
patch method, params: @params
|
427
405
|
end
|
428
406
|
end
|
429
407
|
end
|
@@ -431,12 +409,11 @@ module RocketJobMissionControl
|
|
431
409
|
end
|
432
410
|
end
|
433
411
|
|
434
|
-
[
|
412
|
+
%i[view_slice edit_slice].each do |method|
|
435
413
|
describe "with a failed slice" do
|
436
414
|
it "access ##{method}" do
|
437
415
|
params = {:error_type => "ArgumentError", "record_number" => "9", "id" => failed_job.id}
|
438
|
-
|
439
|
-
get method, params
|
416
|
+
get method, params: params
|
440
417
|
assert_response :success
|
441
418
|
end
|
442
419
|
end
|
@@ -444,25 +421,24 @@ module RocketJobMissionControl
|
|
444
421
|
|
445
422
|
describe "#update slice" do
|
446
423
|
before do
|
447
|
-
params = {
|
448
|
-
|
449
|
-
post :update_slice, params
|
424
|
+
params = {"job" => {"records" => %w[1 2 3]}, "error_type" => "CSV::MalformedCSVError", "offset" => "1", "id" => failed_job.id.to_s}
|
425
|
+
post :update_slice, params: params
|
450
426
|
end
|
451
427
|
|
452
|
-
it
|
428
|
+
it "redirects" do
|
453
429
|
assert_redirected_to view_slice_job_path(failed_job, error_type: "CSV::MalformedCSVError")
|
454
430
|
end
|
455
431
|
|
456
|
-
it
|
457
|
-
assert_equal
|
432
|
+
it "adds a flash success message" do
|
433
|
+
assert_equal "slice updated", flash[:success]
|
458
434
|
end
|
459
435
|
end
|
460
436
|
end
|
461
437
|
|
462
438
|
def set_role(r)
|
463
|
-
Config.authorization_callback =
|
439
|
+
Config.authorization_callback = lambda {
|
464
440
|
{roles: [r]}
|
465
|
-
|
441
|
+
}
|
466
442
|
end
|
467
443
|
end
|
468
444
|
end
|