action_controller_tweaks 0.3.0 → 0.3.5

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.
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActionControllerTweaks
2
- VERSION = '0.3.0'
4
+ VERSION = "0.3.5"
3
5
 
4
6
  def self.version
5
7
  Gem::Version.new(VERSION)
@@ -1,29 +1,48 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
+
3
+ describe NotController do
4
+ describe "::Session" do
5
+ context "when included by a class without `before_action` or `before_filter`" do
6
+ it "raises error" do
7
+ expect do
8
+ described_class.class_eval do
9
+ include ActionControllerTweaks::Session
10
+ end
11
+ end.to raise_error(NotImplementedError)
12
+ end
13
+ end
14
+ end
15
+ end
2
16
 
3
17
  describe PostsController, type: :controller do
4
- describe 'included modules' do
5
- it do
6
- described_class.ancestors.should include(ActionControllerTweaks)
18
+ describe "included modules" do
19
+ specify do
20
+ expect(described_class.ancestors).to include(ActionControllerTweaks)
7
21
  end
8
22
  end
9
23
 
10
- describe '::Caching' do
11
- describe '#set_no_cache' do
24
+ describe "::Caching" do
25
+ describe "#set_no_cache" do
12
26
  before do
13
- get :index, no_cache: true
27
+ if Rails::VERSION::MAJOR >= 5
28
+ get :index, params: { no_cache: true }
29
+ else
30
+ get :index, no_cache: true
31
+ end
14
32
  end
15
33
 
16
- it 'includes the pre defined headeres' do
17
- controller.headers.deep_include?(ActionControllerTweaks::Caching::HEADERS).should be_true
18
- end
34
+ it "includes the pre defined headeres" do
35
+ expect(controller.headers.
36
+ deep_include?(ActionControllerTweaks::Caching::HEADERS)).to be true
37
+ end
19
38
  end
20
39
  end
21
40
 
22
- describe '::Session' do
41
+ describe "::Session" do
23
42
  let(:session_key) { :key }
24
- let(:session_value) { 'value' }
43
+ let(:session_value) { "value" }
25
44
 
26
- describe '#set_session' do
45
+ describe "#set_session" do
27
46
  let(:expire_in) { 60 * 60 } # 1 hour
28
47
  let(:expire_at) { Time.new(2014, 1, 1).in_time_zone }
29
48
  let(:time_now) { Time.new(2013, 1, 1).in_time_zone }
@@ -31,32 +50,33 @@ describe PostsController, type: :controller do
31
50
  let(:expires_in) { expire_in }
32
51
  let(:expires_at) { expire_at }
33
52
 
34
- context 'when calling it without option' do
53
+ context "when calling it without option" do
35
54
  let :set_session do
36
55
  controller.send(:set_session, session_key, session_value)
37
56
  end
38
57
 
39
- context 'with normal key' do
58
+ context "with normal key" do
40
59
  before do
41
60
  set_session
42
61
  end
43
62
 
44
- it 'set the session' do
45
- session[session_key].should eq session_value
63
+ it "set the session" do
64
+ expect(session[session_key]).to eq session_value
46
65
  end
47
66
  end
48
67
 
49
- context 'with a reserved key' do
68
+ context "with a reserved key" do
50
69
  let(:session_key) { ActionControllerTweaks::Session::RESERVED_SESSION_KEYS.first }
51
70
 
52
- it 'raise error' do
53
- expect { set_session }.to raise_error(ActionControllerTweaks::Session::Errors::ReservedSessionKeyConflict)
71
+ it "raise error" do
72
+ expect { set_session }.
73
+ to raise_error(ActionControllerTweaks::Session::Errors::ReservedSessionKeyConflict)
54
74
  end
55
75
  end
56
76
  end
57
77
 
58
- context 'for old option keys' do
59
- context 'when calling it with option expire_in' do
78
+ context "for old option keys" do
79
+ context "when calling it with option expire_in" do
60
80
  let!(:time_before_expire) { time_now + (expire_in / 2) }
