rspec-que 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d6a12c44d1b6bad7658728316b396cb78200148d
4
- data.tar.gz: 189ad9ef1800b8af4c2d0d3507e91b8f2f7885fa
3
+ metadata.gz: 9ae7da24696fff896e0e4a085e3722eace94a83b
4
+ data.tar.gz: b86fcdab6635157b959931ab95d53d46bdeba98f
5
5
  SHA512:
6
- metadata.gz: 8a93dd08c6c065956a0bfafcc7652c45752dbe9e07b59f5b7379b386e1265b3621232c81bc438fb001ca3cd64aba14b53f21fc2933f59615b8b954940f110a91
7
- data.tar.gz: caa89b6ce6ba4fbef248ce61ac66ade1ef0b74fe007c3ea813ff8c2579907a3dedd4e6cc78b8a287f67a778d760fdb1dfd885b113404a5634fcb599042216178
6
+ metadata.gz: a97cad4ef4a5229b2f8308fe48deef30b64bb7d51798f9e27827214111ed575749ea409d2813148bf27c15360cdca11e8e20275d8dbf8382a4034888699663c7
7
+ data.tar.gz: a5476696af273b6852ecd8dbfbd5142d91ac9d61e2f23c6052ba34546e6f41ea608762f446c00e682d2fd91b24f5e8da9f06f90dd4b733924ca4784d606fa464
@@ -1,15 +1,25 @@
1
1
  require 'rspec/mocks/argument_list_matcher'
2
2
  require 'time'
3
+ require 'forwardable'
4
+
5
+ require_relative 'queue_up/queued_something'
6
+ require_relative 'queue_up/queued_priority'
7
+ require_relative 'queue_up/queued_class'
8
+ require_relative 'queue_up/queued_args'
9
+ require_relative 'queue_up/queued_at'
10
+ require_relative 'queue_up/queue_count'
3
11
 
4
12
  module RSpec
5
13
  module Que
6
14
  module Matchers
7
15
  class QueueUp
8
16
  include RSpec::Matchers::Composable
17
+ extend Forwardable
9
18
 
10
19
  def initialize(job_class = nil)
11
20
  @matchers = [QueuedSomething.new]
12
21
  @matchers << QueuedClass.new(job_class) if job_class
22
+ @count_matcher = QueueCount.new(self, QueueCount::EXACTLY, 1)
13
23
  @job_class = job_class
14
24
  @stages = []
15
25
  end
@@ -23,7 +33,10 @@ module RSpec
23
33
  @stages << { matcher: matcher, candidates: @matched_jobs.dup }
24
34
  @matched_jobs.delete_if { |job| !matcher.matches?(job) }
25
35
  end
26
- @matched_jobs.any?
36
+
37
+ @stages << { matcher: @count_matcher, candidates: @matched_jobs.dup }
38
+
39
+ @count_matcher.matches?(@matched_jobs.count)
27
40
  end
28
41
 
29
42
  def with(*args)
@@ -41,6 +54,13 @@ module RSpec
41
54
  self
42
55
  end
43
56
 
57
+ def_delegators :@count_matcher,
58
+ :exactly,
59
+ :at_least,
60
+ :at_most,
61
+ :once,
62
+ :twice
63
+
44
64
  def failure_message
45
65
  # last stage to have any candidate jobs
46
66
  failed_stage = @stages.reject do |s|
@@ -76,118 +96,16 @@ module RSpec
76
96
  end
77
97
 
78
98
  def job_description
79
- @matchers.map(&:desc).join(" ")
99
+ if @count_matcher.default?
100
+ @matchers.map(&:desc).join(" ")
101
+ else
102
+ [*@matchers, @count_matcher].map(&:desc).join(" ")
103
+ end
80
104
  end
81
105
 
82
106
  def format_job(job)
83
107
  "#{job[:job_class]}[" + job[:args].join(", ") + "]"
84
108
  end
