resque-approve 0.0.1
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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +30 -0
- data/lib/resque-approve.rb +10 -0
- data/lib/resque/approve_server.rb +232 -0
- data/lib/resque/plugins/approve.rb +77 -0
- data/lib/resque/plugins/approve/approval_key_list.rb +100 -0
- data/lib/resque/plugins/approve/cleaner.rb +44 -0
- data/lib/resque/plugins/approve/pending_job.rb +187 -0
- data/lib/resque/plugins/approve/pending_job_queue.rb +128 -0
- data/lib/resque/plugins/approve/redis_access.rb +16 -0
- data/lib/resque/plugins/version.rb +9 -0
- data/lib/resque/server/public/approve.css +56 -0
- data/lib/resque/server/views/_approval_key_list_pagination.erb +67 -0
- data/lib/resque/server/views/_approval_key_rows.erb +18 -0
- data/lib/resque/server/views/_job_list_table.erb +30 -0
- data/lib/resque/server/views/_job_pagination.erb +67 -0
- data/lib/resque/server/views/approval_keys.erb +66 -0
- data/lib/resque/server/views/job_details.erb +82 -0
- data/lib/resque/server/views/job_list.erb +58 -0
- data/lib/tasks/resque-approve_tasks.rake +6 -0
- data/spec/approve/approval_key_list_spec.rb +289 -0
- data/spec/approve/cleaner_spec.rb +96 -0
- data/spec/approve/pending_job_queue_spec.rb +219 -0
- data/spec/approve/pending_job_spec.rb +326 -0
- data/spec/approve_spec.rb +188 -0
- data/spec/examples.txt +135 -0
- data/spec/rails_helper.rb +35 -0
- data/spec/server/public/approve.css_spec.rb +18 -0
- data/spec/server/views/approval_keys.erb_spec.rb +105 -0
- data/spec/server/views/job_details.erb_spec.rb +133 -0
- data/spec/server/views/job_list.erb_spec.rb +108 -0
- data/spec/spec_helper.rb +101 -0
- data/spec/support/config/redis-auth.yml +12 -0
- data/spec/support/jobs/01_basic_job.rb +13 -0
- data/spec/support/jobs/auto_delete_approval_key_job.rb +5 -0
- data/spec/support/purge_all.rb +15 -0
- metadata +292 -0
@@ -0,0 +1,188 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails_helper"
|
4
|
+
|
5
|
+
RSpec.describe Resque::Plugins::Approve do
|
6
|
+
let(:job) { BasicJob }
|
7
|
+
let(:approval_key) { "approval key #{Faker::Lorem.sentence}" }
|
8
|
+
let(:test_args_without_hash) do
|
9
|
+
rand_args = []
|
10
|
+
rand_args << Faker::Lorem.sentence
|
11
|
+
rand_args << Faker::Lorem.paragraph
|
12
|
+
rand_args << SecureRandom.uuid.to_s
|
13
|
+
rand_args << rand(0..1_000_000_000_000_000_000_000_000).to_s
|
14
|
+
rand_args << rand(0..1_000_000_000_000).seconds.ago.to_s
|
15
|
+
rand_args << rand(0..1_000_000_000_000).seconds.from_now.to_s
|
16
|
+
rand_args << Array.new(rand(1..5)) { Faker::Lorem.word }
|
17
|
+
|
18
|
+
rand_args.sample(rand(3..rand_args.length))
|
19
|
+
end
|
20
|
+
let(:test_args_with_hash) do
|
21
|
+
rand_args = []
|
22
|
+
rand_args << Faker::Lorem.sentence
|
23
|
+
rand_args << Faker::Lorem.paragraph
|
24
|
+
rand_args << SecureRandom.uuid.to_s
|
25
|
+
rand_args << rand(0..1_000_000_000_000_000_000_000_000).to_s
|
26
|
+
rand_args << rand(0..1_000_000_000_000).seconds.ago.to_s
|
27
|
+
rand_args << rand(0..1_000_000_000_000).seconds.from_now.to_s
|
28
|
+
rand_args << Array.new(rand(1..5)) { Faker::Lorem.word }
|
29
|
+
rand_args << Array.new(rand(1..5)).each_with_object({}) do |_nil_value, sub_hash|
|
30
|
+
sub_hash[Faker::Lorem.word] = Faker::Lorem.word
|
31
|
+
end
|
32
|
+
|
33
|
+
rand_args = rand_args.sample(rand(3..rand_args.length))
|
34
|
+
|
35
|
+
options_hash = {}
|
36
|
+
options_hash[Faker::Lorem.word] = Faker::Lorem.sentence
|
37
|
+
options_hash[Faker::Lorem.word] = Faker::Lorem.paragraph
|
38
|
+
options_hash[Faker::Lorem.word] = SecureRandom.uuid.to_s
|
39
|
+
options_hash[Faker::Lorem.word] = rand(0..1_000_000_000_000_000_000_000_000).to_s
|
40
|
+
options_hash[Faker::Lorem.word] = rand(0..1_000_000_000_000).seconds.ago.to_s
|
41
|
+
options_hash[Faker::Lorem.word] = rand(0..1_000_000_000_000).seconds.from_now.to_s
|
42
|
+
options_hash[Faker::Lorem.word] = Array.new(rand(1..5)) { Faker::Lorem.word }
|
43
|
+
options_hash[Faker::Lorem.word] = Array.new(rand(1..5)).
|
44
|
+
each_with_object({}) do |_nil_value, sub_hash|
|
45
|
+
sub_hash[Faker::Lorem.word] = Faker::Lorem.word
|
46
|
+
end
|
47
|
+
|
48
|
+
rand_args << options_hash.slice(*options_hash.keys.sample(rand(5..options_hash.keys.length)))
|
49
|
+
|
50
|
+
rand_args
|
51
|
+
end
|
52
|
+
let(:test_args_without_hash_approve) do
|
53
|
+
[*test_args_without_hash, approval_key: approval_key]
|
54
|
+
end
|
55
|
+
let(:test_args_with_hash_approve) do
|
56
|
+
test_args = test_args_with_hash.dup
|
57
|
+
test_args << test_args.pop.merge(approval_key: approval_key)
|
58
|
+
|
59
|
+
test_args
|
60
|
+
end
|
61
|
+
|
62
|
+
before(:each) do
|
63
|
+
allow(BasicJob).to receive(:perform)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "has auto_delete_approval_key" do
|
67
|
+
expect(BasicJob.auto_delete_approval_key).to be_falsey
|
68
|
+
end
|
69
|
+
|
70
|
+
it "does not delay jobs that are enqueued without delay args" do
|
71
|
+
Resque.enqueue BasicJob, *test_args_with_hash
|
72
|
+
|
73
|
+
expect(BasicJob).to have_received(:perform).with(*test_args_with_hash)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "does not delay jobs that are enqueued without delay args no options" do
|
77
|
+
Resque.enqueue BasicJob, *test_args_without_hash
|
78
|
+
|
79
|
+
expect(BasicJob).to have_received(:perform).with(*test_args_without_hash)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "delays jobs that are enqueued with the delay args" do
|
83
|
+
Resque.enqueue BasicJob, *test_args_with_hash_approve
|
84
|
+
|
85
|
+
expect(BasicJob).not_to have_received(:perform)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "delays jobs that are enqueued with the delay args that did not have other options" do
|
89
|
+
Resque.enqueue BasicJob, *test_args_without_hash_approve
|
90
|
+
|
91
|
+
expect(BasicJob).not_to have_received(:perform)
|
92
|
+
end
|
93
|
+
|
94
|
+
context "end-to-end testing" do
|
95
|
+
let(:job_order) { [0, 1].sample(100) }
|
96
|
+
let(:approve_jobs) { [test_args_without_hash_approve, test_args_with_hash_approve] }
|
97
|
+
let(:param_jobs) { [test_args_without_hash, test_args_with_hash] }
|
98
|
+
let(:jobs) { [approve_jobs[job_order.first], approve_jobs[job_order.last]] }
|
99
|
+
|
100
|
+
it "does not release a job for the wrong key" do
|
101
|
+
jobs.each { |job_args| Resque.enqueue BasicJob, *job_args }
|
102
|
+
|
103
|
+
expect(BasicJob).not_to have_received(:perform)
|
104
|
+
|
105
|
+
Resque::Plugins::Approve.approve "any key"
|
106
|
+
|
107
|
+
expect(BasicJob).not_to have_received(:perform)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "releases one job" do
|
111
|
+
jobs.each do |job_args|
|
112
|
+
Resque.enqueue BasicJob, *job_args
|
113
|
+
end
|
114
|
+
|
115
|
+
expect(BasicJob).not_to have_received(:perform)
|
116
|
+
|
117
|
+
Resque::Plugins::Approve.approve_one approval_key
|
118
|
+
|
119
|
+
expect(BasicJob).to have_received(:perform).with(*param_jobs[job_order.first])
|
120
|
+
expect(BasicJob).not_to have_received(:perform).with(*param_jobs[job_order.last])
|
121
|
+
end
|
122
|
+
|
123
|
+
it "releases all jobs" do
|
124
|
+
jobs.each { |job_args| Resque.enqueue BasicJob, *job_args }
|
125
|
+
|
126
|
+
expect(BasicJob).not_to have_received(:perform)
|
127
|
+
|
128
|
+
Resque::Plugins::Approve.approve approval_key
|
129
|
+
|
130
|
+
expect(BasicJob).to have_received(:perform).with(*param_jobs[job_order.first])
|
131
|
+
expect(BasicJob).to have_received(:perform).with(*param_jobs[job_order.last])
|
132
|
+
end
|
133
|
+
|
134
|
+
it "deletes all jobs" do
|
135
|
+
jobs.each { |job_args| Resque.enqueue BasicJob, *job_args }
|
136
|
+
|
137
|
+
expect(BasicJob).not_to have_received(:perform)
|
138
|
+
expect(Resque::Plugins::Approve::PendingJobQueue.new(approval_key).num_jobs).to eq 2
|
139
|
+
|
140
|
+
Resque::Plugins::Approve.remove approval_key
|
141
|
+
|
142
|
+
expect(BasicJob).not_to have_received(:perform)
|
143
|
+
expect(Resque::Plugins::Approve::PendingJobQueue.new(approval_key).num_jobs).to be_zero
|
144
|
+
end
|
145
|
+
|
146
|
+
it "deletes one job" do
|
147
|
+
jobs.each { |job_args| Resque.enqueue BasicJob, *job_args }
|
148
|
+
|
149
|
+
expect(BasicJob).not_to have_received(:perform)
|
150
|
+
expect(Resque::Plugins::Approve::PendingJobQueue.new(approval_key).num_jobs).to eq 2
|
151
|
+
|
152
|
+
Resque::Plugins::Approve.remove_one approval_key
|
153
|
+
|
154
|
+
expect(BasicJob).not_to have_received(:perform)
|
155
|
+
expect(Resque::Plugins::Approve::PendingJobQueue.new(approval_key).num_jobs).to eq 1
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe "before_perform_approve" do
|
160
|
+
it "returns true if the job is not to be approved" do
|
161
|
+
expect(BasicJob.before_perform_approve(*test_args_without_hash)).to be_truthy
|
162
|
+
expect { BasicJob.before_perform_approve(*test_args_without_hash) }.not_to(change { test_args_without_hash })
|
163
|
+
expect(BasicJob.before_perform_approve(*test_args_with_hash)).to be_truthy
|
164
|
+
expect { BasicJob.before_perform_approve(*test_args_with_hash) }.not_to(change { test_args_with_hash })
|
165
|
+
end
|
166
|
+
|
167
|
+
it "raises Resque::Job::DontPerform if it is to be approved" do
|
168
|
+
expect { BasicJob.before_perform_approve(*test_args_without_hash_approve) }.to raise_exception(Resque::Job::DontPerform)
|
169
|
+
expect { BasicJob.before_perform_approve(*test_args_with_hash_approve) }.to raise_exception(Resque::Job::DontPerform)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe "before_enqueue_approve" do
|
174
|
+
it "returns true if the job is not to be approved" do
|
175
|
+
expect(BasicJob.before_enqueue_approve(*test_args_without_hash)).to be_truthy
|
176
|
+
expect { BasicJob.before_enqueue_approve(*test_args_without_hash) }.not_to(change { test_args_without_hash })
|
177
|
+
expect(BasicJob.before_enqueue_approve(*test_args_with_hash)).to be_truthy
|
178
|
+
expect { BasicJob.before_enqueue_approve(*test_args_with_hash) }.not_to(change { test_args_with_hash })
|
179
|
+
end
|
180
|
+
|
181
|
+
it "raises Resque::Job::DontPerform if it is to be approved" do
|
182
|
+
expect(BasicJob.before_enqueue_approve(*test_args_without_hash_approve)).to be_falsey
|
183
|
+
expect { BasicJob.before_enqueue_approve(*test_args_without_hash_approve) }.not_to(change { test_args_without_hash })
|
184
|
+
expect(BasicJob.before_enqueue_approve(*test_args_with_hash_approve)).to be_falsey
|
185
|
+
expect { BasicJob.before_enqueue_approve(*test_args_with_hash_approve) }.not_to(change { test_args_with_hash })
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
data/spec/examples.txt
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
example_id | status | run_time |
|
2
|
+
---------------------------------------------------- | ------ | --------------- |
|
3
|
+
./spec/approve/approval_key_list_spec.rb[1:1:1] | passed | 0.00255 seconds |
|
4
|
+
./spec/approve/approval_key_list_spec.rb[1:1:2] | passed | 0.00225 seconds |
|
5
|
+
./spec/approve/approval_key_list_spec.rb[1:1:3] | passed | 0.00245 seconds |
|
6
|
+
./spec/approve/approval_key_list_spec.rb[1:2:1] | passed | 0.00511 seconds |
|
7
|
+
./spec/approve/approval_key_list_spec.rb[1:2:2] | passed | 0.01015 seconds |
|
8
|
+
./spec/approve/approval_key_list_spec.rb[1:3:1] | passed | 0.00557 seconds |
|
9
|
+
./spec/approve/approval_key_list_spec.rb[1:3:2] | passed | 0.00402 seconds |
|
10
|
+
./spec/approve/approval_key_list_spec.rb[1:4:1] | passed | 0.01031 seconds |
|
11
|
+
./spec/approve/approval_key_list_spec.rb[1:4:2] | passed | 0.01061 seconds |
|
12
|
+
./spec/approve/approval_key_list_spec.rb[1:4:3] | passed | 0.00683 seconds |
|
13
|
+
./spec/approve/approval_key_list_spec.rb[1:5:1] | passed | 0.03674 seconds |
|
14
|
+
./spec/approve/approval_key_list_spec.rb[1:5:2] | passed | 0.04074 seconds |
|
15
|
+
./spec/approve/approval_key_list_spec.rb[1:5:3] | passed | 0.03426 seconds |
|
16
|
+
./spec/approve/approval_key_list_spec.rb[1:6:1] | passed | 0.04122 seconds |
|
17
|
+
./spec/approve/approval_key_list_spec.rb[1:6:2] | passed | 0.03381 seconds |
|
18
|
+
./spec/approve/approval_key_list_spec.rb[1:6:3] | passed | 0.02892 seconds |
|
19
|
+
./spec/approve/approval_key_list_spec.rb[1:7:1:1:1] | passed | 0.40579 seconds |
|
20
|
+
./spec/approve/approval_key_list_spec.rb[1:7:1:1:2] | passed | 0.36629 seconds |
|
21
|
+
./spec/approve/approval_key_list_spec.rb[1:7:1:1:3] | passed | 0.39571 seconds |
|
22
|
+
./spec/approve/approval_key_list_spec.rb[1:7:1:1:4] | passed | 0.35925 seconds |
|
23
|
+
./spec/approve/approval_key_list_spec.rb[1:7:1:1:5] | passed | 0.36585 seconds |
|
24
|
+
./spec/approve/approval_key_list_spec.rb[1:7:1:1:6] | passed | 0.37009 seconds |
|
25
|
+
./spec/approve/approval_key_list_spec.rb[1:7:1:1:7] | passed | 0.39149 seconds |
|
26
|
+
./spec/approve/approval_key_list_spec.rb[1:7:2:1:1] | passed | 0.37861 seconds |
|
27
|
+
./spec/approve/approval_key_list_spec.rb[1:7:2:1:2] | passed | 0.35771 seconds |
|
28
|
+
./spec/approve/approval_key_list_spec.rb[1:7:2:1:3] | passed | 0.37499 seconds |
|
29
|
+
./spec/approve/approval_key_list_spec.rb[1:7:2:1:4] | passed | 0.39712 seconds |
|
30
|
+
./spec/approve/approval_key_list_spec.rb[1:7:2:1:5] | passed | 0.36924 seconds |
|
31
|
+
./spec/approve/approval_key_list_spec.rb[1:7:2:1:6] | passed | 0.37372 seconds |
|
32
|
+
./spec/approve/approval_key_list_spec.rb[1:7:2:1:7] | passed | 0.38063 seconds |
|
33
|
+
./spec/approve/approval_key_list_spec.rb[1:7:3:1:1] | passed | 0.43381 seconds |
|
34
|
+
./spec/approve/approval_key_list_spec.rb[1:7:3:1:2] | passed | 0.37502 seconds |
|
35
|
+
./spec/approve/approval_key_list_spec.rb[1:7:3:1:3] | passed | 0.39405 seconds |
|
36
|
+
./spec/approve/approval_key_list_spec.rb[1:7:3:1:4] | passed | 0.51229 seconds |
|
37
|
+
./spec/approve/approval_key_list_spec.rb[1:7:3:1:5] | passed | 0.37889 seconds |
|
38
|
+
./spec/approve/approval_key_list_spec.rb[1:7:3:1:6] | passed | 0.37424 seconds |
|
39
|
+
./spec/approve/approval_key_list_spec.rb[1:7:3:1:7] | passed | 0.37768 seconds |
|
40
|
+
./spec/approve/approval_key_list_spec.rb[1:8:1] | passed | 0.05366 seconds |
|
41
|
+
./spec/approve/approval_key_list_spec.rb[1:9:1] | passed | 0.04847 seconds |
|
42
|
+
./spec/approve/cleaner_spec.rb[1:1:1] | passed | 0.02613 seconds |
|
43
|
+
./spec/approve/cleaner_spec.rb[1:1:2] | passed | 0.01501 seconds |
|
44
|
+
./spec/approve/cleaner_spec.rb[1:1:3] | passed | 0.0197 seconds |
|
45
|
+
./spec/approve/cleaner_spec.rb[1:2:1] | passed | 0.02788 seconds |
|
46
|
+
./spec/approve/cleaner_spec.rb[1:2:2] | passed | 0.03141 seconds |
|
47
|
+
./spec/approve/cleaner_spec.rb[1:3:1] | passed | 0.02216 seconds |
|
48
|
+
./spec/approve/pending_job_queue_spec.rb[1:1:1] | passed | 0.01294 seconds |
|
49
|
+
./spec/approve/pending_job_queue_spec.rb[1:1:2] | passed | 0.0205 seconds |
|
50
|
+
./spec/approve/pending_job_queue_spec.rb[1:1:3] | passed | 0.02482 seconds |
|
51
|
+
./spec/approve/pending_job_queue_spec.rb[1:1:4:1] | passed | 0.02537 seconds |
|
52
|
+
./spec/approve/pending_job_queue_spec.rb[1:2:1] | passed | 0.0162 seconds |
|
53
|
+
./spec/approve/pending_job_queue_spec.rb[1:2:2] | passed | 0.01656 seconds |
|
54
|
+
./spec/approve/pending_job_queue_spec.rb[1:3:1] | passed | 0.01922 seconds |
|
55
|
+
./spec/approve/pending_job_queue_spec.rb[1:4:1] | passed | 0.01837 seconds |
|
56
|
+
./spec/approve/pending_job_queue_spec.rb[1:5:1] | passed | 0.01748 seconds |
|
57
|
+
./spec/approve/pending_job_queue_spec.rb[1:6:1] | passed | 0.01392 seconds |
|
58
|
+
./spec/approve/pending_job_queue_spec.rb[1:7:1] | passed | 0.01642 seconds |
|
59
|
+
./spec/approve/pending_job_queue_spec.rb[1:8:1] | passed | 0.0129 seconds |
|
60
|
+
./spec/approve/pending_job_queue_spec.rb[1:9:1] | passed | 0.05695 seconds |
|
61
|
+
./spec/approve/pending_job_queue_spec.rb[1:9:2] | passed | 0.04944 seconds |
|
62
|
+
./spec/approve/pending_job_queue_spec.rb[1:9:3] | passed | 0.06517 seconds |
|
63
|
+
./spec/approve/pending_job_queue_spec.rb[1:9:4] | passed | 0.0584 seconds |
|
64
|
+
./spec/approve/pending_job_queue_spec.rb[1:9:5] | passed | 0.06542 seconds |
|
65
|
+
./spec/approve/pending_job_queue_spec.rb[1:10:1] | passed | 0.01361 seconds |
|
66
|
+
./spec/approve/pending_job_queue_spec.rb[1:11:1] | passed | 0.02146 seconds |
|
67
|
+
./spec/approve/pending_job_spec.rb[1:1:1] | passed | 0.00433 seconds |
|
68
|
+
./spec/approve/pending_job_spec.rb[1:1:2] | passed | 0.00373 seconds |
|
69
|
+
./spec/approve/pending_job_spec.rb[1:1:3] | passed | 0.0051 seconds |
|
70
|
+
./spec/approve/pending_job_spec.rb[1:1:4] | passed | 0.00605 seconds |
|
71
|
+
./spec/approve/pending_job_spec.rb[1:1:5] | passed | 0.00347 seconds |
|
72
|
+
./spec/approve/pending_job_spec.rb[1:1:6] | passed | 0.00661 seconds |
|
73
|
+
./spec/approve/pending_job_spec.rb[1:1:7] | passed | 0.00352 seconds |
|
74
|
+
./spec/approve/pending_job_spec.rb[1:2:1] | passed | 0.00653 seconds |
|
75
|
+
./spec/approve/pending_job_spec.rb[1:2:2] | passed | 0.00442 seconds |
|
76
|
+
./spec/approve/pending_job_spec.rb[1:2:3] | passed | 0.00445 seconds |
|
77
|
+
./spec/approve/pending_job_spec.rb[1:2:4] | passed | 0.00272 seconds |
|
78
|
+
./spec/approve/pending_job_spec.rb[1:2:5] | passed | 0.004 seconds |
|
79
|
+
./spec/approve/pending_job_spec.rb[1:3:1:1] | passed | 0.00519 seconds |
|
80
|
+
./spec/approve/pending_job_spec.rb[1:3:1:2] | passed | 0.00627 seconds |
|
81
|
+
./spec/approve/pending_job_spec.rb[1:3:1:3] | passed | 0.00455 seconds |
|
82
|
+
./spec/approve/pending_job_spec.rb[1:3:1:4] | passed | 0.00915 seconds |
|
83
|
+
./spec/approve/pending_job_spec.rb[1:3:1:5] | passed | 0.00655 seconds |
|
84
|
+
./spec/approve/pending_job_spec.rb[1:3:1:6] | passed | 0.0164 seconds |
|
85
|
+
./spec/approve/pending_job_spec.rb[1:3:1:7] | passed | 0.0036 seconds |
|
86
|
+
./spec/approve/pending_job_spec.rb[1:4:1:1] | passed | 0.0096 seconds |
|
87
|
+
./spec/approve/pending_job_spec.rb[1:4:1:2] | passed | 0.00483 seconds |
|
88
|
+
./spec/approve/pending_job_spec.rb[1:4:1:3] | passed | 0.00662 seconds |
|
89
|
+
./spec/approve/pending_job_spec.rb[1:4:1:4] | passed | 0.00928 seconds |
|
90
|
+
./spec/approve/pending_job_spec.rb[1:4:1:5] | passed | 0.00709 seconds |
|
91
|
+
./spec/approve/pending_job_spec.rb[1:4:1:6] | passed | 0.00762 seconds |
|
92
|
+
./spec/approve/pending_job_spec.rb[1:4:1:7] | passed | 0.00811 seconds |
|
93
|
+
./spec/approve/pending_job_spec.rb[1:5:1] | passed | 0.00464 seconds |
|
94
|
+
./spec/approve/pending_job_spec.rb[1:6:1] | passed | 0.0119 seconds |
|
95
|
+
./spec/approve/pending_job_spec.rb[1:7:1] | passed | 0.00542 seconds |
|
96
|
+
./spec/approve/pending_job_spec.rb[1:7:2] | passed | 0.00556 seconds |
|
97
|
+
./spec/approve/pending_job_spec.rb[1:7:3] | passed | 0.00494 seconds |
|
98
|
+
./spec/approve/pending_job_spec.rb[1:8:1] | passed | 0.0057 seconds |
|
99
|
+
./spec/approve/pending_job_spec.rb[1:8:2] | passed | 0.00698 seconds |
|
100
|
+
./spec/approve/pending_job_spec.rb[1:8:3] | passed | 0.00619 seconds |
|
101
|
+
./spec/approve/pending_job_spec.rb[1:8:4] | passed | 0.00412 seconds |
|
102
|
+
./spec/approve/pending_job_spec.rb[1:8:5] | passed | 0.00897 seconds |
|
103
|
+
./spec/approve_spec.rb[1:1] | passed | 0.01388 seconds |
|
104
|
+
./spec/approve_spec.rb[1:2] | passed | 0.00621 seconds |
|
105
|
+
./spec/approve_spec.rb[1:3] | passed | 0.00746 seconds |
|
106
|
+
./spec/approve_spec.rb[1:4] | passed | 0.48466 seconds |
|
107
|
+
./spec/approve_spec.rb[1:5] | passed | 0.00489 seconds |
|
108
|
+
./spec/approve_spec.rb[1:6:1] | passed | 0.01283 seconds |
|
109
|
+
./spec/approve_spec.rb[1:6:2] | passed | 0.01226 seconds |
|
110
|
+
./spec/approve_spec.rb[1:6:3] | passed | 0.00968 seconds |
|
111
|
+
./spec/approve_spec.rb[1:6:4] | passed | 0.01214 seconds |
|
112
|
+
./spec/approve_spec.rb[1:6:5] | passed | 0.01086 seconds |
|
113
|
+
./spec/approve_spec.rb[1:7:1] | passed | 0.00619 seconds |
|
114
|
+
./spec/approve_spec.rb[1:7:2] | passed | 0.01295 seconds |
|
115
|
+
./spec/approve_spec.rb[1:8:1] | passed | 0.00699 seconds |
|
116
|
+
./spec/approve_spec.rb[1:8:2] | passed | 0.0144 seconds |
|
117
|
+
./spec/server/public/approve.css_spec.rb[1:1] | passed | 0.04261 seconds |
|
118
|
+
./spec/server/views/approval_keys.erb_spec.rb[1:1:1] | passed | 0.02506 seconds |
|
119
|
+
./spec/server/views/approval_keys.erb_spec.rb[1:1:2] | passed | 0.02492 seconds |
|
120
|
+
./spec/server/views/approval_keys.erb_spec.rb[1:1:3] | passed | 0.03236 seconds |
|
121
|
+
./spec/server/views/approval_keys.erb_spec.rb[1:1:4] | passed | 0.02806 seconds |
|
122
|
+
./spec/server/views/approval_keys.erb_spec.rb[1:2] | passed | 0.04456 seconds |
|
123
|
+
./spec/server/views/approval_keys.erb_spec.rb[1:3] | passed | 0.0421 seconds |
|
124
|
+
./spec/server/views/job_details.erb_spec.rb[1:1] | passed | 0.01158 seconds |
|
125
|
+
./spec/server/views/job_details.erb_spec.rb[1:2] | passed | 0.01316 seconds |
|
126
|
+
./spec/server/views/job_details.erb_spec.rb[1:3] | passed | 0.02037 seconds |
|
127
|
+
./spec/server/views/job_details.erb_spec.rb[1:4] | passed | 0.01779 seconds |
|
128
|
+
./spec/server/views/job_details.erb_spec.rb[1:5] | passed | 0.02131 seconds |
|
129
|
+
./spec/server/views/job_details.erb_spec.rb[1:6] | passed | 0.02355 seconds |
|
130
|
+
./spec/server/views/job_list.erb_spec.rb[1:1:1] | passed | 0.02346 seconds |
|
131
|
+
./spec/server/views/job_list.erb_spec.rb[1:1:2] | passed | 0.02557 seconds |
|
132
|
+
./spec/server/views/job_list.erb_spec.rb[1:1:3] | passed | 0.03454 seconds |
|
133
|
+
./spec/server/views/job_list.erb_spec.rb[1:1:4] | passed | 0.03607 seconds |
|
134
|
+
./spec/server/views/job_list.erb_spec.rb[1:2] | passed | 0.04666 seconds |
|
135
|
+
./spec/server/views/job_list.erb_spec.rb[1:3] | passed | 0.03115 seconds |
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "simplecov"
|
4
|
+
SimpleCov.start
|
5
|
+
|
6
|
+
require "spec_helper"
|
7
|
+
require "cornucopia/rspec_hooks"
|
8
|
+
require "resque-approve"
|
9
|
+
require "yaml"
|
10
|
+
require "timecop"
|
11
|
+
require "faker"
|
12
|
+
require "rack/test"
|
13
|
+
require "resque/server"
|
14
|
+
require "resque/approve_server"
|
15
|
+
require "resque-scheduler"
|
16
|
+
|
17
|
+
Dir[File.expand_path("spec/support/**/*.rb"), File.dirname(__FILE__)].sort.each do |f|
|
18
|
+
require f unless File.directory?(f)
|
19
|
+
end
|
20
|
+
|
21
|
+
FileUtils.mkdir_p(File.expand_path("../log", File.dirname(__FILE__)))
|
22
|
+
|
23
|
+
redis_logger = Logger.new(File.expand_path("../log/redis.log", File.dirname(__FILE__)))
|
24
|
+
redis_logger.level = Logger::DEBUG
|
25
|
+
redis_logger.formatter = Logger::Formatter.new
|
26
|
+
|
27
|
+
redis_options = YAML.load_file(File.expand_path("support/config/redis-auth.yml", File.dirname(__FILE__)))
|
28
|
+
Redis.current = Redis.new(redis_options.merge(logger: redis_logger))
|
29
|
+
|
30
|
+
Resque.redis = Redis.new(redis_options)
|
31
|
+
Resque.inline = true
|
32
|
+
|
33
|
+
# Cornucopia::Util::Configuration.context_seed = 1
|
34
|
+
# Cornucopia::Util::Configuration.seed = 1
|
35
|
+
# Cornucopia::Util::Configuration.order_seed = 1
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails_helper"
|
4
|
+
|
5
|
+
RSpec.describe "approve.css" do
|
6
|
+
include Rack::Test::Methods
|
7
|
+
|
8
|
+
def app
|
9
|
+
@app ||= Resque::Server.new
|
10
|
+
end
|
11
|
+
|
12
|
+
it "fetches the CSS file" do
|
13
|
+
get "/approve/public/approve.css"
|
14
|
+
|
15
|
+
expect(last_response).to be_ok
|
16
|
+
expect(last_response.body).to be_include(".approve_pagination_block {")
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails_helper"
|
4
|
+
|
5
|
+
RSpec.describe "approval_keys.erb" do
|
6
|
+
let(:key_list) { Resque::Plugins::Approve::ApprovalKeyList.new }
|
7
|
+
let(:keys) { Array.new(5) { Faker::Lorem.sentence } }
|
8
|
+
let!(:jobs) do
|
9
|
+
keys.map do |approval_key|
|
10
|
+
job = Resque::Plugins::Approve::PendingJob.new(SecureRandom.uuid, class_name: BasicJob, args: [approval_key: approval_key])
|
11
|
+
|
12
|
+
key_list.add_job(job)
|
13
|
+
|
14
|
+
job
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
include Rack::Test::Methods
|
19
|
+
|
20
|
+
def app
|
21
|
+
@app ||= Resque::Server.new
|
22
|
+
end
|
23
|
+
|
24
|
+
before(:each) do
|
25
|
+
allow(Resque).to receive(:enqueue_to).and_call_original
|
26
|
+
end
|
27
|
+
|
28
|
+
context "actions" do
|
29
|
+
let(:cleaner) { Resque::Plugins::Approve::Cleaner }
|
30
|
+
|
31
|
+
before(:each) do
|
32
|
+
allow(Resque::Plugins::Approve::ApprovalKeyList).to receive(:new).and_return key_list
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should respond to /approve/audit_jobs" do
|
36
|
+
expect(cleaner).to receive(:cleanup_jobs).and_call_original
|
37
|
+
|
38
|
+
post "/approve/audit_jobs"
|
39
|
+
|
40
|
+
expect(last_response).to be_redirect
|
41
|
+
expect(last_response.header["Location"]).to match(/approve$/)
|
42
|
+
expect(Resque).not_to have_received(:enqueue_to)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should respond to /approve/audit_queues" do
|
46
|
+
expect(cleaner).to receive(:cleanup_queues).and_call_original
|
47
|
+
|
48
|
+
post "/approve/audit_queues"
|
49
|
+
|
50
|
+
expect(last_response).to be_redirect
|
51
|
+
expect(last_response.header["Location"]).to match(/approve$/)
|
52
|
+
expect(Resque).not_to have_received(:enqueue_to)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should respond to /approve/approve_all_queues" do
|
56
|
+
expect(key_list).to receive(:approve_all).and_call_original
|
57
|
+
|
58
|
+
post "/approve/approve_all_queues"
|
59
|
+
|
60
|
+
expect(last_response).to be_redirect
|
61
|
+
expect(last_response.header["Location"]).to match(/approve$/)
|
62
|
+
expect(Resque).to have_received(:enqueue_to).exactly(jobs.flatten.count).times
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should respond to /approve/delete_all_queues" do
|
66
|
+
expect(key_list).to receive(:delete_all).and_call_original
|
67
|
+
|
68
|
+
post "/approve/delete_all_queues"
|
69
|
+
|
70
|
+
expect(last_response).to be_redirect
|
71
|
+
expect(last_response.header["Location"]).to match(/approve$/)
|
72
|
+
expect(Resque).not_to have_received(:enqueue_to)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should respond to /approve" do
|
77
|
+
get "/approve"
|
78
|
+
|
79
|
+
expect(last_response).to be_ok
|
80
|
+
|
81
|
+
expect(last_response.body).to match %r{action="/approve/audit_jobs"}
|
82
|
+
expect(last_response.body).to match %r{action="/approve/audit_queues"}
|
83
|
+
expect(last_response.body).to match %r{action="/approve/approve_all_queues"}
|
84
|
+
expect(last_response.body).to match %r{action="/approve/delete_all_queues"}
|
85
|
+
|
86
|
+
expect(last_response.body).to match %r{&sort=approval_key">(\n *)?Approval Key\n +</a>}
|
87
|
+
expect(last_response.body).to match %r{&sort=num_jobs">(\n *)?Pending Jobs\n +</a>}
|
88
|
+
expect(last_response.body).to match %r{&sort=first_enqueued">(\n *)?First Enqueued\n +</a>}
|
89
|
+
|
90
|
+
keys.each do |approval_key|
|
91
|
+
expect(last_response.body).to match %r{#{approval_key}\n +</a>}
|
92
|
+
expect(last_response.body).to match %r{/job_list\?#{{ approval_key: approval_key }.to_param.gsub("+", "\\\\+")}}
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
it "pages queues" do
|
97
|
+
get "/approve?page_size=2"
|
98
|
+
|
99
|
+
expect(last_response).to be_ok
|
100
|
+
|
101
|
+
expect(last_response.body).to match(%r{href="/approve?.*page_num=2})
|
102
|
+
expect(last_response.body).to match(%r{href="/approve?.*page_num=3})
|
103
|
+
expect(last_response.body).not_to match(%r{href="/approve?.*page_num=4})
|
104
|
+
end
|
105
|
+
end
|