61
81
  let!(:time_after_expire) { time_now + (expire_in * 2) }
62
82
 
@@ -69,314 +89,638 @@ describe PostsController, type: :controller do
69
89
  Timecop.return
70
90
  end
71
91
 
72
- it 'set the session' do
73
- session[session_key].should eq session_value
92
+ it "set the session" do
93
+ expect(session[session_key]).to eq session_value
74
94
  end
75
95
 
76
- context 'before expire time' do
96
+ context "before expire time" do
77
97
  before do
78
98
  Timecop.travel(time_before_expire)
79
99
  # Runs before_filter
80
100
  get :index
81
101
  end
82
102
 
83
- it 'keeps the session key' do
84
- session[session_key].should eq session_value
103
+ it "keeps the session key" do
104
+ expect(session[session_key]).to eq session_value
85
105
  end
86
106
  end
87
- context 'after expire time' do
107
+ context "after expire time" do
88
108
  before do
89
109
  Timecop.travel(time_after_expire)
90
110
  # Runs before_filter
91
111
  get :index
92
112
  end
93
113
 
94
- it 'keeps the session key' do
95
- session.key?(session_key).should be_false
114
+ it "keeps the session key" do
115
+ expect(session.key?(session_key)).to be false
96
116
  end
97
117
  end
98
118
  end
99
119
 
100
- context 'when calling it with option expire_at' do
120
+ context "when calling it with no option" do
121
+ before do
122
+ controller.send(:set_session, session_key, session_value)
123
+ end
124
+
125
+ it "set the session" do
126
+ expect(session[session_key]).to eq session_value
127
+ end
128
+
129
+ it "does NOT add the session key to `session_keys_to_expire`" do
130
+ expect(session["session_keys_to_expire"].keys).to_not include(session_key)
131
+ end
132
+ end
133
+
134
+ context "when calling it with option expire_at" do
101
135
  let!(:time_before_expire) { expire_at - 1 }
102
136
  let!(:time_after_expire) { expire_at + 1 }
103
137
 
104
138
  before do
105
139
  Timecop.freeze(time_now)
106
- controller.send(:set_session, session_key, session_value, expire_at: expire_at)
140
+ controller.send(:set_session,
141
+ session_key, session_value, expire_at: expire_at)
107
142
  end
108
143
 
109
144
  after do
110
145
  Timecop.return
111
146
  end
112
147
 
113
- it 'set the session' do
114
- session[session_key].should eq session_value
148
+ it "set the session" do
149
+ expect(session[session_key]).to eq session_value
115
150
  end
116
151
 
117
- context 'before expire time' do
152
+ context "before expire time" do
118
153
  before do
119
154
  Timecop.travel(time_before_expire)
120
155
  # Runs before_filter
121
156
  get :index
122
157
  end
123
158
 
124
- it 'keeps the session key' do
125
- session[session_key].should eq session_value
159
+ it "keeps the session key" do
160
+ expect(session[session_key]).to eq session_value
126
161
  end
127
162
  end
128
- context 'after expire time' do
163
+ context "after expire time" do
129
164
  before do
130
165
  Timecop.travel(time_after_expire)
131
166
  # Runs before_filter
132
167
  get :index
133
168
  end
134
169
 
135
- it 'keeps the session key' do
136
- session.key?(session_key).should be_false
170
+ it "keeps the session key" do
171
+ expect(session.key?(session_key)).to be false
137
172
  end
138
173
  end
139
174
  end
140
175
  end
141
- context 'for new option keys' do
142
- context 'when calling it with option expires_in' do
176
+ context "for new option keys" do
177
+ context "when calling it with option expires_in" do
143
178
  let!(:time_before_expire) { time_now + (expires_in / 2) }
144
179
  let!(:time_after_expire) { time_now + (expires_in * 2) }
145
180
 
146
181
  before do
147
182
  Timecop.freeze(time_now)
148
- controller.send(:set_session, session_key, session_value, expires_in: expires_in)
183
+ controller.send(:set_session,
184
+ session_key, session_value, expires_in: expires_in)
149
185
  end
