pause 0.4.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,6 +11,10 @@ describe Pause::Action do
11
11
  end
12
12
 
13
13
  let(:resolution) { 10 }
14
+ let(:identifier) { '11112222' }
15
+ let(:action) { MyNotification.new(identifier) }
16
+ let(:other_identifier) { '8798734' }
17
+ let(:other_action) { MyNotification.new(other_identifier) }
14
18
  let(:history) { 60 }
15
19
  let(:configuration) { Pause::Configuration.new }
16
20
  let(:adapter) { Pause::Redis::Adapter.new(Pause.config) }
@@ -22,15 +26,9 @@ describe Pause::Action do
22
26
  allow(Pause).to receive(:adapter).and_return(adapter)
23
27
  end
24
28
 
25
- let(:identifier) { '11112222' }
26
- let(:action) { MyNotification.new(identifier) }
27
-
28
- let(:other_identifier) { '8798734' }
29
- let(:other_action) { MyNotification.new(other_identifier) }
30
-
31
29
  RSpec.shared_examples 'an action' do
32
30
  describe '#increment!' do
33
- it 'should increment' do
31
+ it 'increments' do
34
32
  time = Time.now
35
33
  Timecop.freeze time do
36
34
  expect(Pause.adapter).to receive(:increment).with(action.scope, identifier, time.to_i, 1)
@@ -40,7 +38,7 @@ describe Pause::Action do
40
38
  end
41
39
 
42
40
  describe '#ok?' do
43
- it 'should successfully return if the action is blocked or not' do
41
+ it 'successfullies return if the action is blocked or not' do
44
42
  time = Time.now
45
43
  Timecop.freeze time do
46
44
  4.times do
@@ -52,7 +50,7 @@ describe Pause::Action do
52
50
  end
53
51
  end
54
52
 
55
- it 'should successfully consider different period checks' do
53
+ it 'successfullies consider different period checks' do
56
54
  time = Time.parse('Sept 22, 11:34:00')
57
55
 
58
56
  Timecop.freeze time - 30 do
@@ -71,7 +69,7 @@ describe Pause::Action do
71
69
  end
72
70
  end
73
71
 
74
- it 'should return false and silently fail if redis is not available' do
72
+ it 'returns false and silently fail if redis is not available' do
75
73
  allow(Pause::Logger).to receive(:fatal)
76
74
  allow_any_instance_of(Redis).to receive(:zrange).and_raise Redis::CannotConnectError
77
75
  time = period_marker(resolution, Time.now.to_i)
@@ -86,7 +84,7 @@ describe Pause::Action do
86
84
  context 'action should not be rate limited' do
87
85
  it 'returns nil' do
88
86
  expect(adapter.rate_limited?(action.scope, action.identifier)).to be false
89
- expect(action.analyze).to be nil
87
+ expect(action.analyze).to be_nil
90
88
  end
91
89
  end
92
90
 
@@ -130,7 +128,7 @@ describe Pause::Action do
130
128
  end
131
129
 
132
130
  context 'actions under test' do
133
- ['123456', 'hello', 0, 999999].each do |id|
131
+ ['123456', 'hello', 0, 999_999].each do |id|
134
132
  let(:identifier) { id }
135
133
  let(:action) { MyNotification.new(identifier) }
136
134
  describe "action with identifier #{id}" do
@@ -151,38 +149,47 @@ describe Pause::Action do
151
149
  let(:bogus) { Struct.new(:name, :event).new }
152
150
 
153
151
  describe '#unless_rate_limited' do
154
- before do
155
- expect(bogus).to receive(:name).exactly(2).times
152
+ before { expect(bogus).to receive(:name).twice }
153
+
154
+ describe '#initialize' do
155
+ before { expect(bogus).to receive(:event).once }
156
+
157
+ it 'is able to use methods inside the #new block' do
158
+ b = bogus
159
+ CowRateLimited.new(identifier) do
160
+ unless_rate_limited { b.name } # this executes
161
+ unless_rate_limited { b.name } # this also executes
162
+ unless_rate_limited { b.name } # and this will be rate limited
163
+ if_rate_limited { b.event }
164
+ end
165
+ end
156
166
  end
