delayed_job_groups_plugin 0.2.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/.rubocop.yml +8 -0
- data/.travis.yml +10 -20
- data/Appraisals +12 -0
- data/CHANGELOG.md +24 -1
- data/Gemfile +2 -0
- data/README.md +4 -3
- data/Rakefile +2 -0
- data/delayed_job_groups.gemspec +18 -18
- data/gemfiles/rails_5.2.gemfile +9 -0
- data/gemfiles/rails_6.0.gemfile +8 -0
- data/lib/delayed/job_groups/compatibility.rb +2 -2
- data/lib/delayed/job_groups/job_extensions.rb +7 -8
- data/lib/delayed/job_groups/job_group.rb +9 -17
- data/lib/delayed/job_groups/plugin.rb +13 -9
- data/lib/delayed/job_groups/version.rb +2 -2
- data/lib/delayed/job_groups/yaml_loader.rb +17 -0
- data/lib/delayed_job_groups_plugin.rb +2 -1
- data/lib/generators/delayed_job_groups_plugin/install_generator.rb +3 -3
- data/lib/generators/delayed_job_groups_plugin/templates/{migration.rb → migration.erb} +2 -2
- data/spec/db/schema.rb +2 -2
- data/spec/delayed/job_groups/job_group_spec.rb +22 -23
- data/spec/delayed/job_groups/plugin_spec.rb +133 -84
- data/spec/delayed/job_groups/yaml_loader_spec.rb +43 -0
- data/spec/spec_helper.rb +12 -12
- data/spec/support/destroyed_model.rb +3 -3
- metadata +83 -41
@@ -1,6 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
class CreateDelayedJobGroups < ActiveRecord::Migration
|
3
|
+
class CreateDelayedJobGroups < ActiveRecord::Migration[<%= ActiveRecord::VERSION::MAJOR %>.<%= ActiveRecord::VERSION::MINOR %>]
|
4
4
|
|
5
5
|
def up
|
6
6
|
add_column(:delayed_jobs, :blocked, :boolean, default: false, null: false)
|
data/spec/db/schema.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
require 'spec_helper'
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
5
3
|
describe Delayed::JobGroups::JobGroup do
|
6
4
|
|
@@ -19,7 +17,7 @@ describe Delayed::JobGroups::JobGroup do
|
|
19
17
|
|
20
18
|
before do
|
21
19
|
Timecop.freeze(current_time)
|
22
|
-
Delayed::Job.
|
20
|
+
allow(Delayed::Job).to receive(:enqueue)
|
23
21
|
end
|
24
22
|
|
25
23
|
after do
|
@@ -28,21 +26,21 @@ describe Delayed::JobGroups::JobGroup do
|
|
28
26
|
|
29
27
|
shared_examples "the job group was completed" do
|
30
28
|
it "queues the completion job" do
|
31
|
-
Delayed::Job.
|
29
|
+
expect(Delayed::Job).to have_received(:enqueue).with(on_completion_job, on_completion_job_options)
|
32
30
|
end
|
33
31
|
|
34
32
|
it "destroys the job group" do
|
35
|
-
job_group.
|
33
|
+
expect(job_group).to have_been_destroyed
|
36
34
|
end
|
37
35
|
end
|
38
36
|
|
39
37
|
shared_examples "the job group was not completed" do
|
40
38
|
it "does not queue the completion job" do
|
41
|
-
Delayed::Job.
|
39
|
+
expect(Delayed::Job).not_to have_received(:enqueue)
|
42
40
|
end
|
43
41
|
|
44
42
|
it "does not destroy the job group" do
|
45
|
-
job_group.
|
43
|
+
expect(job_group).not_to have_been_destroyed
|
46
44
|
end
|
47
45
|
end
|
48
46
|
|
@@ -51,15 +49,16 @@ describe Delayed::JobGroups::JobGroup do
|
|
51
49
|
context "when no jobs exist" do
|
52
50
|
before { job_group.mark_queueing_complete }
|
53
51
|
|
54
|
-
it {
|
52
|
+
it { is_expected.to be_queueing_complete }
|
55
53
|
it_behaves_like "the job group was completed"
|
56
54
|
end
|
57
55
|
|
58
56
|
context "when no jobs exist but the job group is blocked" do
|
59
57
|
let(:blocked) { true }
|
58
|
+
|
60
59
|
before { job_group.mark_queueing_complete }
|
61
60
|
|
62
|
-
it {
|
61
|
+
it { is_expected.to be_queueing_complete }
|
63
62
|
it_behaves_like "the job group was not completed"
|
64
63
|
end
|
65
64
|
|
@@ -69,7 +68,7 @@ describe Delayed::JobGroups::JobGroup do
|
|
69
68
|
job_group.mark_queueing_complete
|
70
69
|
end
|
71
70
|
|
72
|
-
it {
|
71
|
+
it { is_expected.to be_queueing_complete }
|
73
72
|
it_behaves_like "the job group was not completed"
|
74
73
|
end
|
75
74
|
end
|
@@ -117,11 +116,11 @@ describe Delayed::JobGroups::JobGroup do
|
|
117
116
|
include_context "complete job and check job group complete"
|
118
117
|
|
119
118
|
it "queues the completion job with empty options" do
|
120
|
-
Delayed::Job.
|
119
|
+
expect(Delayed::Job).to have_received(:enqueue).with(on_completion_job, {})
|
121
120
|
end
|
122
121
|
|
123
122
|
it "destroys the job group" do
|
124
|
-
job_group.
|
123
|
+
expect(job_group).to have_been_destroyed
|
125
124
|
end
|
126
125
|
end
|
127
126
|
|
@@ -131,11 +130,11 @@ describe Delayed::JobGroups::JobGroup do
|
|
131
130
|
include_context "complete job and check job group complete"
|
132
131
|
|
133
132
|
it "doesn't queues the non-existent completion job" do
|
134
|
-
Delayed::Job.
|
133
|
+
expect(Delayed::Job).not_to have_received(:enqueue)
|
135
134
|
end
|
136
135
|
|
137
136
|
it "destroys the job group" do
|
138
|
-
job_group.
|
137
|
+
expect(job_group).to have_been_destroyed
|
139
138
|
end
|
140
139
|
end
|
141
140
|
end
|
@@ -149,7 +148,7 @@ describe Delayed::JobGroups::JobGroup do
|
|
149
148
|
|
150
149
|
shared_examples "it enqueues the job in the correct blocked state" do
|
151
150
|
it "enqueues the job in the same blocked state as the job group" do
|
152
|
-
Delayed::Job.
|
151
|
+
expect(Delayed::Job).to have_received(:enqueue).with(job, job_group_id: job_group.id, blocked: blocked)
|
153
152
|
end
|
154
153
|
end
|
155
154
|
|
@@ -169,7 +168,7 @@ describe Delayed::JobGroups::JobGroup do
|
|
169
168
|
job_group.unblock
|
170
169
|
end
|
171
170
|
|
172
|
-
its(:blocked?) {
|
171
|
+
its(:blocked?) { is_expected.to be(false) }
|
173
172
|
end
|
174
173
|
|
175
174
|
context "when the JobGroup is blocked" do
|
@@ -184,10 +183,10 @@ describe Delayed::JobGroups::JobGroup do
|
|
184
183
|
Timecop.freeze(unblock_time) { job_group.unblock }
|
185
184
|
end
|
186
185
|
|
187
|
-
its(:blocked?) {
|
186
|
+
its(:blocked?) { is_expected.to be(false) }
|
188
187
|
|
189
188
|
it "sets the job's run_at to the unblocked time" do
|
190
|
-
job.reload.run_at.
|
189
|
+
expect(job.reload.run_at).to eq unblock_time
|
191
190
|
end
|
192
191
|
|
193
192
|
it_behaves_like "the job group was not completed"
|
@@ -199,7 +198,7 @@ describe Delayed::JobGroups::JobGroup do
|
|
199
198
|
job_group.unblock
|
200
199
|
end
|
201
200
|
|
202
|
-
its(:blocked?) {
|
201
|
+
its(:blocked?) { is_expected.to be(false) }
|
203
202
|
it_behaves_like "the job group was completed"
|
204
203
|
end
|
205
204
|
end
|
@@ -214,15 +213,15 @@ describe Delayed::JobGroups::JobGroup do
|
|
214
213
|
end
|
215
214
|
|
216
215
|
it "destroys the job group" do
|
217
|
-
job_group.
|
216
|
+
expect(job_group).to have_been_destroyed
|
218
217
|
end
|
219
218
|
|
220
219
|
it "destroys queued jobs" do
|
221
|
-
queued_job.
|
220
|
+
expect(queued_job).to have_been_destroyed
|
222
221
|
end
|
223
222
|
|
224
223
|
it "does not destroy running jobs" do
|
225
|
-
running_job.
|
224
|
+
expect(running_job).not_to have_been_destroyed
|
226
225
|
end
|
227
226
|
end
|
228
227
|
|
@@ -1,77 +1,72 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
require 'spec_helper'
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
5
3
|
describe Delayed::JobGroups::Plugin do
|
6
|
-
|
7
|
-
before(:all) do
|
4
|
+
before do
|
8
5
|
@old_max_attempts = Delayed::Worker.max_attempts
|
9
6
|
Delayed::Worker.max_attempts = 2
|
10
|
-
end
|
11
7
|
|
12
|
-
after(:all) do
|
13
|
-
Delayed::Worker.max_attempts = @old_max_attempts
|
14
|
-
end
|
15
|
-
|
16
|
-
before(:each) do
|
17
8
|
CompletionJob.invoked = false
|
18
9
|
CancellationJob.invoked = false
|
19
10
|
end
|
20
11
|
|
12
|
+
after do
|
13
|
+
Delayed::Worker.max_attempts = @old_max_attempts
|
14
|
+
end
|
15
|
+
|
21
16
|
let!(:job_group) { Delayed::JobGroups::JobGroup.create!(on_completion_job: CompletionJob.new) }
|
22
17
|
|
23
18
|
it "runs the completion job after completing other jobs" do
|
24
19
|
job_group.enqueue(NoOpJob.new)
|
25
20
|
job_group.enqueue(NoOpJob.new)
|
26
21
|
job_group.mark_queueing_complete
|
27
|
-
job_group_count.
|
28
|
-
queued_job_count.
|
22
|
+
expect(job_group_count).to eq 1
|
23
|
+
expect(queued_job_count).to eq 2
|
29
24
|
|
30
25
|
# Run our first job
|
31
26
|
Delayed::Worker.new.work_off(1)
|
32
|
-
CompletionJob.invoked.
|
33
|
-
job_group_count.
|
34
|
-
queued_job_count.
|
27
|
+
expect(CompletionJob.invoked).to be(false)
|
28
|
+
expect(job_group_count).to eq 1
|
29
|
+
expect(queued_job_count).to eq 1
|
35
30
|
|
36
31
|
# Run our second job which should enqueue the completion job
|
37
32
|
Delayed::Worker.new.work_off(1)
|
38
|
-
CompletionJob.invoked.
|
39
|
-
job_group_count.
|
40
|
-
queued_job_count.
|
33
|
+
expect(CompletionJob.invoked).to be(false)
|
34
|
+
expect(job_group_count).to eq 0
|
35
|
+
expect(queued_job_count).to eq 1
|
41
36
|
|
42
37
|
# Now we should run the completion job
|
43
38
|
Delayed::Worker.new.work_off(1)
|
44
|
-
CompletionJob.invoked.
|
45
|
-
queued_job_count.
|
39
|
+
expect(CompletionJob.invoked).to be(true)
|
40
|
+
expect(queued_job_count).to eq 0
|
46
41
|
end
|
47
42
|
|
48
43
|
it "only runs the completion job after queueing is completed" do
|
49
44
|
job_group.enqueue(NoOpJob.new)
|
50
45
|
job_group.enqueue(NoOpJob.new)
|
51
|
-
job_group_count.
|
52
|
-
queued_job_count.
|
46
|
+
expect(job_group_count).to eq 1
|
47
|
+
expect(queued_job_count).to eq 2
|
53
48
|
|
54
49
|
# Run our first job
|
55
50
|
Delayed::Worker.new.work_off(1)
|
56
|
-
CompletionJob.invoked.
|
57
|
-
job_group_count.
|
58
|
-
queued_job_count.
|
51
|
+
expect(CompletionJob.invoked).to be(false)
|
52
|
+
expect(job_group_count).to eq 1
|
53
|
+
expect(queued_job_count).to eq 1
|
59
54
|
|
60
55
|
# Run our second job
|
61
56
|
Delayed::Worker.new.work_off(1)
|
62
|
-
CompletionJob.invoked.
|
63
|
-
job_group_count.
|
64
|
-
queued_job_count.
|
57
|
+
expect(CompletionJob.invoked).to be(false)
|
58
|
+
expect(job_group_count).to eq 1
|
59
|
+
expect(queued_job_count).to eq 0
|
65
60
|
|
66
61
|
# Mark queueing complete which should queue the completion job
|
67
62
|
job_group.mark_queueing_complete
|
68
|
-
job_group_count.
|
69
|
-
queued_job_count.
|
63
|
+
expect(job_group_count).to eq 0
|
64
|
+
expect(queued_job_count).to eq 1
|
70
65
|
|
71
66
|
# Now we should run the completion job
|
72
67
|
Delayed::Worker.new.work_off(1)
|
73
|
-
CompletionJob.invoked.
|
74
|
-
queued_job_count.
|
68
|
+
expect(CompletionJob.invoked).to be(true)
|
69
|
+
expect(queued_job_count).to eq 0
|
75
70
|
end
|
76
71
|
|
77
72
|
describe "job failures" do
|
@@ -83,15 +78,16 @@ describe Delayed::JobGroups::Plugin do
|
|
83
78
|
job_group.enqueue(FailingJob.new)
|
84
79
|
job_group.enqueue(NoOpJob.new)
|
85
80
|
job_group.mark_queueing_complete
|
86
|
-
queued_job_count.
|
87
|
-
job_group_count.
|
81
|
+
expect(queued_job_count).to eq 2
|
82
|
+
expect(job_group_count).to eq 1
|
88
83
|
|
89
84
|
# Run the job which should fail and cancel the JobGroup
|
90
85
|
Delayed::Worker.new.work_off(1)
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
86
|
+
# Completion job is not invoked
|
87
|
+
expect(CompletionJob.invoked).to be(false)
|
88
|
+
expect(failed_job_count).to eq 1
|
89
|
+
expect(queued_job_count).to eq 0
|
90
|
+
expect(job_group_count).to eq 0
|
95
91
|
end
|
96
92
|
end
|
97
93
|
|
@@ -105,15 +101,68 @@ describe Delayed::JobGroups::Plugin do
|
|
105
101
|
job_group.enqueue(FailingJob.new)
|
106
102
|
job_group.enqueue(NoOpJob.new)
|
107
103
|
job_group.mark_queueing_complete
|
108
|
-
queued_job_count.
|
109
|
-
job_group_count.
|
104
|
+
expect(queued_job_count).to eq 2
|
105
|
+
expect(job_group_count).to eq 1
|
110
106
|
|
111
107
|
# Run the job which should fail don't cancel the JobGroup
|
112
108
|
Delayed::Worker.new.work_off(1)
|
113
|
-
CancellationJob.invoked.
|
114
|
-
failed_job_count.
|
115
|
-
queued_job_count.
|
116
|
-
job_group_count.
|
109
|
+
expect(CancellationJob.invoked).to be(false)
|
110
|
+
expect(failed_job_count).to eq 1
|
111
|
+
expect(queued_job_count).to eq 1
|
112
|
+
expect(job_group_count).to eq 1
|
113
|
+
|
114
|
+
# Run the last job
|
115
|
+
Delayed::Worker.new.work_off(1)
|
116
|
+
expect(failed_job_count).to eq 1
|
117
|
+
expect(queued_job_count).to eq 1
|
118
|
+
expect(job_group_count).to eq 0
|
119
|
+
|
120
|
+
# Run the completion job
|
121
|
+
Delayed::Worker.new.work_off(1)
|
122
|
+
# Completion job is invoked
|
123
|
+
expect(CompletionJob.invoked).to be(true)
|
124
|
+
expect(failed_job_count).to eq 1
|
125
|
+
expect(queued_job_count).to eq 0
|
126
|
+
expect(job_group_count).to eq 0
|
127
|
+
end
|
128
|
+
|
129
|
+
it "runs completion job if last job failed" do
|
130
|
+
Delayed::Worker.max_attempts = 2
|
131
|
+
|
132
|
+
job_group.enqueue(NoOpJob.new)
|
133
|
+
job_group.enqueue(FailingJob.new)
|
134
|
+
job_group.mark_queueing_complete
|
135
|
+
expect(queued_job_count).to eq 2
|
136
|
+
expect(job_group_count).to eq 1
|
137
|
+
|
138
|
+
# Run the non failing job
|
139
|
+
Delayed::Worker.new.work_off(1)
|
140
|
+
expect(failed_job_count).to eq 0
|
141
|
+
expect(queued_job_count).to eq 1
|
142
|
+
expect(job_group_count).to eq 1
|
143
|
+
|
144
|
+
# Run the job which should error
|
145
|
+
Delayed::Worker.new.work_off(1)
|
146
|
+
# Completion job is not invoked
|
147
|
+
expect(CompletionJob.invoked).to be(false)
|
148
|
+
expect(failed_job_count).to eq 0
|
149
|
+
expect(queued_job_count).to eq 1
|
150
|
+
expect(job_group_count).to eq 1
|
151
|
+
|
152
|
+
# Run the job again which should fail
|
153
|
+
Timecop.travel(1.minute.from_now)
|
154
|
+
Delayed::Worker.new.work_off(1)
|
155
|
+
expect(failed_job_count).to eq 1
|
156
|
+
expect(queued_job_count).to eq 1
|
157
|
+
expect(job_group_count).to eq 0
|
158
|
+
|
159
|
+
# Run the completion job
|
160
|
+
Delayed::Worker.new.work_off(1)
|
161
|
+
# Completion job is invoked
|
162
|
+
expect(CompletionJob.invoked).to be(true)
|
163
|
+
expect(failed_job_count).to eq 1
|
164
|
+
expect(queued_job_count).to eq 0
|
165
|
+
expect(job_group_count).to eq 0
|
117
166
|
end
|
118
167
|
end
|
119
168
|
end
|
@@ -121,12 +170,12 @@ describe Delayed::JobGroups::Plugin do
|
|
121
170
|
it "doesn't retry failed jobs if the job group has been canceled" do
|
122
171
|
job_group.cancel
|
123
172
|
Delayed::Job.enqueue(FailingJob.new, job_group_id: job_group.id)
|
124
|
-
queued_job_count.
|
173
|
+
expect(queued_job_count).to eq 1
|
125
174
|
|
126
175
|
# Run the job which should fail and should not queue a retry
|
127
176
|
Delayed::Worker.new.work_off(1)
|
128
|
-
failed_job_count.
|
129
|
-
queued_job_count.
|
177
|
+
expect(failed_job_count).to eq 1
|
178
|
+
expect(queued_job_count).to eq 0
|
130
179
|
end
|
131
180
|
|
132
181
|
it "doesn't run jobs until they're unblocked" do
|
@@ -136,32 +185,32 @@ describe Delayed::JobGroups::Plugin do
|
|
136
185
|
job_group.enqueue(NoOpJob.new)
|
137
186
|
job_group.enqueue(NoOpJob.new)
|
138
187
|
job_group.mark_queueing_complete
|
139
|
-
Delayed::Job.count.
|
188
|
+
expect(Delayed::Job.count).to eq 2
|
140
189
|
|
141
190
|
# No jobs should run because they're blocked
|
142
191
|
(successes, failures) = Delayed::Worker.new.work_off
|
143
|
-
successes.
|
144
|
-
failures.
|
145
|
-
Delayed::Job.count.
|
192
|
+
expect(successes).to eq 0
|
193
|
+
expect(failures).to eq 0
|
194
|
+
expect(Delayed::Job.count).to eq 2
|
146
195
|
|
147
196
|
job_group.unblock
|
148
197
|
|
149
198
|
# Run our first job
|
150
199
|
Delayed::Worker.new.work_off(1)
|
151
|
-
CompletionJob.invoked.
|
152
|
-
job_group_count.
|
153
|
-
Delayed::Job.count.
|
200
|
+
expect(CompletionJob.invoked).to be(false)
|
201
|
+
expect(job_group_count).to eq 1
|
202
|
+
expect(Delayed::Job.count).to eq 1
|
154
203
|
|
155
204
|
# Run our second job which should enqueue the completion job
|
156
205
|
Delayed::Worker.new.work_off(1)
|
157
|
-
CompletionJob.invoked.
|
158
|
-
job_group_count.
|
159
|
-
Delayed::Job.count.
|
206
|
+
expect(CompletionJob.invoked).to be(false)
|
207
|
+
expect(job_group_count).to eq 0
|
208
|
+
expect(Delayed::Job.count).to eq 1
|
160
209
|
|
161
210
|
# Now we should run the completion job
|
162
211
|
Delayed::Worker.new.work_off(1)
|
163
|
-
CompletionJob.invoked.
|
164
|
-
Delayed::Job.count.
|
212
|
+
expect(CompletionJob.invoked).to be(true)
|
213
|
+
expect(Delayed::Job.count).to eq 0
|
165
214
|
end
|
166
215
|
|
167
216
|
context "when a cancellation job is provided" do
|
@@ -176,23 +225,23 @@ describe Delayed::JobGroups::Plugin do
|
|
176
225
|
job_group.enqueue(FailingJob.new)
|
177
226
|
job_group.enqueue(NoOpJob.new)
|
178
227
|
job_group.mark_queueing_complete
|
179
|
-
queued_job_count.
|
180
|
-
job_group_count.
|
228
|
+
expect(queued_job_count).to eq 2
|
229
|
+
expect(job_group_count).to eq 1
|
181
230
|
|
182
231
|
# Run the job which should fail and cancel the JobGroup
|
183
232
|
Delayed::Worker.new.work_off(1)
|
184
|
-
CompletionJob.invoked.
|
185
|
-
CancellationJob.invoked.
|
186
|
-
failed_job_count.
|
233
|
+
expect(CompletionJob.invoked).to be(false)
|
234
|
+
expect(CancellationJob.invoked).to be(false)
|
235
|
+
expect(failed_job_count).to eq 1
|
187
236
|
|
188
|
-
queued_job_count.
|
189
|
-
job_group_count.
|
237
|
+
expect(queued_job_count).to eq 1
|
238
|
+
expect(job_group_count).to eq 0
|
190
239
|
|
191
240
|
# Now we should run the cancellation job
|
192
241
|
Delayed::Worker.new.work_off(1)
|
193
|
-
CompletionJob.invoked.
|
194
|
-
CancellationJob.invoked.
|
195
|
-
queued_job_count.
|
242
|
+
expect(CompletionJob.invoked).to be(false)
|
243
|
+
expect(CancellationJob.invoked).to be(true)
|
244
|
+
expect(queued_job_count).to eq 0
|
196
245
|
end
|
197
246
|
|
198
247
|
it "runs the cancellation job after the job group is cancelled" do
|
@@ -201,14 +250,14 @@ describe Delayed::JobGroups::Plugin do
|
|
201
250
|
job_group.mark_queueing_complete
|
202
251
|
job_group.cancel
|
203
252
|
|
204
|
-
#cancellation job should be queued
|
205
|
-
queued_job_count.
|
206
|
-
CancellationJob.invoked.
|
253
|
+
# cancellation job should be queued
|
254
|
+
expect(queued_job_count).to eq 1
|
255
|
+
expect(CancellationJob.invoked).to be(false)
|
207
256
|
|
208
257
|
# Run the cancellation job
|
209
258
|
Delayed::Worker.new.work_off(1)
|
210
|
-
CancellationJob.invoked.
|
211
|
-
queued_job_count.
|
259
|
+
expect(CancellationJob.invoked).to be(true)
|
260
|
+
expect(queued_job_count).to eq 0
|
212
261
|
end
|
213
262
|
end
|
214
263
|
|
@@ -219,21 +268,21 @@ describe Delayed::JobGroups::Plugin do
|
|
219
268
|
job_group.enqueue(NoOpJob.new)
|
220
269
|
job_group.enqueue(NoOpJob.new)
|
221
270
|
job_group.mark_queueing_complete
|
222
|
-
job_group_count.
|
223
|
-
queued_job_count.
|
224
|
-
failed_job_count.
|
271
|
+
expect(job_group_count).to eq 1
|
272
|
+
expect(queued_job_count).to eq 2
|
273
|
+
expect(failed_job_count).to eq 0
|
225
274
|
|
226
275
|
# Run our first job
|
227
276
|
Delayed::Worker.new.work_off(1)
|
228
|
-
job_group_count.
|
229
|
-
queued_job_count.
|
230
|
-
failed_job_count.
|
277
|
+
expect(job_group_count).to eq 1
|
278
|
+
expect(queued_job_count).to eq 1
|
279
|
+
expect(failed_job_count).to eq 0
|
231
280
|
|
232
281
|
# Run our second job which should delete the job group
|
233
282
|
Delayed::Worker.new.work_off(1)
|
234
|
-
job_group_count.
|
235
|
-
queued_job_count.
|
236
|
-
failed_job_count.
|
283
|
+
expect(job_group_count).to eq 0
|
284
|
+
expect(queued_job_count).to eq 0
|
285
|
+
expect(failed_job_count).to eq 0
|
237
286
|
end
|
238
287
|
end
|
239
288
|
|