150
186
 
151
187
  after do
152
188
  Timecop.return
153
189
  end
154
190
 
155
- it 'set the session' do
156
- session[session_key].should eq session_value
191
+ it "set the session" do
192
+ expect(session[session_key]).to eq session_value
157
193
  end
158
194
 
159
- context 'before expire time' do
195
+ context "before expire time" do
160
196
  before do
161
197
  Timecop.travel(time_before_expire)
162
198
  # Runs before_filter
163
199
  get :index
164
200
  end
165
201
 
166
- it 'keeps the session key' do
167
- session[session_key].should eq session_value
202
+ it "keeps the session key" do
203
+ expect(session[session_key]).to eq session_value
168
204
  end
169
205
  end
170
- context 'after expire time' do
206
+ context "after expire time" do
171
207
  before do
172
208
  Timecop.travel(time_after_expire)
173
209
  # Runs before_filter
174
210
  get :index
175
211
  end
176
212
 
177
- it 'keeps the session key' do
178
- session.key?(session_key).should be_false
213
+ it "keeps the session key" do
214
+ expect(session.key?(session_key)).to be false
179
215
  end
180
216
  end
181
217
  end
182
218
 
183
- context 'when calling it with option expires_at' do
219
+ context "when calling it with option expires_at" do
184
220
  let!(:time_before_expire) { expires_at - 1 }
185
221
  let!(:time_after_expire) { expires_at + 1 }
186
222
 
187
223
  before do
188
224
  Timecop.freeze(time_now)
189
- controller.send(:set_session, session_key, session_value, expire_at: expires_at)
225
+ controller.send(:set_session,
226
+ session_key, session_value, expire_at: expires_at)
190
227
  end
191
228
 
192
229
  after do
193
230
  Timecop.return
194
231
  end
195
232
 
196
- it 'set the session' do
197
- session[session_key].should eq session_value
233
+ it "set the session" do
234
+ expect(session[session_key]).to eq session_value
198
235
  end
199
236
 
200
- context 'before expire time' do
237
+ context "before expire time" do
201
238
  before do
202
239
  Timecop.travel(time_before_expire)
203
240
  # Runs before_filter
204
241
  get :index
205
242
  end
206
243
 
207
- it 'keeps the session key' do
208
- session[session_key].should eq session_value
244
+ it "keeps the session key" do
245
+ expect(session[session_key]).to eq session_value
209
246
  end
210
247
  end
211
- context 'after expire time' do
248
+ context "after expire time" do
212
249
  before do
213
250
  Timecop.travel(time_after_expire)
214
251
  # Runs before_filter
215
252
  get :index
216
253
  end
217
254
 
218
- it 'keeps the session key' do
219
- session.key?(session_key).should be_false
255
+ it "keeps the session key" do
256
+ expect(session.key?(session_key)).to be false
220
257
  end
221
258
  end
222
259
  end
223
260
  end
224
261
 
225
-
226
- context 'when option value with different types is passed into options' do
262
+ context "when option value with different types is passed into options" do
227
263
  let(:method_call) do
228
264
  controller.send(:set_session, session_key, session_value, options)
229
265
  end
230
266
 
231
- context 'for old option keys' do
232
- context 'for expire_in' do
267
+ context "for old option keys" do
268
+ context "for expire_in" do
233
269
  let(:options) { {expire_in: expire_in.to_s} }
234
270
 
235
- specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
271
+ specify do
272
+ expect { method_call }.
273
+ to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
274
+ end
236
275
  end
237
- context 'for expire_at' do
238
- context 'with a Hash' do
276
+ context "for expire_at" do
277
+ context "with a Hash" do
239
278
  # String#to_time would be nil if format invalid
240
279
  let(:options) { {expire_at: {}} }
241
280
 
242
- specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
281
+ specify do
282
+ expect { method_call }.
283
+ to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
284
+ end
243
285
  end
244
- context 'with a blank String' do
286
+ context "with a blank String" do
245
287
  # String#to_time would be nil if format invalid