157
- it 'should call through the block' do
167
+
168
+ it 'calls through the block' do
158
169
  action.unless_rate_limited { bogus.name }
159
170
  action.unless_rate_limited { bogus.name }
160
171
  result = action.unless_rate_limited { bogus.name }
161
- expect(result).to be_a_kind_of(::Pause::RateLimitedEvent)
172
+ expect(result).to be_a(Pause::RateLimitedEvent)
162
173
  end
163
- end
164
-
165
- describe '#unless_rate_limited' do
166
- before { expect(bogus).to receive(:name).exactly(2).times }
167
174
 
168
- it 'should call through the block' do
175
+ it 'calls through the block' do
169
176
  3.times { action.unless_rate_limited { bogus.name } }
170
177
  end
171
178
 
172
179
  describe '#if_rate_limited' do
173
180
  before { 2.times { action.unless_rate_limited { bogus.name } } }
174
181
 
175
- it 'it should not analyze during method call' do
182
+ it 'does not analyze during method call' do
176
183
  bogus.event = 1
177
184
  action.if_rate_limited { |event| bogus.event = event }
178
- expect(bogus.event).to be_a_kind_of(::Pause::RateLimitedEvent)
185
+ expect(bogus.event).to be_a(Pause::RateLimitedEvent)
179
186
  expect(bogus.event.identifier).to eq(identifier)
180
187
  end
181
188
 
182
- it 'should analyze if requested' do
189
+ it 'analyzes if requested' do
183
190
  action.unless_rate_limited { bogus.name }
184
191
  result = action.if_rate_limited { |event| bogus.event = event }
185
- expect(bogus.event).to be_a_kind_of(::Pause::RateLimitedEvent)
192
+ expect(bogus.event).to be_a(Pause::RateLimitedEvent)
186
193
  expect(result).to eq(bogus.event)
187
194
  end
188
195
  end
@@ -190,7 +197,7 @@ describe Pause::Action do
190
197
  end
191
198
 
192
199
  describe '.tracked_identifiers' do
193
- it 'should return all the identifiers tracked (but not blocked) so far' do
200
+ it 'returns all the identifiers tracked (but not blocked) so far' do
194
201
  action.increment!
195
202
  other_action.increment!
196
203
 
@@ -203,7 +210,7 @@ describe Pause::Action do
203
210
  end
204
211
 
205
212
  describe '.rate_limited_identifiers' do
206
- it 'should return all the identifiers blocked' do
213
+ it 'returns all the identifiers blocked' do
207
214
  action.increment!(100, Time.now.to_i)
208
215
  other_action.increment!(100, Time.now.to_i)
209
216
 
@@ -216,7 +223,7 @@ describe Pause::Action do
216
223
  end
217
224
 
218
225
  describe '.unblock_all' do
219
- it 'should unblock all the identifiers for a scope' do
226
+ it 'unblocks all the identifiers for a scope' do
220
227
  10.times { action.increment! }
221
228
  other_action.increment!
222
229
 
@@ -232,7 +239,6 @@ describe Pause::Action do
232
239
  expect(MyNotification.tracked_identifiers).to eq([other_action.identifier])
233
240
  end
234
241
  end
235
-
236
242
  end
237
243
 
238
244
  describe Pause::Action, '.check' do
@@ -250,22 +256,22 @@ describe Pause::Action, '.check' do
250
256
  check period_seconds: 50, block_ttl: 60, max_allowed: 100
251
257
  end
252
258
 
253
- it 'should define a period check on new instances' do
259
+ it 'defines a period check on new instances' do
254
260
  expect(ActionWithCheck.new('id').checks).to eq([
255
261
  Pause::PeriodCheck.new(100, 150, 200)
256
262
  ])
