rollout 2.1.0 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{spec/spec.opts → .rspec} +0 -0
- data/.travis.yml +2 -0
- data/Gemfile.lock +32 -20
- data/README.md +186 -0
- data/lib/rollout/version.rb +1 -1
- data/lib/rollout.rb +57 -12
- data/rollout.gemspec +2 -5
- data/spec/legacy_spec.rb +39 -39
- data/spec/rollout_spec.rb +263 -79
- data/spec/spec_helper.rb +11 -5
- metadata +16 -32
- data/README.rdoc +0 -130
- data/misc/check_rollout.rb +0 -16
data/spec/rollout_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
|
-
describe "Rollout" do
|
3
|
+
RSpec.describe "Rollout" do
|
4
4
|
before do
|
5
5
|
@redis = Redis.new
|
6
6
|
@rollout = Rollout.new(@redis)
|
@@ -13,16 +13,16 @@ describe "Rollout" do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "the feature is active for users for which the block evaluates to true" do
|
16
|
-
@rollout.
|
16
|
+
expect(@rollout).to be_active(:chat, double(id: 5))
|
17
17
|
end
|
18
18
|
|
19
19
|
it "is not active for users for which the block evaluates to false" do
|
20
|
-
@rollout.
|
20
|
+
expect(@rollout).not_to be_active(:chat, double(id: 1))
|
21
21
|
end
|
22
22
|
|
23
23
|
it "is not active if a group is found in Redis but not defined in Rollout" do
|
24
24
|
@rollout.activate_group(:chat, :fake)
|
25
|
-
@rollout.
|
25
|
+
expect(@rollout).not_to be_active(:chat, double(id: 1))
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -32,7 +32,7 @@ describe "Rollout" do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
it "evaluates to true no matter what" do
|
35
|
-
@rollout.
|
35
|
+
expect(@rollout).to be_active(:chat, double(id: 0))
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -47,11 +47,11 @@ describe "Rollout" do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it "deactivates the rules for that group" do
|
50
|
-
@rollout.
|
50
|
+
expect(@rollout).not_to be_active(:chat, double(id: 10))
|
51
51
|
end
|
52
52
|
|
53
53
|
it "leaves the other groups active" do
|
54
|
-
@rollout.get(:chat).groups.
|
54
|
+
expect(@rollout.get(:chat).groups).to eq [:fivesonly].to_set
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -60,40 +60,40 @@ describe "Rollout" do
|
|
60
60
|
@rollout.define_group(:fivesonly) { |user| user.id == 5 }
|
61
61
|
@rollout.activate_group(:chat, :all)
|
62
62
|
@rollout.activate_group(:chat, :fivesonly)
|
63
|
-
@rollout.activate_user(:chat,
|
63
|
+
@rollout.activate_user(:chat, double(id: 51))
|
64
64
|
@rollout.activate_percentage(:chat, 100)
|
65
65
|
@rollout.activate(:chat)
|
66
66
|
@rollout.deactivate(:chat)
|
67
67
|
end
|
68
68
|
|
69
69
|
it "removes all of the groups" do
|
70
|
-
@rollout.
|
70
|
+
expect(@rollout).not_to be_active(:chat, double(id: 0))
|
71
71
|
end
|
72
72
|
|
73
73
|
it "removes all of the users" do
|
74
|
-
@rollout.
|
74
|
+
expect(@rollout).not_to be_active(:chat, double(id: 51))
|
75
75
|
end
|
76
76
|
|
77
77
|
it "removes the percentage" do
|
78
|
-
@rollout.
|
78
|
+
expect(@rollout).not_to be_active(:chat, double(id: 24))
|
79
79
|
end
|
80
80
|
|
81
81
|
it "removes globally" do
|
82
|
-
@rollout.
|
82
|
+
expect(@rollout).not_to be_active(:chat)
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
86
|
describe "activating a specific user" do
|
87
87
|
before do
|
88
|
-
@rollout.activate_user(:chat,
|
88
|
+
@rollout.activate_user(:chat, double(id: 42))
|
89
89
|
end
|
90
90
|
|
91
91
|
it "is active for that user" do
|
92
|
-
@rollout.
|
92
|
+
expect(@rollout).to be_active(:chat, double(id: 42))
|
93
93
|
end
|
94
94
|
|
95
95
|
it "remains inactive for other users" do
|
96
|
-
@rollout.
|
96
|
+
expect(@rollout).not_to be_active(:chat, double(id: 24))
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -103,43 +103,111 @@ describe "Rollout" do
|
|
103
103
|
end
|
104
104
|
|
105
105
|
it "is active for that user" do
|
106
|
-
@rollout.
|
106
|
+
expect(@rollout).to be_active(:chat, double(id: 42))
|
107
107
|
end
|
108
108
|
|
109
109
|
it "remains inactive for other users" do
|
110
|
-
@rollout.
|
110
|
+
expect(@rollout).not_to be_active(:chat, double(id: 24))
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
114
|
describe "activating a specific user with a string id" do
|
115
115
|
before do
|
116
|
-
@rollout.activate_user(:chat,
|
116
|
+
@rollout.activate_user(:chat, double(id: "user-72"))
|
117
117
|
end
|
118
118
|
|
119
119
|
it "is active for that user" do
|
120
|
-
@rollout.
|
120
|
+
expect(@rollout).to be_active(:chat, double(id: "user-72"))
|
121
121
|
end
|
122
122
|
|
123
123
|
it "remains inactive for other users" do
|
124
|
-
@rollout.
|
124
|
+
expect(@rollout).not_to be_active(:chat, double(id: "user-12"))
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "activating a group of users" do
|
129
|
+
context "specified by user objects" do
|
130
|
+
let(:users) { [double(id: 1), double(id: 2), double(id: 3)] }
|
131
|
+
|
132
|
+
before { @rollout.activate_users(:chat, users) }
|
133
|
+
|
134
|
+
it "is active for the given users" do
|
135
|
+
users.each { |user| expect(@rollout).to be_active(:chat, user) }
|
136
|
+
end
|
137
|
+
|
138
|
+
it "remains inactive for other users" do
|
139
|
+
expect(@rollout).not_to be_active(:chat, double(id: 4))
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
context "specified by user ids" do
|
144
|
+
let(:users) { [1, 2, 3] }
|
145
|
+
|
146
|
+
before { @rollout.activate_users(:chat, users) }
|
147
|
+
|
148
|
+
it "is active for the given users" do
|
149
|
+
users.each { |user| expect(@rollout).to be_active(:chat, user) }
|
150
|
+
end
|
151
|
+
|
152
|
+
it "remains inactive for other users" do
|
153
|
+
expect(@rollout).not_to be_active(:chat, 4)
|
154
|
+
end
|
125
155
|
end
|
126
156
|
end
|
127
157
|
|
128
158
|
describe "deactivating a specific user" do
|
129
159
|
before do
|
130
|
-
@rollout.activate_user(:chat,
|
131
|
-
@rollout.activate_user(:chat,
|
132
|
-
@rollout.activate_user(:chat,
|
133
|
-
@rollout.deactivate_user(:chat,
|
134
|
-
@rollout.deactivate_user(:chat,
|
160
|
+
@rollout.activate_user(:chat, double(id: 42))
|
161
|
+
@rollout.activate_user(:chat, double(id: 4242))
|
162
|
+
@rollout.activate_user(:chat, double(id: 24))
|
163
|
+
@rollout.deactivate_user(:chat, double(id: 42))
|
164
|
+
@rollout.deactivate_user(:chat, double(id: "4242"))
|
135
165
|
end
|
136
166
|
|
137
167
|
it "that user should no longer be active" do
|
138
|
-
@rollout.
|
168
|
+
expect(@rollout).not_to be_active(:chat, double(id: 42))
|
139
169
|
end
|
140
170
|
|
141
171
|
it "remains active for other active users" do
|
142
|
-
@rollout.get(:chat).users.
|
172
|
+
expect(@rollout.get(:chat).users).to eq %w(24).to_set
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
describe "deactivating a group of users" do
|
177
|
+
context "specified by user objects" do
|
178
|
+
let(:active_users) { [double(id: 1), double(id: 2)] }
|
179
|
+
let(:inactive_users) { [double(id: 3), double(id: 4)] }
|
180
|
+
|
181
|
+
before do
|
182
|
+
@rollout.activate_users(:chat, active_users + inactive_users)
|
183
|
+
@rollout.deactivate_users(:chat, inactive_users)
|
184
|
+
end
|
185
|
+
|
186
|
+
it "is active for the active users" do
|
187
|
+
active_users.each { |user| expect(@rollout).to be_active(:chat, user) }
|
188
|
+
end
|
189
|
+
|
190
|
+
it "is not active for inactive users" do
|
191
|
+
inactive_users.each { |user| expect(@rollout).not_to be_active(:chat, user) }
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
context "specified by user ids" do
|
196
|
+
let(:active_users) { [1, 2] }
|
197
|
+
let(:inactive_users) { [3, 4] }
|
198
|
+
|
199
|
+
before do
|
200
|
+
@rollout.activate_users(:chat, active_users + inactive_users)
|
201
|
+
@rollout.deactivate_users(:chat, inactive_users)
|
202
|
+
end
|
203
|
+
|
204
|
+
it "is active for the active users" do
|
205
|
+
active_users.each { |user| expect(@rollout).to be_active(:chat, user) }
|
206
|
+
end
|
207
|
+
|
208
|
+
it "is not active for inactive users" do
|
209
|
+
inactive_users.each { |user| expect(@rollout).not_to be_active(:chat, user) }
|
210
|
+
end
|
143
211
|
end
|
144
212
|
end
|
145
213
|
|
@@ -149,7 +217,7 @@ describe "Rollout" do
|
|
149
217
|
end
|
150
218
|
|
151
219
|
it "activates the feature" do
|
152
|
-
@rollout.
|
220
|
+
expect(@rollout).to be_active(:chat)
|
153
221
|
end
|
154
222
|
end
|
155
223
|
|
@@ -159,7 +227,7 @@ describe "Rollout" do
|
|
159
227
|
end
|
160
228
|
|
161
229
|
it "activates the feature for that percentage of the users" do
|
162
|
-
(1..120).select { |id| @rollout.active?(:chat,
|
230
|
+
expect((1..120).select { |id| @rollout.active?(:chat, double(id: id)) }.length).to be_within(1).of(20)
|
163
231
|
end
|
164
232
|
end
|
165
233
|
|
@@ -169,7 +237,7 @@ describe "Rollout" do
|
|
169
237
|
end
|
170
238
|
|
171
239
|
it "activates the feature for that percentage of the users" do
|
172
|
-
(1..200).select { |id| @rollout.active?(:chat,
|
240
|
+
expect((1..200).select { |id| @rollout.active?(:chat, double(id: id)) }.length).to be_within(5).of(40)
|
173
241
|
end
|
174
242
|
end
|
175
243
|
|
@@ -179,22 +247,43 @@ describe "Rollout" do
|
|
179
247
|
end
|
180
248
|
|
181
249
|
it "activates the feature for that percentage of the users" do
|
182
|
-
(1..100).select { |id| @rollout.active?(:chat,
|
250
|
+
expect((1..100).select { |id| @rollout.active?(:chat, double(id: id)) }.length).to be_within(2).of(5)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
describe "activating a feature for a percentage of users" do
|
255
|
+
before do
|
256
|
+
@rollout.activate_percentage(:chat, 20)
|
257
|
+
@rollout.activate_percentage(:beta, 20)
|
258
|
+
@options = @rollout.instance_variable_get("@options")
|
259
|
+
end
|
260
|
+
|
261
|
+
it "activates the feature for a random set of users when opt is set" do
|
262
|
+
@options[:randomize_percentage] = true
|
263
|
+
chat_users = (1..100).select { |id| @rollout.active?(:chat, double(id: id)) }
|
264
|
+
beta_users = (1..100).select { |id| @rollout.active?(:beta, double(id: id)) }
|
265
|
+
expect(chat_users).not_to eq beta_users
|
266
|
+
end
|
267
|
+
it "activates the feature for the same set of users when opt is not set" do
|
268
|
+
@options[:randomize_percentage] = false
|
269
|
+
chat_users = (1..100).select { |id| @rollout.active?(:chat, double(id: id)) }
|
270
|
+
beta_users = (1..100).select { |id| @rollout.active?(:beta, double(id: id)) }
|
271
|
+
expect(chat_users).to eq beta_users
|
183
272
|
end
|
184
273
|
end
|
185
274
|
|
186
275
|
describe "activating a feature for a group as a string" do
|
187
276
|
before do
|
188
277
|
@rollout.define_group(:admins) { |user| user.id == 5 }
|
189
|
-
@rollout.activate_group(:chat,
|
278
|
+
@rollout.activate_group(:chat, "admins")
|
190
279
|
end
|
191
280
|
|
192
281
|
it "the feature is active for users for which the block evaluates to true" do
|
193
|
-
@rollout.
|
282
|
+
expect(@rollout).to be_active(:chat, double(id: 5))
|
194
283
|
end
|
195
284
|
|
196
285
|
it "is not active for users for which the block evaluates to false" do
|
197
|
-
@rollout.
|
286
|
+
expect(@rollout).not_to be_active(:chat, double(id: 1))
|
198
287
|
end
|
199
288
|
end
|
200
289
|
|
@@ -205,7 +294,7 @@ describe "Rollout" do
|
|
205
294
|
end
|
206
295
|
|
207
296
|
it "becomes inactivate for all users" do
|
208
|
-
@rollout.
|
297
|
+
expect(@rollout).not_to be_active(:chat, double(id: 24))
|
209
298
|
end
|
210
299
|
end
|
211
300
|
|
@@ -216,7 +305,7 @@ describe "Rollout" do
|
|
216
305
|
end
|
217
306
|
|
218
307
|
it "becomes inactivate" do
|
219
|
-
@rollout.
|
308
|
+
expect(@rollout).not_to be_active(:chat)
|
220
309
|
end
|
221
310
|
end
|
222
311
|
|
@@ -226,7 +315,7 @@ describe "Rollout" do
|
|
226
315
|
end
|
227
316
|
|
228
317
|
it "becomes activated" do
|
229
|
-
@rollout.
|
318
|
+
expect(@rollout).to be_active(:chat)
|
230
319
|
end
|
231
320
|
end
|
232
321
|
|
@@ -235,27 +324,45 @@ describe "Rollout" do
|
|
235
324
|
@rollout.set(:chat, false)
|
236
325
|
end
|
237
326
|
|
238
|
-
it "becomes
|
239
|
-
@rollout.
|
327
|
+
it "becomes inactivated" do
|
328
|
+
expect(@rollout).not_to be_active(:chat)
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
describe "deleting a feature" do
|
333
|
+
before do
|
334
|
+
@rollout.set(:chat, true)
|
335
|
+
end
|
336
|
+
|
337
|
+
it "should be removed from features list" do
|
338
|
+
expect(@rollout.features.size).to eq 1
|
339
|
+
@rollout.delete(:chat)
|
340
|
+
expect(@rollout.features.size).to eq 0
|
341
|
+
end
|
342
|
+
|
343
|
+
it "should have metadata cleared" do
|
344
|
+
expect(@rollout.get(:chat).percentage).to eq 100
|
345
|
+
@rollout.delete(:chat)
|
346
|
+
expect(@rollout.get(:chat).percentage).to eq 0
|
240
347
|
end
|
241
348
|
end
|
242
349
|
|
243
350
|
describe "keeps a list of features" do
|
244
351
|
it "saves the feature" do
|
245
352
|
@rollout.activate(:chat)
|
246
|
-
@rollout.features.
|
353
|
+
expect(@rollout.features).to be_include(:chat)
|
247
354
|
end
|
248
355
|
|
249
356
|
it "does not contain doubles" do
|
250
357
|
@rollout.activate(:chat)
|
251
358
|
@rollout.activate(:chat)
|
252
|
-
@rollout.features.size.
|
359
|
+
expect(@rollout.features.size).to eq(1)
|
253
360
|
end
|
254
361
|
|
255
362
|
it "does not contain doubles when using string" do
|
256
363
|
@rollout.activate(:chat)
|
257
364
|
@rollout.activate("chat")
|
258
|
-
@rollout.features.size.
|
365
|
+
expect(@rollout.features.size).to eq(1)
|
259
366
|
end
|
260
367
|
end
|
261
368
|
|
@@ -265,24 +372,24 @@ describe "Rollout" do
|
|
265
372
|
@rollout.activate_group(:chat, :caretakers)
|
266
373
|
@rollout.activate_group(:chat, :greeters)
|
267
374
|
@rollout.activate(:signup)
|
268
|
-
@rollout.activate_user(:chat,
|
375
|
+
@rollout.activate_user(:chat, double(id: 42))
|
269
376
|
end
|
270
377
|
|
271
378
|
it "returns the feature object" do
|
272
379
|
feature = @rollout.get(:chat)
|
273
|
-
feature.groups.
|
274
|
-
feature.percentage.
|
275
|
-
feature.users.
|
276
|
-
feature.to_hash.
|
277
|
-
:
|
278
|
-
:
|
279
|
-
:
|
280
|
-
|
380
|
+
expect(feature.groups).to eq [:caretakers, :greeters].to_set
|
381
|
+
expect(feature.percentage).to eq 10
|
382
|
+
expect(feature.users).to eq %w(42).to_set
|
383
|
+
expect(feature.to_hash).to eq(
|
384
|
+
groups: [:caretakers, :greeters].to_set,
|
385
|
+
percentage: 10,
|
386
|
+
users: %w(42).to_set
|
387
|
+
)
|
281
388
|
|
282
389
|
feature = @rollout.get(:signup)
|
283
|
-
feature.groups.
|
284
|
-
feature.users.
|
285
|
-
feature.percentage.
|
390
|
+
expect(feature.groups).to be_empty
|
391
|
+
expect(feature.users).to be_empty
|
392
|
+
expect(feature.percentage).to eq(100)
|
286
393
|
end
|
287
394
|
end
|
288
395
|
|
@@ -297,16 +404,16 @@ describe "Rollout" do
|
|
297
404
|
|
298
405
|
it "each feature is cleared" do
|
299
406
|
features.each do |feature|
|
300
|
-
@rollout.get(feature).to_hash.
|
301
|
-
:
|
302
|
-
:
|
303
|
-
:
|
304
|
-
|
407
|
+
expect(@rollout.get(feature).to_hash).to eq(
|
408
|
+
percentage: 0,
|
409
|
+
users: Set.new,
|
410
|
+
groups: Set.new
|
411
|
+
)
|
305
412
|
end
|
306
413
|
end
|
307
414
|
|
308
415
|
it "removes all features" do
|
309
|
-
@rollout.features.
|
416
|
+
expect(@rollout.features).to be_empty
|
310
417
|
end
|
311
418
|
end
|
312
419
|
|
@@ -314,44 +421,121 @@ describe "Rollout" do
|
|
314
421
|
before do
|
315
422
|
@legacy = Rollout::Legacy.new(@redis)
|
316
423
|
@legacy.activate_percentage(:chat, 12)
|
317
|
-
@legacy.activate_user(:chat,
|
318
|
-
@legacy.activate_user(:chat,
|
424
|
+
@legacy.activate_user(:chat, double(id: 42))
|
425
|
+
@legacy.activate_user(:chat, double(id: 24))
|
319
426
|
@legacy.activate_group(:chat, :dope_people)
|
320
|
-
@rollout = Rollout.new(@redis, :
|
427
|
+
@rollout = Rollout.new(@redis, migrate: true)
|
321
428
|
end
|
322
429
|
|
323
430
|
it "imports the settings from the legacy rollout once" do
|
324
|
-
@rollout.get(:chat).to_hash.
|
325
|
-
:
|
326
|
-
:
|
327
|
-
:
|
328
|
-
}
|
431
|
+
expect(@rollout.get(:chat).to_hash).to eq({
|
432
|
+
percentage: 12,
|
433
|
+
users: %w(24 42),
|
434
|
+
groups: [:dope_people]
|
435
|
+
})
|
329
436
|
@legacy.deactivate_all(:chat)
|
330
|
-
@rollout.get(:chat).to_hash.
|
331
|
-
:
|
332
|
-
:
|
333
|
-
:
|
334
|
-
}
|
335
|
-
@redis.get("feature:chat").
|
437
|
+
expect(@rollout.get(:chat).to_hash).to eq({
|
438
|
+
percentage: 12,
|
439
|
+
users: %w(24 42).to_set,
|
440
|
+
groups: [:dope_people].to_set
|
441
|
+
})
|
442
|
+
expect(@redis.get("feature:chat")).not_to be_nil
|
336
443
|
end
|
337
444
|
|
338
445
|
it "imports settings that were globally activated" do
|
339
446
|
@legacy.activate_globally(:video_chat)
|
340
|
-
@rollout.get(:video_chat).to_hash[:percentage].
|
447
|
+
expect(@rollout.get(:video_chat).to_hash[:percentage]).to eq(100)
|
448
|
+
end
|
449
|
+
end
|
450
|
+
|
451
|
+
describe "#feature_states" do
|
452
|
+
let(:user_double) { double(id: 7) }
|
453
|
+
|
454
|
+
before do
|
455
|
+
@rollout.activate(:chat)
|
456
|
+
@rollout.activate_user(:video, user_double)
|
457
|
+
@rollout.deactivate(:vr)
|
458
|
+
end
|
459
|
+
|
460
|
+
it "returns a hash" do
|
461
|
+
expect(@rollout.feature_states).to be_a(Hash)
|
462
|
+
end
|
463
|
+
|
464
|
+
context "with user argument" do
|
465
|
+
it "maps active feature as true" do
|
466
|
+
state = @rollout.feature_states(user_double)[:video]
|
467
|
+
expect(state).to eq(true)
|
468
|
+
end
|
469
|
+
|
470
|
+
it "maps inactive feature as false" do
|
471
|
+
state = @rollout.feature_states[:vr]
|
472
|
+
expect(state).to eq(false)
|
473
|
+
end
|
474
|
+
end
|
475
|
+
|
476
|
+
context "with no argument" do
|
477
|
+
it "maps active feature as true" do
|
478
|
+
state = @rollout.feature_states[:chat]
|
479
|
+
expect(state).to eq(true)
|
480
|
+
end
|
481
|
+
|
482
|
+
it "maps inactive feature as false" do
|
483
|
+
state = @rollout.feature_states[:video]
|
484
|
+
expect(state).to eq(false)
|
485
|
+
end
|
486
|
+
end
|
487
|
+
end
|
488
|
+
|
489
|
+
describe "#active_features" do
|
490
|
+
let(:user_double) { double(id: 19) }
|
491
|
+
|
492
|
+
before do
|
493
|
+
@rollout.activate(:chat)
|
494
|
+
@rollout.activate_user(:video, user_double)
|
495
|
+
@rollout.deactivate(:vr)
|
496
|
+
end
|
497
|
+
|
498
|
+
it "returns an array" do
|
499
|
+
expect(@rollout.active_features).to be_a(Array)
|
500
|
+
end
|
501
|
+
|
502
|
+
context "with user argument" do
|
503
|
+
it "includes active feature" do
|
504
|
+
features = @rollout.active_features(user_double)
|
505
|
+
expect(features).to include(:video)
|
506
|
+
expect(features).to include(:chat)
|
507
|
+
end
|
508
|
+
|
509
|
+
it "excludes inactive feature" do
|
510
|
+
features = @rollout.active_features(user_double)
|
511
|
+
expect(features).to_not include(:vr)
|
512
|
+
end
|
513
|
+
end
|
514
|
+
|
515
|
+
context "with no argument" do
|
516
|
+
it "includes active feature" do
|
517
|
+
features = @rollout.active_features
|
518
|
+
expect(features).to include(:chat)
|
519
|
+
end
|
520
|
+
|
521
|
+
it "excludes inactive feature" do
|
522
|
+
features = @rollout.active_features
|
523
|
+
expect(features).to_not include(:video)
|
524
|
+
end
|
341
525
|
end
|
342
526
|
end
|
343
527
|
end
|
344
528
|
|
345
529
|
describe "Rollout::Feature" do
|
346
530
|
before do
|
347
|
-
@user =
|
348
|
-
@feature = Rollout::Feature.new(:chat, nil, :
|
531
|
+
@user = double("User", email: "test@test.com")
|
532
|
+
@feature = Rollout::Feature.new(:chat, nil, id_user_by: :email)
|
349
533
|
end
|
350
534
|
|
351
535
|
describe "#add_user" do
|
352
536
|
it "ids a user using id_user_by" do
|
353
537
|
@feature.add_user(@user)
|
354
|
-
@user.
|
538
|
+
expect(@user).to have_received :email
|
355
539
|
end
|
356
540
|
end
|
357
541
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
3
|
+
require "rollout"
|
4
|
+
require "rspec"
|
5
|
+
require "redis"
|
6
|
+
require "codeclimate-test-reporter"
|
7
|
+
|
8
|
+
SimpleCov.start do
|
9
|
+
formatter SimpleCov::Formatter::MultiFormatter.new([
|
10
|
+
SimpleCov::Formatter::HTMLFormatter,
|
11
|
+
CodeClimate::TestReporter::Formatter,
|
12
|
+
])
|
13
|
+
end
|
7
14
|
|
8
15
|
RSpec.configure do |config|
|
9
|
-
config.mock_with :mocha
|
10
16
|
config.before { Redis.new.flushdb }
|
11
17
|
end
|