246
- let(:options) { {expire_at: ''} }
288
+ let(:options) { {expire_at: ""} }
247
289
 
248
- specify { expect{ method_call }.to_not raise_error }
290
+ specify { expect { method_call }.to_not raise_error }
249
291
  end
250
- context 'with a time String' do
292
+ context "with a time String" do
251
293
  let(:options) { {expire_at: expire_at.to_s} }
252
294
 
253
- specify { expect{ method_call }.to_not raise_error }
295
+ specify { expect { method_call }.to_not raise_error }
254
296
  end
255
- context 'with a Time' do
297
+ context "with a Time" do
256
298
  let(:options) { {expire_at: expire_at.to_time} }
257
299
 
258
- specify { expect{ method_call }.to_not raise_error }
300
+ specify { expect { method_call }.to_not raise_error }
259
301
  end
260
- context 'with a Date' do
302
+ context "with a Date" do
261
303
  let(:options) { {expire_at: expire_at.to_date} }
262
304
 
263
- specify { expect{ method_call }.to_not raise_error }
305
+ specify { expect { method_call }.to_not raise_error }
264
306
  end
265
- context 'with a DateTime' do
307
+ context "with a DateTime" do
266
308
  let(:options) { {expire_at: expire_at.in_time_zone} }
267
309
 
268
- specify { expect{ method_call }.to_not raise_error }
310
+ specify { expect { method_call }.to_not raise_error }
269
311
  end
270
312
  end
271
313
  end
272
- context 'for new option keys' do
273
- context 'for expires_in' do
314
+ context "for new option keys" do
315
+ context "for expires_in" do
274
316
  let(:options) { {expires_in: expires_in.to_s} }
275
317
 
276
- specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
318
+ specify do
319
+ expect { method_call }.
320
+ to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
321
+ end
277
322
  end
278
- context 'for expires_at' do
279
- context 'with a Hash' do
323
+ context "for expires_at" do
324
+ context "with a Hash" do
280
325
  # String#to_time would be nil if format invalid
281
326
  let(:options) { {expires_at: {}} }
282
327
 
283
- specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
328
+ specify do
329
+ expect { method_call }.
330
+ to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
331
+ end
284
332
  end
285
- context 'with a blank String' do
333
+ context "with a blank String" do
286
334
  # String#to_time would be nil if format invalid
287
- let(:options) { {expires_at: ''} }
335
+ let(:options) { {expires_at: ""} }
288
336
 
289
- specify { expect{ method_call }.to_not raise_error }
337
+ specify { expect { method_call }.to_not raise_error }
290
338
  end
291
- context 'with a time String' do
339
+ context "with a time String" do
292
340
  let(:options) { {expires_at: expire_at.to_s} }
293
341
 
294
- specify { expect{ method_call }.to_not raise_error }
342
+ specify { expect { method_call }.to_not raise_error }
295
343
  end
296
- context 'with a Time' do
344
+ context "with a Time" do
297
345
  let(:options) { {expires_at: expire_at.to_time} }
298
346
 
299
- specify { expect{ method_call }.to_not raise_error }
347
+ specify { expect { method_call }.to_not raise_error }
300
348
  end
301
- context 'with a Date' do
349
+ context "with a Date" do
302
350
  let(:options) { {expires_at: expire_at.to_date} }
303
351
 
304
- specify { expect{ method_call }.to_not raise_error }
352
+ specify { expect { method_call }.to_not raise_error }
305
353
  end
306
- context 'with a DateTime' do
354
+ context "with a DateTime" do
307
355
  let(:options) { {expires_at: expire_at.in_time_zone} }
308
356
 
309
- specify { expect{ method_call }.to_not raise_error }
357
+ specify { expect { method_call }.to_not raise_error }
310
358
  end
311
359
  end
312
360
  end
313
361
  end
314
362
 
315
- context 'when someone screw up the special session key' do
363
+ context "when someone screw up the special session key" do
316
364
  before do
317
365
  session[session_key] = session_value
318
366
  end
319
367
 