257
263
  end
258
264
 
259
- it 'should define a period check on new instances' do
265
+ it 'defines a period check on new instances' do
260
266
  expect(ActionWithMultipleChecks.new('id').checks).to \
261
267
  eq([
262
- Pause::PeriodCheck.new(100, 150, 200),
263
- Pause::PeriodCheck.new(200, 150, 200),
264
- Pause::PeriodCheck.new(300, 150, 200)
265
- ])
268
+ Pause::PeriodCheck.new(100, 150, 200),
269
+ Pause::PeriodCheck.new(200, 150, 200),
270
+ Pause::PeriodCheck.new(300, 150, 200)
271
+ ])
266
272
  end
267
273
 
268
- it 'should accept hash arguments' do
274
+ it 'accepts hash arguments' do
269
275
  expect(ActionWithHashChecks.new('id').checks).to eq([
270
276
  Pause::PeriodCheck.new(50, 100, 60)
271
277
  ])
@@ -278,7 +284,7 @@ describe Pause::Action, '.scope' do
278
284
  end
279
285
  end
280
286
 
281
- it 'should raise if scope is not defined' do
287
+ it 'raises if scope is not defined' do
282
288
  expect(MyApp::NoScope.new('1.2.3.4').scope).to eq 'myapp.noscope'
283
289
  end
284
290
 
@@ -286,7 +292,7 @@ describe Pause::Action, '.scope' do
286
292
  scope 'my:scope'
287
293
  end
288
294
 
289
- it 'should set scope on class' do
295
+ it 'sets scope on class' do
290
296
  expect(DefinedScopeAction.new('1.2.3.4').scope).to eq('my:scope')
291
297
  end
292
298
  end
@@ -309,26 +315,26 @@ describe Pause::Action, 'enabled/disabled states' do
309
315
  describe '#disable' do
310
316
  before do
311
317
  expect(action).to be_enabled
312
- expect(action).to_not be_disabled
318
+ expect(action).not_to be_disabled
313
319
  action.disable
314
320
  end
315
321
 
316
322
  it 'disables the action' do
317
323
  expect(action).to be_disabled
318
- expect(action).to_not be_enabled
324
+ expect(action).not_to be_enabled
319
325
  end
320
326
  end
321
327
 
322
328
  describe '#enable' do
323
329
  before do
324
330
  action.disable
325
- expect(action).to_not be_enabled
331
+ expect(action).not_to be_enabled
326
332
  action.enable
327
333
  end
328
334
 
329
335
  it 'enables the action' do
330
336
  expect(action).to be_enabled
331
- expect(action).to_not be_disabled
337
+ expect(action).not_to be_disabled
332
338
  end
333
339
  end
334
340
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'timecop'
3
5
 
@@ -11,20 +13,17 @@ describe Pause::Analyzer do
11
13
  end
12
14
 
13
15
  let(:resolution) { 10 }
16
+ let(:analyzer) { Pause.analyzer }
17
+ let(:action) { FollowPushNotification.new('1243123') }
14
18
  let(:history) { 60 }
15
19
  let(:configuration) { Pause::Configuration.new }
16
20
  let(:adapter) { Pause::Redis::Adapter.new(configuration) }
17
21
 
18
22
  before do
19
- allow(Pause).to receive(:config).and_return(configuration)
20
- allow(Pause.config).to receive(:resolution).and_return(resolution)
21
- allow(Pause.config).to receive(:history).and_return(history)
22
- allow(Pause).to receive(:adapter).and_return(adapter)
23
+ allow(Pause.config).to receive_messages(resolution: resolution, history: history)
24
+ allow(Pause).to receive_messages(config: configuration, adapter: adapter)
23
25
  end
24
26
 
25
- let(:analyzer) { Pause.analyzer }
26
- let(:action) { FollowPushNotification.new('1243123') }
27
-
28
27
  describe '#analyze' do
