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.
- checksums.yaml +5 -5
- data/.gitignore +7 -1
- data/.travis.yml +18 -11
- data/Appraisals +40 -12
- data/CHANGELOG.md +101 -11
- data/Gemfile +1 -1
- data/README.md +12 -16
- data/Rakefile +2 -2
- data/action_controller_tweaks.gemspec +14 -10
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/rails_4_2.gemfile +11 -0
- data/gemfiles/rails_5_0.gemfile +11 -0
- data/gemfiles/rails_5_1.gemfile +10 -0
- data/gemfiles/rails_5_2.gemfile +10 -0
- data/gemfiles/rails_6_0.gemfile +10 -0
- data/lib/action_controller_tweaks.rb +4 -4
- data/lib/action_controller_tweaks/caching.rb +7 -4
- data/lib/action_controller_tweaks/session.rb +81 -47
- data/lib/action_controller_tweaks/version.rb +3 -1
- data/spec/action_controller_tweaks_spec.rb +464 -120
- data/spec/fixtures/application.rb +8 -5
- data/spec/fixtures/controllers.rb +7 -5
- data/spec/spec_helper.rb +35 -10
- metadata +96 -66
- data/gemfiles/rails3_2.gemfile +0 -9
- data/gemfiles/rails4_0.gemfile +0 -9
@@ -1,29 +1,48 @@
|
|
1
|
-
require
|
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
|
5
|
-
|
6
|
-
described_class.ancestors.
|
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
|
11
|
-
describe
|
24
|
+
describe "::Caching" do
|
25
|
+
describe "#set_no_cache" do
|
12
26
|
before do
|
13
|
-
|
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
|
17
|
-
|
18
|
-
|
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
|
41
|
+
describe "::Session" do
|
23
42
|
let(:session_key) { :key }
|
24
|
-
let(:session_value) {
|
43
|
+
let(:session_value) { "value" }
|
25
44
|
|
26
|
-
describe
|
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
|
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
|
58
|
+
context "with normal key" do
|
40
59
|
before do
|
41
60
|
set_session
|
42
61
|
end
|
43
62
|
|
44
|
-
it
|
45
|
-
session[session_key].
|
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
|
68
|
+
context "with a reserved key" do
|
50
69
|
let(:session_key) { ActionControllerTweaks::Session::RESERVED_SESSION_KEYS.first }
|
51
70
|
|
52
|
-
it
|
53
|
-
expect { set_session }.
|
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
|
59
|
-
context
|
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
|
73
|
-
session[session_key].
|
92
|
+
it "set the session" do
|
93
|
+
expect(session[session_key]).to eq session_value
|
74
94
|
end
|
75
95
|
|
76
|
-
context
|
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
|
84
|
-
session[session_key].
|
103
|
+
it "keeps the session key" do
|
104
|
+
expect(session[session_key]).to eq session_value
|
85
105
|
end
|
86
106
|
end
|
87
|
-
context
|
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
|
95
|
-
session.key?(session_key).
|
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
|
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,
|
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
|
114
|
-
session[session_key].
|
148
|
+
it "set the session" do
|
149
|
+
expect(session[session_key]).to eq session_value
|
115
150
|
end
|
116
151
|
|
117
|
-
context
|
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
|
125
|
-
session[session_key].
|
159
|
+
it "keeps the session key" do
|
160
|
+
expect(session[session_key]).to eq session_value
|
126
161
|
end
|
127
162
|
end
|
128
|
-
context
|
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
|
136
|
-
session.key?(session_key).
|
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
|
142
|
-
context
|
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,
|
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
|
156
|
-
session[session_key].
|
191
|
+
it "set the session" do
|
192
|
+
expect(session[session_key]).to eq session_value
|
157
193
|
end
|
158
194
|
|
159
|
-
context
|
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
|
167
|
-
session[session_key].
|
202
|
+
it "keeps the session key" do
|
203
|
+
expect(session[session_key]).to eq session_value
|
168
204
|
end
|
169
205
|
end
|
170
|
-
context
|
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
|
178
|
-
session.key?(session_key).
|
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
|
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,
|
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
|
197
|
-
session[session_key].
|
233
|
+
it "set the session" do
|
234
|
+
expect(session[session_key]).to eq session_value
|
198
235
|
end
|
199
236
|
|
200
|
-
context
|
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
|
208
|
-
session[session_key].
|
244
|
+
it "keeps the session key" do
|
245
|
+
expect(session[session_key]).to eq session_value
|
209
246
|
end
|
210
247
|
end
|
211
|
-
context
|
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
|
219
|
-
session.key?(session_key).
|
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
|
232
|
-
context
|
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
|
271
|
+
specify do
|
272
|
+
expect { method_call }.
|
273
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
274
|
+
end
|
236
275
|
end
|
237
|
-
context
|
238
|
-
context
|
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
|
281
|
+
specify do
|
282
|
+
expect { method_call }.
|
283
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
284
|
+
end
|
243
285
|
end
|
244
|
-
context
|
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
|
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
|
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
|
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
|
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
|
273
|
-
context
|
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
|
318
|
+
specify do
|
319
|
+
expect { method_call }.
|
320
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
321
|
+
end
|
277
322
|
end
|
278
|
-
context
|
279
|
-
context
|
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
|
328
|
+
specify do
|
329
|
+
expect { method_call }.
|
330
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
331
|
+
end
|
284
332
|
end
|
285
|
-
context
|
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
|
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
|
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
|
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
|
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
|
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
|
368
|
+
context "when someone set non time string in expire_at_str" do
|
321
369
|
before do
|
322
|
-
session[
|
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
|
329
|
-
session.key?(session_key).
|
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
|
381
|
+
context "when someone set non-hash to session_keys_to_expire" do
|
334
382
|
before do
|
335
|
-
session[
|
383
|
+
session["session_keys_to_expire"] = []
|
336
384
|
end
|
337
385
|
|
338
|
-
it
|
339
|
-
session.key?(session_key).
|
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
|
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
|
405
|
+
context "when call with no options" do
|
351
406
|
let!(:options) { {} }
|
352
407
|
|
353
|
-
specify
|
408
|
+
specify do
|
409
|
+
expect { method_call }.
|
410
|
+
to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys)
|
411
|
+
end
|
354
412
|
end
|
355
|
-
context
|
413
|
+
context "when call with invalid option keys" do
|
356
414
|
let!(:options) { {key: :value} }
|
357
415
|
|
358
|
-
specify
|
416
|
+
specify do
|
417
|
+
expect { method_call }.
|
418
|
+
to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys)
|
419
|
+
end
|
359
420
|
end
|
360
|
-
context
|
361
|
-
context
|
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
|
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
|
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
|
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
|