320
- context 'when someone set non time string in expire_at_str' do
368
+ context "when someone set non time string in expire_at_str" do
321
369
  before do
322
- session['session_keys_to_expire'] = {session_key => ''}
370
+ session["session_keys_to_expire"] = {session_key => ""}
323
371
 
324
372
  # Runs before_filter
325
373
  get :index
326
374
  end
327
375
 
328
- it 'destroys the session key' do
329
- session.key?(session_key).should be_false
376
+ it "destroys the session key" do
377
+ expect(session.key?(session_key)).to be false
330
378
  end
331
379
  end
332
380
 
333
- context 'when someone set non has to session_keys_to_expire' do
381
+ context "when someone set non-hash to session_keys_to_expire" do
334
382
  before do
335
- session['session_keys_to_expire'] = []
383
+ session["session_keys_to_expire"] = []
336
384
  end
337
385
 
338
- it 'does not destroy the session key' do
339
- session.key?(session_key).should be_true
386
+ it "does not destroy the session key" do
387
+ expect(session.key?(session_key)).to be true
340
388
  end
341
389
  end
342
390
  end
343
391
  end
344
392
 
345
- describe '#set_session_with_expiry' do
393
+ describe "#set_session_with_expiry" do
394
+ let(:expire_in) { 60 * 60 } # 1 hour
395
+ let(:expire_at) { Time.new(2014, 1, 1).in_time_zone }
396
+ let(:time_now) { Time.new(2013, 1, 1).in_time_zone }
397
+ # Corrected option keys
398
+ let(:expires_in) { expire_in }
399
+ let(:expires_at) { expire_at }
400
+
346
401
  let(:method_call) do
347
402
  controller.send(:set_session_with_expiry, session_key, session_value, options)
348
403
  end
349
404
 
350
- context 'when call with no options' do
405
+ context "when call with no options" do
351
406
  let!(:options) { {} }
352
407
 
353
- specify { expect{method_call}.to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys) }
408
+ specify do
409
+ expect { method_call }.
410
+ to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys)
411
+ end
354
412
  end
355
- context 'when call with invalid option keys' do
413
+ context "when call with invalid option keys" do
356
414
  let!(:options) { {key: :value} }
357
415
 
358
- specify { expect{method_call}.to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys) }
416
+ specify do
417
+ expect { method_call }.
418
+ to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys)
419
+ end
359
420
  end
360
- context 'when call with valid option keys' do
361
- context 'like expire_in' do
421
+ context "when call with valid option keys" do
422
+ context "like expire_in" do
362
423
  let!(:options) { {expire_in: 1.day} }
363
424
 
364
- specify { expect{method_call}.to_not raise_error }
425
+ specify { expect { method_call }.to_not raise_error }
365
426
  end
366
- context 'like expire_at' do
427
+ context "like expire_at" do
367
428
  let!(:options) { {expire_at: 1.day.from_now} }
368
429
 
369
- specify { expect{method_call}.to_not raise_error }
430
+ specify { expect { method_call }.to_not raise_error }
370
431
  end
371
- context 'like expires_in' do
432
+ context "like expires_in" do
372
433
  let!(:options) { {expires_in: 1.day} }
373
434
 
374
- specify { expect{method_call}.to_not raise_error }
435
+ specify { expect { method_call }.to_not raise_error }
375
436
  end
376
- context 'like expires_at' do
437
+ context "like expires_at" do
377
438
  let!(:options) { {expires_at: 1.day.from_now} }
378
439
 