85
-
86
- class QueuedSomething
87
- def matches?(_job)
88
- true
89
- end
90
-
91
- def desc
92
- "a job"
93
- end
94
-
95
- def failed_msg(_last_found)
96
- "nothing"
97
- end
98
- end
99
-
100
- class QueuedClass
101
- attr_reader :job_class
102
- def initialize(job_class)
103
- @job_class = job_class
104
- end
105
-
106
- def matches?(job)
107
- job[:job_class] == job_class.to_s
108
- end
109
-
110
- def desc
111
- "of class #{job_class}"
112
- end
113
-
114
- def failed_msg(candidates)
115
- classes = candidates.map { |c| c[:job_class] }
116
- if classes.length == 1
117
- classes.first
118
- else
119
- "#{classes.length} jobs of class [#{classes.join(', ')}]"
120
- end
121
- end
122
- end
123
-
124
- class QueuedArgs
125
- def initialize(args)
126
- @args = args
127
- @argument_list_matcher = RSpec::Mocks::ArgumentListMatcher.new(*args)
128
- end
129
-
130
- def matches?(job)
131
- @argument_list_matcher.args_match?(*job[:args])
132
- end
133
-
134
- def desc
135
- "with args #{@args}"
136
- end
137
-
138
- def failed_msg(candidates)
139
- if candidates.length == 1
140
- "job enqueued with #{candidates.first[:args]}"
141
- else
142
- "#{candidates.length} jobs with args: " +
143
- candidates.map { |j| j[:args] }.to_s
144
- end
145
- end
146
- end
147
-
148
- class QueuedAt
149
- def initialize(the_time)
150
- @time = the_time
151
- end
152
-
153
- def matches?(job)
154
- job[:run_at] == @time
155
- end
156
-
157
- def desc
158
- "at #{@time}"
159
- end
160
-
161
- def failed_msg(candidates)
162
- if candidates.length == 1
163
- "job at #{candidates.first[:run_at]}"
164
- else
165
- "jobs at #{candidates.map { |c| c[:run_at] }}"
166
- end
167
- end
168
- end
169
-
170
- class QueuedPriority
171
- def initialize(priority)
172
- @priority = priority
173
- end
174
-
175
- def matches?(job)
176
- job[:priority] == @priority
177
- end
178
-
179
- def desc
180
- "of priority #{@priority}"
181
- end
182
-
183
- def failed_msg(candidates)
184
- if candidates.length == 1
185
- "job of priority #{candidates.first[:priority]}"
186
- else
187
- "jobs of priority #{candidates.map { |c| c[:priority] }}"
188
- end
189
- end
190
- end
191
109
  end
192
110
  end
193
111
  end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RSpec
