resque_spec 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +48 -4
- data/lib/resque_spec/ext.rb +1 -0
- data/lib/resque_spec/matchers.rb +30 -3
- data/lib/resque_spec/scheduler.rb +1 -1
- data/lib/resque_spec/version.rb +1 -1
- data/lib/resque_spec.rb +2 -1
- metadata +21 -10
data/README.md
CHANGED
@@ -25,8 +25,10 @@ What is ResqueSpec?
|
|
25
25
|
===================
|
26
26
|
|
27
27
|
ResqueSpec implements the *stable API* for Resque 1.19.x (which is `enqueue`,
|
28
|
-
`enqueue_to` (*unreleased*), `dequeue`, `reserve`,
|
29
|
-
|
28
|
+
`enqueue_to` (*unreleased*), `dequeue`, `reserve`, the Resque hooks, and
|
29
|
+
because of the way `resque_scheduler` works `Job.create` and `Job.destroy`).
|
30
|
+
|
31
|
+
It does not have a test double for Redis, so this may lead to some interesting and
|
30
32
|
puzzling behaviour if you use some of the popular Resque plugins (such as
|
31
33
|
`resque_lock`).
|
32
34
|
|
@@ -131,9 +133,51 @@ And I write this spec using the `resque_spec` matcher
|
|
131
133
|
end
|
132
134
|
end
|
133
135
|
|
134
|
-
|
136
|
+
And I might use the `at` statement to specify the time:
|
137
|
+
|
138
|
+
describe "#recalculate" do
|
139
|
+
before do
|
140
|
+
ResqueSpec.reset!
|
141
|
+
end
|
142
|
+
|
143
|
+
it "adds person.calculate to the Person queue" do
|
144
|
+
person.recalculate
|
145
|
+
|
146
|
+
# Is it scheduled to be executed at 2010-02-14 06:00:00 ?
|
147
|
+
Person.should have_scheduled(person.id, :calculate).at(Time.mktime(2010,2,14,6,0,0))
|
148
|
+
end
|
149
|
+
end
|
135
150
|
|
136
|
-
|
151
|
+
And I might use the `in` statement to specify time interval (in seconds):
|
152
|
+
|
153
|
+
describe "#recalculate" do
|
154
|
+
before do
|
155
|
+
ResqueSpec.reset!
|
156
|
+
end
|
157
|
+
|
158
|
+
it "adds person.calculate to the Person queue" do
|
159
|
+
person.recalculate
|
160
|
+
|
161
|
+
# Is it scheduled to be executed in 5 minutes?
|
162
|
+
Person.should have_scheduled(person.id, :calculate).in(5 * 60)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
You can also check the size of the schedule:
|
167
|
+
|
168
|
+
describe "#recalculate" do
|
169
|
+
before do
|
170
|
+
ResqueSpec.reset!
|
171
|
+
end
|
172
|
+
|
173
|
+
it "adds person.calculate to the Person queue" do
|
174
|
+
person.recalculate
|
175
|
+
|
176
|
+
Person.should have_schedule_size_of(1)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
(And I take note of the `before` block that is calling `reset!` for every spec)
|
137
181
|
|
138
182
|
And I might write this as a Cucumber step
|
139
183
|
|
data/lib/resque_spec/ext.rb
CHANGED
data/lib/resque_spec/matchers.rb
CHANGED
@@ -64,16 +64,41 @@ RSpec::Matchers.define :have_queue_size_of do |size|
|
|
64
64
|
end
|
65
65
|
|
66
66
|
RSpec::Matchers.define :have_scheduled do |*expected_args|
|
67
|
+
chain :at do |timestamp|
|
68
|
+
@interval = nil
|
69
|
+
@time = timestamp
|
70
|
+
@time_info = "at #{@time}"
|
71
|
+
end
|
72
|
+
|
73
|
+
chain :in do |interval|
|
74
|
+
@time = nil
|
75
|
+
@interval = interval
|
76
|
+
@time_info = "in #{@interval} seconds"
|
77
|
+
end
|
78
|
+
|
67
79
|
match do |actual|
|
68
|
-
ResqueSpec.schedule_for(actual).any?
|
80
|
+
ResqueSpec.schedule_for(actual).any? do |entry|
|
81
|
+
class_matches = entry[:class].to_s == actual.to_s
|
82
|
+
args_match = entry[:args] == expected_args
|
83
|
+
|
84
|
+
time_matches = if @time
|
85
|
+
entry[:time] == @time
|
86
|
+
elsif @interval
|
87
|
+
entry[:time].to_i == entry[:stored_at].to_i + @interval
|
88
|
+
else
|
89
|
+
true
|
90
|
+
end
|
91
|
+
|
92
|
+
class_matches && args_match && time_matches
|
93
|
+
end
|
69
94
|
end
|
70
95
|
|
71
96
|
failure_message_for_should do |actual|
|
72
|
-
"expected that #{actual} would have [#{expected_args.join(', ')}] scheduled"
|
97
|
+
["expected that #{actual} would have [#{expected_args.join(', ')}] scheduled", @time_info].join(' ')
|
73
98
|
end
|
74
99
|
|
75
100
|
failure_message_for_should_not do |actual|
|
76
|
-
"expected that #{actual} would not have [#{expected_args.join(', ')}] scheduled"
|
101
|
+
["expected that #{actual} would not have [#{expected_args.join(', ')}] scheduled", @time_info].join(' ')
|
77
102
|
end
|
78
103
|
|
79
104
|
description do
|
@@ -82,6 +107,8 @@ RSpec::Matchers.define :have_scheduled do |*expected_args|
|
|
82
107
|
end
|
83
108
|
|
84
109
|
RSpec::Matchers.define :have_scheduled_at do |*expected_args|
|
110
|
+
warn "DEPRECATION WARNING: have_scheduled_at(time, *args) is deprecated and will be removed in future. Please use have_scheduled(*args).at(time) instead."
|
111
|
+
|
85
112
|
match do |actual|
|
86
113
|
time = expected_args.first
|
87
114
|
other_args = expected_args[1..-1]
|
@@ -16,7 +16,7 @@ module ResqueSpec
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def enqueue_at(time, klass, *args)
|
19
|
-
perform_or_store(schedule_queue_name(klass), :class => klass.to_s, :time => time, :args => args)
|
19
|
+
perform_or_store(schedule_queue_name(klass), :class => klass.to_s, :time => time, :stored_at => Time.now, :args => args)
|
20
20
|
end
|
21
21
|
|
22
22
|
def enqueue_in(time, klass, *args)
|
data/lib/resque_spec/version.rb
CHANGED
data/lib/resque_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque_spec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-15 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: resque
|
16
|
-
requirement: &
|
16
|
+
requirement: &70229397540720 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.19.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70229397540720
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70229397540220 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 2.5.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70229397540220
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: ruby-debug19
|
38
|
-
requirement: &
|
38
|
+
requirement: &70229397539840 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70229397539840
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: timecop
|
49
|
-
requirement: &
|
49
|
+
requirement: &70229397539380 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,18 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70229397539380
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rake
|
60
|
+
requirement: &70229397538960 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70229397538960
|
58
69
|
description: RSpec matchers for Resque
|
59
70
|
email: leshill@gmail.com
|
60
71
|
executables: []
|