29
28
  it 'checks and blocks if max_allowed is reached' do
30
29
  time = Time.now
@@ -39,11 +38,15 @@ describe Pause::Analyzer do
39
38
  end
40
39
 
41
40
  describe '#check' do
42
- it 'should return nil if action is NOT blocked' do
43
- expect(analyzer.check(action)).to be nil
41
+ it 'returns nil if action is NOT blocked' do
42
+ expect(analyzer.check(action)).to be_nil
43
+ end
44
+
45
+ it 'returns nil if action is NOT rate limited' do
46
+ expect(action).not_to be_rate_limited
44
47
  end
45
48
 
46
- it 'should return blocked action if action is blocked' do
49
+ it 'returns blocked action if action is blocked' do
47
50
  Timecop.freeze Time.now do
48
51
  5.times do
49
52
  action.increment!
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Pause::Configuration, '#configure' do
6
+ subject { described_class.new }
4
7
 
5
- subject { Pause::Configuration.new }
6
-
7
- it 'should allow configuration via block' do
8
+ it 'allows configuration via block' do
8
9
  subject.configure do |c|
9
10
  c.redis_host = '128.23.12.8'
10
11
  c.redis_port = '2134'
@@ -24,7 +25,7 @@ describe Pause::Configuration, '#configure' do
24
25
  expect(subject.sharded).to be true
25
26
  end
26
27
 
27
- it 'should provide redis defaults' do
28
+ it 'provides redis defaults' do
28
29
  subject.configure do |config|
29
30
  # do nothing
30
31
  end
@@ -33,7 +34,7 @@ describe Pause::Configuration, '#configure' do
33
34
  expect(subject.redis_port).to eq(6379)
34
35
  expect(subject.redis_db).to eq('1')
35
36
  expect(subject.resolution).to eq(600) # 10 minutes
36
- expect(subject.history).to eq(86400) # one day
37
+ expect(subject.history).to eq(86_400) # one day
37
38
  expect(subject.sharded).to be false
38
39
  end
39
40
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Pause::Logger do
6
+ describe 'when accessed #puts' do
7
+ before do
8
+ expect($stdout).to receive(:puts).with('hello')
9
+ end
10
+
11
+ it 'calls through to puts without color' do
12
+ described_class.puts('hello')
13
+ end
14
+ end
15
+
16
+ describe 'when accessed via #fatal' do
17
+ before do
18
+ expect($stderr).to receive(:puts).with("\e[31mwhoops\e[0m")
19
+ end
20
+
21
+ it 'calls through to puts with color' do
22
+ described_class.fatal('whoops')
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe Pause do
@@ -5,8 +7,8 @@ RSpec.describe Pause do
5
7
  let(:configuration) { Pause::Configuration.new }
6
8
 
7
9
  before do
8
- Pause.adapter = nil
9
- allow(Pause).to receive(:config).and_return(configuration)
10
+ described_class.adapter = nil
11
+ allow(described_class).to receive(:config).and_return(configuration)
10
12
  configuration.configure { |c| c.sharded = sharded }
11
13
  end
12
14
 
@@ -14,7 +16,7 @@ RSpec.describe Pause do
14
16
  let(:sharded) { true }
15
17
 
16
18
  it 'is a ShardedAdapter' do
17
- expect(Pause.adapter).to be_a(Pause::Redis::ShardedAdapter)
19
+ expect(described_class.adapter).to be_a(Pause::Redis::ShardedAdapter)
18
20
  end
19
21
  end
20
22
 
@@ -22,7 +24,7 @@ RSpec.describe Pause do
22
24
  let(:sharded) { false }
23
25
 
24
26
  it 'is an Adapter' do
25
- expect(Pause.adapter).to be_a(Pause::Redis::Adapter)
27
+ expect(described_class.adapter).to be_a(Pause::Redis::Adapter)
26
28
  end
27
29
  end
