65 lines
1.4 KiB
Ruby
65 lines
1.4 KiB
Ruby
|
require 'abstract_unit'
|
||
|
|
||
|
# You need to start a memcached server inorder to run these tests
|
||
|
class AbstractStoreTest < ActionController::IntegrationTest
|
||
|
SessionKey = '_myapp_session'
|
||
|
DispatcherApp = ActionController::Dispatcher.new
|
||
|
|
||
|
class TestController < ActionController::Base
|
||
|
def get_session
|
||
|
session[:test] = 'test'
|
||
|
head :ok
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def test_expiry_after
|
||
|
with_test_route_set(:expire_after => 5 * 60) do
|
||
|
get 'get_session'
|
||
|
assert_response :success
|
||
|
assert_match /expires=\S+/, headers['Set-Cookie']
|
||
|
end
|
||
|
end
|
||
|
|
||
|
protected
|
||
|
|
||
|
def with_test_route_set(options = {})
|
||
|
with_routing do |set|
|
||
|
set.draw do |map|
|
||
|
map.with_options :controller => "abstract_store_test/test" do |c|
|
||
|
c.connect "/:action"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
options = { :key => SessionKey, :secret => 'SessionSecret' }.merge!(options)
|
||
|
@integration_session = open_session(TestStore.new(DispatcherApp, options))
|
||
|
|
||
|
yield
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class TestStore < ActionController::Session::AbstractStore
|
||
|
def initialize(app, options = {})
|
||
|
super
|
||
|
@_store = Hash.new({})
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def get_session(env, sid)
|
||
|
sid ||= generate_sid
|
||
|
session = @_store[sid]
|
||
|
[sid, session]
|
||
|
end
|
||
|
|
||
|
def set_session(env, sid, session_data)
|
||
|
@_store[sid] = session_data
|
||
|
end
|
||
|
|
||
|
def destroy(env)
|
||
|
@_store.delete(sid)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|