4
+ module Que
5
+ module Matchers
6
+ class QueueUp
7
+ class QueueCount
8
+ EXACTLY = :==
9
+ AT_LEAST = :>=
10
+ AT_MOST = :<=
11
+
12
+ def initialize(parent_matcher, comparator, number)
13
+ @number = number
14
+ @comparator = comparator
15
+ @parent = parent_matcher
16
+ end
17
+
18
+ def once
19
+ exactly(1)
20
+ @parent
21
+ end
22
+
23
+ def twice
24
+ exactly(2)
25
+ @parent
26
+ end
27
+
28
+ def exactly(n)
29
+ set(EXACTLY, n)
30
+ end
31
+
32
+ def at_least(n)
33
+ set(AT_LEAST, n)
34
+ end
35
+
36
+ def at_most(n)
37
+ set(AT_MOST, n)
38
+ end
39
+
40
+ def times
41
+ @parent
42
+ end
43
+
44
+ def matches?(actual_number)
45
+ actual_number.send(@comparator, @number)
46
+ end
47
+
48
+ def desc
49
+ case @comparator
50
+ when EXACTLY then "exactly #{@number} times"
51
+ when AT_LEAST then "at least #{@number} times"
52
+ when AT_MOST then "at most #{@number} times"
53
+ end
54
+ end
55
+
56
+ def failed_msg(candidates)
57
+ "#{candidates.length} jobs"
58
+ end
59
+
60
+ def default?
61
+ @comparator == EXACTLY && @number == 1
62
+ end
63
+
64
+ private
65
+
66
+ def set(comparator, number)
67
+ @comparator = comparator
68
+ @number = number
69
+ self
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RSpec
4
+ module Que
5
+ module Matchers
6
+ class QueueUp
7
+ class QueuedArgs
8
+ def initialize(args)
9
+ @args = args
10
+ @argument_list_matcher = RSpec::Mocks::ArgumentListMatcher.new(*args)
11
+ end
12
+
13
+ def matches?(job)
14
+ @argument_list_matcher.args_match?(*job[:args])
15
+ end
16
+
17
+ def desc
18
+ "with args #{@args}"
19
+ end
20
+
21
+ def failed_msg(candidates)
22
+ if candidates.length == 1
23
+ "job enqueued with #{candidates.first[:args]}"
24
+ else
25
+ "#{candidates.length} jobs with args: " +
26
+ candidates.map { |j| j[:args] }.to_s
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,29 @@
1
+ module RSpec
2
+ module Que
3
+ module Matchers
4
+ class QueueUp
5
+ class QueuedAt
6
+ def initialize(the_time)
7
+ @time = the_time
8
+ end
9
+
10
+ def matches?(job)
11
+ job[:run_at] == @time
12
+ end
13
+
14
+ def desc
15
+ "at #{@time}"
16
+ end
17
+
18
+ def failed_msg(candidates)
19
+ if candidates.length == 1
20
+ "job at #{candidates.first[:run_at]}"
21
+ else
22
+ "jobs at #{candidates.map { |c| c[:run_at] }}"
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ module RSpec
2
+ module Que
3
+ module Matchers
4
+ class QueueUp
5
+ class QueuedClass
6
+ attr_reader :job_class
7
+ def initialize(job_class)
8
+ @job_class = job_class
9
+ end
10
+
11
+ def matches?(job)
12
+ job[:job_class] == job_class.to_s
13
+ end
14
+
15
+ def desc
16
+ "of class #{job_class}"
17
+ end
18
+
19
+ def failed_msg(candidates)
20
+ classes = candidates.map { |c| c[:job_class] }
21
+ if classes.length == 1
22
+ classes.first
23
+ else
24
+ "#{classes.length} jobs of class [#{classes.join(', ')}]"
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,29 @@
1
+ module RSpec
2
+ module Que
3
+ module Matchers
4
+ class QueueUp
5
+ class QueuedPriority
6
+ def initialize(priority)
7
+ @priority = priority
8
+ end
9
+
10
+ def matches?(job)
11
+ job[:priority] == @priority
12
+ end
13
+
14
+ def desc
15
+ "of priority #{@priority}"
16
+ end
17
+
18
+ def failed_msg(candidates)
19
+ if candidates.length == 1
20
+ "job of priority #{candidates.first[:priority]}"
21
+ else
22
+ "jobs of priority #{candidates.map { |c| c[:priority] }}"
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,22 @@
1
+ module RSpec
2
+ module Que
3
+ module Matchers
4
+ class QueueUp
5
+ class QueuedSomething
6
+ def matches?(_job)
7
+ true
8
+ end
9
+
10
+ def desc
11
+ "a job"
12
+ end
13
+
14
+ def failed_msg(_last_found)
15
+ "nothing"
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+
@@ -1,5 +1,5 @@
1
1
  module RSpec
2
2
  module Que
3
- VERSION = '1.1.0'.freeze
3
+ VERSION = '2.0.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-que
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GoCardless Engineering
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-03 00:00:00.000000000 Z
11
+ date: 2017-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-mocks
@@ -79,6 +79,12 @@ files:
79
79
  - README.md
80
80
  - lib/rspec/que.rb
81
81
  - lib/rspec/que/queue_up.rb
82
+ - lib/rspec/que/queue_up/queue_count.rb
83
+ - lib/rspec/que/queue_up/queued_args.rb
84
+ - lib/rspec/que/queue_up/queued_at.rb
85
+ - lib/rspec/que/queue_up/queued_class.rb
86
+ - lib/rspec/que/queue_up/queued_priority.rb
87
+ - lib/rspec/que/queue_up/queued_something.rb
82
88
  - lib/rspec/que/version.rb
83
89
  - rspec-que.gemspec
84
90
  homepage: http://github.com/gocardless/rspec-que
@@ -101,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
107
  version: '0'
102
108
  requirements: []
103
109
  rubyforge_project:
104
- rubygems_version: 2.6.8
110
+ rubygems_version: 2.5.1
105
111
  signing_key:
106
112
  specification_version: 4
107
113
  summary: RSpec matchers to test Que