28
30
  end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module Pause
6
+ RSpec.describe PeriodCheck do
7
+ let(:period_seconds) { 10 }
8
+ let(:max_allowed) { 2 }
9
+ let(:block_ttl) { 10 }
10
+
11
+ let(:period_check_1) do
12
+ described_class.new(
13
+ period_seconds: period_seconds,
14
+ max_allowed: max_allowed,
15
+ block_ttl: block_ttl
16
+ )
17
+ end
18
+
19
+ let(:period_check_2) do
20
+ described_class.new(
21
+ period_seconds: 2 * period_seconds,
22
+ max_allowed: 1.5 * max_allowed,
23
+ block_ttl:
24
+ )
25
+ end
26
+
27
+ describe '#==' do
28
+ let(:period_check_3) do
29
+ described_class.new(
30
+ period_seconds: 2 * period_seconds,
31
+ max_allowed: 1.5 * max_allowed,
32
+ block_ttl:
33
+ )
34
+ end
35
+
36
+ it 'is equal' do
37
+ expect(period_check_3).to eq(period_check_2)
38
+ end
39
+
40
+ it 'is not equal' do
41
+ expect(period_check_3).not_to eq(period_check_1)
42
+ end
43
+
44
+ describe '#sort' do
45
+ let(:list) { [period_check_2, period_check_1] }
46
+
47
+ it 'sorts' do
48
+ expect(list.sort).to eq([period_check_1, period_check_2])
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,59 +1,82 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'date'
3
5
  require 'timecop'
4
6
 
5
7
  describe Pause::Redis::Adapter do
6
-
7
8
  let(:resolution) { 10 }
9
+ let(:adapter) { described_class.new(Pause.config) }
10
+ let(:redis_conn) { adapter.send(:redis) }
8
11
  let(:history) { 60 }
9
12
  let(:configuration) { Pause::Configuration.new }
10
13
 
11
14
  before do
12
15
  allow(Pause).to receive(:config).and_return(configuration)
13
- allow(Pause.config).to receive(:resolution).and_return(resolution)
14
- allow(Pause.config).to receive(:history).and_return(history)
16
+ allow(Pause.config).to receive_messages(resolution: resolution, history: history)
15
17
  redis_conn.flushall
16
18
  end
17
19
 
18
- let(:adapter) { Pause::Redis::Adapter.new(Pause.config) }
19
- let(:redis_conn) { adapter.send(:redis) }
20
-
21
20
  describe '#increment' do
22
21
  let(:scope) { 'blah' }
23
22
  let(:identifier) { '213213' }
24
- let(:tracked_key) { 'i:blah:|213213|' }
23
+ let(:tracked_key) { "i:#{scope}:|#{identifier}|" }
24
+ let(:now) { Time.now.to_i }
25
25
 
26
- it 'should add key to a redis set' do
26
+ it 'adds key to a redis set' do
27
27
  adapter.increment(scope, identifier, Time.now.to_i)
28
- set = redis_conn.zrange(tracked_key, 0, -1, :with_scores => true)
29
- expect(set).to_not be_empty
30
- expect(set.size).to eql(1)
31
- expect(set[0].size).to eql(2)
28
+ set = redis_conn.zrange(tracked_key, 0, -1, with_scores: true)
29
+ expect(set).not_to be_empty
30
+ expect(set.size).to be(1)
31
+ expect(set[0].size).to be(2)
32
+ end
33
+
34
+ describe 'when increment is called' do
35
+ let(:redis_conn_double) { instance_double(Redis) }
36
+
37
+ before do
38
+ allow(adapter).to receive(:with_multi).and_yield(redis_conn_double)
39
+ end
40
+
41
+ it 'calls zincrby on the redis connection' do
42
+ allow(redis_conn_double).to receive(:expire)
43
+ expect(redis_conn_double).to receive(:zincrby)
44
+
45
+ adapter.increment(scope, identifier, Time.now.to_i)
46
+ end
47
+
48
+ it 'calls expire on the redis key' do
49
+ expect(redis_conn_double).to receive(:expire).with(tracked_key, history)
50
+ allow(redis_conn_double).to receive(:zincrby)
51
+
52
+ adapter.increment(scope, identifier, Time.now.to_i)
53
+ end
32
54
  end