379
- specify { expect{method_call}.to_not raise_error }
440
+ specify { expect { method_call }.to_not raise_error }
441
+ end
442
+ end
443
+
444
+ context "for old option keys" do
445
+ context "when calling it with option expire_in" do
446
+ let!(:time_before_expire) { time_now + (expire_in / 2) }
447
+ let!(:time_after_expire) { time_now + (expire_in * 2) }
448
+
449
+ before do
450
+ Timecop.freeze(time_now)
451
+ controller.send(:set_session_with_expiry,
452
+ session_key, session_value, expire_in: expire_in)
453
+ end
454
+
455
+ after do
456
+ Timecop.return
457
+ end
458
+
459
+ it "set the session" do
460
+ expect(session[session_key]).to eq session_value
461
+ end
462
+
463
+ context "before expire time" do
464
+ before do
465
+ Timecop.travel(time_before_expire)
466
+ # Runs before_filter
467
+ get :index
468
+ end
469
+
470
+ it "keeps the session key" do
471
+ expect(session[session_key]).to eq session_value
472
+ end
473
+ end
474
+ context "after expire time" do
475
+ before do
476
+ Timecop.travel(time_after_expire)
477
+ # Runs before_filter
478
+ get :index
479
+ end
480
+
481
+ it "keeps the session key" do
482
+ expect(session.key?(session_key)).to be false
483
+ end
484
+ end
485
+ end
486
+
487
+ context "when calling it with no option" do
488
+ let(:method_call) do
489
+ controller.send(:set_session_with_expiry, session_key, session_value)
490
+ end
491
+
492
+ specify do
493
+ expect { method_call }.
494
+ to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys)
495
+ end
496
+ end
497
+
498
+ context "when calling it with option expire_at" do
499
+ let!(:time_before_expire) { expire_at - 1 }
500
+ let!(:time_after_expire) { expire_at + 1 }
501
+
502
+ before do
503
+ Timecop.freeze(time_now)
504
+ controller.send(:set_session_with_expiry,
505
+ session_key, session_value, expire_at: expire_at)
506
+ end
507
+
508
+ after do
509
+ Timecop.return
510
+ end
511
+
512
+ it "set the session" do
513
+ expect(session[session_key]).to eq session_value
514
+ end
515
+
516
+ context "before expire time" do
517
+ before do
518
+ Timecop.travel(time_before_expire)
519
+ # Runs before_filter
520
+ get :index
521
+ end
522
+
523
+ it "keeps the session key" do
524
+ expect(session[session_key]).to eq session_value
525
+ end
526
+ end
527
+ context "after expire time" do
528
+ before do
529
+ Timecop.travel(time_after_expire)
530
+ # Runs before_filter
531
+ get :index
532
+ end
533
+
534
+ it "keeps the session key" do
535
+ expect(session.key?(session_key)).to be false
536
+ end
537
+ end
538
+ end
539
+ end
540
+ context "for new option keys" do
541
+ context "when calling it with option expires_in" do
542
+ let!(:time_before_expire) { time_now + (expires_in / 2) }
543
+ let!(:time_after_expire) { time_now + (expires_in * 2) }
544
+
545
+ before do
546
+ Timecop.freeze(time_now)
547
+ controller.send(:set_session_with_expiry,
548
+ session_key, session_value, expires_in: expires_in)
549
+ end
550
+
551
+ after do
552
+ Timecop.return
553
+ end
554
+
555
+ it "set the session" do
556
+ expect(session[session_key]).to eq session_value
557
+ end
558
+
559
+ context "before expire time" do
560
+ before do
561
+ Timecop.travel(time_before_expire)
562
+ # Runs before_filter
563
+ get :index
564
+ end
565
+
566
+ it "keeps the session key" do
567
+ expect(session[session_key]).to eq session_value
568
+ end
569
+ end
570
+ context "after expire time" do
571
+ before do
572
+ Timecop.travel(time_after_expire)
573
+ # Runs before_filter
574
+ get :index
575
+ end
576
+
577
+ it "keeps the session key" do
578
+ expect(session.key?(session_key)).to be false
579
+ end
580
+ end
581
+ end
582
+
583
+ context "when calling it with option expires_at" do
584
+ let!(:time_before_expire) { expires_at - 1 }
585
+ let!(:time_after_expire) { expires_at + 1 }
586
+
587
+ before do
588
+ Timecop.freeze(time_now)
589
+ controller.send(:set_session_with_expiry,
590
+ session_key, session_value, expire_at: expires_at)
591
+ end
592
+
593
+ after do
594
+ Timecop.return
595
+ end
596
+
597
+ it "set the session" do
598
+ expect(session[session_key]).to eq session_value
599
+ end
600
+
601
+ context "before expire time" do
602
+ before do
603
+ Timecop.travel(time_before_expire)
604
+ # Runs before_filter
605
+ get :index
606
+ end
607
+
608
+ it "keeps the session key" do
609
+ expect(session[session_key]).to eq session_value
610
+ end
611
+ end
612
+ context "after expire time" do
613
+ before do
614
+ Timecop.travel(time_after_expire)
615
+ # Runs before_filter
616
+ get :index
617
+ end
618
+
619
+ it "keeps the session key" do
620
+ expect(session.key?(session_key)).to be false
621
+ end
622
+ end
623
+ end
624
+ end
625
+
626
+ context "when option value with different types is passed into options" do
627
+ let(:method_call) do
628
+ controller.send(:set_session_with_expiry, session_key, session_value, options)
629
+ end
630
+
631
+ context "for old option keys" do
632
+ context "for expire_in" do
633
+ let(:options) { {expire_in: expire_in.to_s} }
634
+
635
+ specify do
636
+ expect { method_call }.
637
+ to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
638
+ end
639
+ end
640
+ context "for expire_at" do
641
+ context "with a Hash" do
642
+ # String#to_time would be nil if format invalid
643
+ let(:options) { {expire_at: {}} }
644
+
645
+ specify do
646
+ expect { method_call }.
647
+ to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
648
+ end
649
+ end
650
+ context "with a blank String" do
651
+ # String#to_time would be nil if format invalid
652
+ let(:options) { {expire_at: ""} }
653
+
654
+ specify { expect { method_call }.to_not raise_error }
655
+ end
656
+ context "with a time String" do
657
+ let(:options) { {expire_at: expire_at.to_s} }
658
+
659
+ specify { expect { method_call }.to_not raise_error }
660
+ end
661
+ context "with a Time" do
662
+ let(:options) { {expire_at: expire_at.to_time} }
663
+
664
+ specify { expect { method_call }.to_not raise_error }
665
+ end
666
+ context "with a Date" do
667
+ let(:options) { {expire_at: expire_at.to_date} }
668
+
669
+ specify { expect { method_call }.to_not raise_error }
670
+ end
671
+ context "with a DateTime" do
672
+ let(:options) { {expire_at: expire_at.in_time_zone} }
673
+
674
+ specify { expect { method_call }.to_not raise_error }
675
+ end
676
+ end
677
+ end
678
+ context "for new option keys" do
679
+ context "for expires_in" do
680
+ let(:options) { {expires_in: expires_in.to_s} }
681
+
682
+ specify do
683
+ expect { method_call }.
684
+ to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
685
+ end
686
+ end
687
+ context "for expires_at" do
688
+ context "with a Hash" do
689
+ # String#to_time would be nil if format invalid
690
+ let(:options) { {expires_at: {}} }
691
+
692
+ specify do
693
+ expect { method_call }.
694
+ to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
695
+ end
696
+ end
697
+ context "with a blank String" do
698
+ # String#to_time would be nil if format invalid
699
+ let(:options) { {expires_at: ""} }
700
+
701
+ specify { expect { method_call }.to_not raise_error }
702
+ end
703
+ context "with a time String" do
704
+ let(:options) { {expires_at: expire_at.to_s} }
705
+
706
+ specify { expect { method_call }.to_not raise_error }
707
+ end
708
+ context "with a Time" do
709
+ let(:options) { {expires_at: expire_at.to_time} }
710
+
711
+ specify { expect { method_call }.to_not raise_error }
712
+ end
713
+ context "with a Date" do
714
+ let(:options) { {expires_at: expire_at.to_date} }
715
+
716
+ specify { expect { method_call }.to_not raise_error }
717
+ end
718
+ context "with a DateTime" do
719
+ let(:options) { {expires_at: expire_at.in_time_zone} }
720
+
721
+ specify { expect { method_call }.to_not raise_error }
722
+ end
723
+ end
380
724
  end
381
725
  end
382
726
  end