33
55
 
34
56
  context 'removing two elements' do
35
57
  let(:to_delete) { 2 }
36
- let(:time) { Time.now }
58
+ let(:period_start) { adapter.period_marker(resolution, now) }
59
+ let(:period_end) { adapter.period_marker(resolution, now + resolution) }
60
+
61
+ around do |example|
62
+ Timecop.freeze(now) { example.run }
63
+ end
64
+
37
65
  before do
38
- adapter
39
- to_delete.times do |t|
40
- expect(redis_conn).to receive(:zrem).with(tracked_key, [adapter.period_marker(resolution, time + t)]).once
41
- end
66
+ redis_conn.flushall
42
67
  adapter.time_blocks_to_keep = 1
68
+ allow(redis_conn).to receive(:zrem).with(tracked_key, [period_start])
69
+ allow(redis_conn).to receive(:zrem).with(tracked_key, [period_start, period_end])
43
70
  end
44
- it 'should remove old elements' do
45
- adapter.increment(scope, identifier, time.to_i)
71
+
72
+ it 'removes old elements' do
73
+ adapter.increment(scope, identifier, now.to_i)
46
74
  to_delete.times do |t|
47
- next_time = time + (adapter.resolution + t + 1)
75
+ next_time = now + (adapter.resolution + t + 1)
48
76
  adapter.increment(scope, identifier, next_time.to_i)
49
77
  end
50
78
  end
51
79
  end
52
-
53
- it 'sets expiry on key' do
54
- expect(redis_conn).to receive(:expire).with(tracked_key, history)
55
- adapter.increment(scope, identifier, Time.now.to_i)
56
- end
57
80
  end
58
81
 
59
82
  describe '#expire_block_list' do
@@ -74,21 +97,18 @@ describe Pause::Redis::Adapter do
74
97
 
75
98
  adapter.expire_block_list(scope)
76
99
 
77
- expect(redis_conn.zscore('b:|a|', blocked_identifier)).not_to be nil
78
- expect(redis_conn.zscore('b:|a|', expired_identifier)).to be nil
100
+ expect(redis_conn.zscore('b:|a|', blocked_identifier)).not_to be_nil
101
+ expect(redis_conn.zscore('b:|a|', expired_identifier)).to be_nil
79
102
  end
80
103
  end
81
104
 
82
- describe '#rate_limit!' do
83
- end
84
-
85
105
  describe '#rate_limited?' do
86
106
  let(:scope) { 'ipn:follow' }
87
107
  let(:identifier) { '123461234' }
88
108
  let(:blocked_key) { "b:#{key}" }
89
- let(:ttl) { 110000 }
109
+ let(:ttl) { 110_000 }
90
110
 
91
- it 'should return true if blocked' do
111
+ it 'returns true if blocked' do
92
112
  adapter.rate_limit!(scope, identifier, ttl)
93
113
  expect(adapter.rate_limited?(scope, identifier)).to be true
94
114
  end
@@ -128,17 +148,16 @@ describe Pause::Redis::Adapter do
128
148
  let(:scope) { 'ipn:follow' }
129
149
  let(:identifier) { '1234' }
130
150
  let(:blocked_key) { "b:|#{scope}|" }
131
- let(:ttl) { 110000 }
151
+ let(:ttl) { 110_000 }
132
152
 
133
153
  it 'saves ip to redis with expiration' do
134
154
  time = Time.now
135
155
  Timecop.freeze time do
136
156
  adapter.rate_limit!(scope, identifier, ttl)
137
157
  end
138
- expect(redis_conn.zscore(blocked_key, identifier)).to_not be nil
158
+ expect(redis_conn.zscore(blocked_key, identifier)).not_to be_nil
139
159
  expect(redis_conn.zscore(blocked_key, identifier)).to eq(time.to_i + ttl)
140
160
  end
141
-
142
161
  end
143
162
  end
144
163
 
@@ -1,21 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'date'
3
5
  require 'timecop'
4
6
 
5
7
  describe Pause::Redis::ShardedAdapter do
6
-
7
8
  let(:resolution) { 10 }
9
+ let(:adapter) { described_class.new(Pause.config) }
8
10
  let(:history) { 60 }
9
11
  let(:configuration) { Pause::Configuration.new }
10
12
 
11
13
  before do
12
14
  allow(Pause).to receive(:config).and_return(configuration)
13
- allow(Pause.config).to receive(:resolution).and_return(resolution)
14
- allow(Pause.config).to receive(:history).and_return(history)
15
+ allow(Pause.config).to receive_messages(resolution: resolution, history: history)
15
16
  end
16
17
 
17
- let(:adapter) { Pause::Redis::ShardedAdapter.new(Pause.config) }
18
-
19
18
  describe '#all_keys' do
20
19
  it 'is not supported' do
21
20
  expect { adapter.all_keys('cake') }.to raise_error(Pause::Redis::OperationNotSupported)
@@ -24,15 +23,16 @@ describe Pause::Redis::ShardedAdapter do
24
23
 
25
24
  describe '#with_multi' do
26
25
  let(:redis) { adapter.send(:redis) }
27
- it 'should not call redis.multi' do
28
- expect(redis).to_not receive(:multi)
29
- expect { adapter.increment(:scope, 123, Time.now) }.to_not raise_error
26
+
27
+ it 'does not call redis.multi' do
28
+ expect(redis).not_to receive(:multi)
29
+ expect { adapter.increment(:scope, 123, Time.now) }.not_to raise_error
30
30
  end
31
31
  end
32
32
 
33
33
  describe '#redis' do
34
- it 'should not use redis db when connecting' do
35
- expect(adapter.send(:redis_connection_opts)).to_not include(:db)
34
+ it 'does not use redis db when connecting' do
35
+ expect(adapter.send(:redis_connection_opts)).not_to include(:db)
36
36
  end
37
37
  end
38
38
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file was generated by the `rspec --init` command. Conventionally, all
2
4
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
5
  # Require this file using `require "spec_helper"` to ensure that it is only
@@ -5,28 +7,30 @@
5
7
  #
6
8
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
9
 
8
- require 'pause'
9
10
  require 'fileutils'
10
11
 
12
+ require 'simplecov'
13
+ SimpleCov.start
14
+
15
+ require 'pause'
16
+
11
17
  if ENV['PAUSE_REAL_REDIS']
12
18
  require 'pause/redis/adapter'
13
- puts ; puts "NOTE: Using real Redis-server at #{Pause::Redis::Adapter.redis.inspect}\n\n"
19
+ puts
20
+ puts "NOTE: Using real Redis-server at #{Pause::Redis::Adapter.redis.inspect}\n\n"
14
21
  else
15
22
  require 'fakeredis/rspec'
16
23
  end
17
24
 
18
25
  RSpec.configure do |config|
19
- config.run_all_when_everything_filtered = true
20
- config.filter_run :focus
21
-
22
- rspec_dir = './.spec'.freeze
26
+ rspec_dir = './.spec'
23
27
  FileUtils.mkdir_p(rspec_dir)
24
28
  config.example_status_persistence_file_path = "#{rspec_dir}/results.txt"
25
29
 
26
30
  config.order = 'random'
27
31
 
28
32
  if ENV['PAUSE_REAL_REDIS']
29
- config.before(:example) do
33
+ config.before do
30
34
  Pause::Redis::Adapter.redis.flushdb
31
35
  end
32
36
  end