2012-05-02 20:29:33 -04:00
|
|
|
require 'abstract_unit'
|
|
|
|
require 'action_dispatch/middleware/session/abstract_store'
|
|
|
|
|
|
|
|
module ActionDispatch
|
|
|
|
class Request
|
|
|
|
class SessionTest < ActiveSupport::TestCase
|
2015-08-22 20:57:45 -04:00
|
|
|
attr_reader :req
|
|
|
|
|
|
|
|
def setup
|
2015-12-01 14:28:01 -05:00
|
|
|
@req = ActionDispatch::Request.empty
|
2015-08-22 20:57:45 -04:00
|
|
|
end
|
|
|
|
|
2012-05-02 20:29:33 -04:00
|
|
|
def test_create_adds_itself_to_env
|
2015-08-22 20:57:45 -04:00
|
|
|
s = Session.create(store, req, {})
|
|
|
|
assert_equal s, req.env[Rack::RACK_SESSION]
|
2012-05-02 20:29:33 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_to_hash
|
2015-08-22 20:57:45 -04:00
|
|
|
s = Session.create(store, req, {})
|
2012-05-02 20:29:33 -04:00
|
|
|
s['foo'] = 'bar'
|
|
|
|
assert_equal 'bar', s['foo']
|
|
|
|
assert_equal({'foo' => 'bar'}, s.to_hash)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_create_merges_old
|
2015-08-22 20:57:45 -04:00
|
|
|
s = Session.create(store, req, {})
|
2012-05-02 20:29:33 -04:00
|
|
|
s['foo'] = 'bar'
|
|
|
|
|
2015-08-22 20:57:45 -04:00
|
|
|
s1 = Session.create(store, req, {})
|
2012-12-28 18:49:41 -05:00
|
|
|
assert_not_equal s, s1
|
2012-05-02 20:29:33 -04:00
|
|
|
assert_equal 'bar', s1['foo']
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_find
|
2015-08-22 20:57:45 -04:00
|
|
|
assert_nil Session.find(req)
|
2012-05-02 20:29:33 -04:00
|
|
|
|
2015-08-22 20:57:45 -04:00
|
|
|
s = Session.create(store, req, {})
|
|
|
|
assert_equal s, Session.find(req)
|
2012-05-02 20:29:33 -04:00
|
|
|
end
|
|
|
|
|
2014-03-19 22:01:08 -04:00
|
|
|
def test_destroy
|
2015-08-22 20:57:45 -04:00
|
|
|
s = Session.create(store, req, {})
|
2014-03-19 22:01:08 -04:00
|
|
|
s['rails'] = 'ftw'
|
|
|
|
|
|
|
|
s.destroy
|
|
|
|
|
|
|
|
assert_empty s
|
|
|
|
end
|
|
|
|
|
2012-05-22 22:24:08 -04:00
|
|
|
def test_keys
|
2015-08-22 20:57:45 -04:00
|
|
|
s = Session.create(store, req, {})
|
2012-05-22 22:24:08 -04:00
|
|
|
s['rails'] = 'ftw'
|
|
|
|
s['adequate'] = 'awesome'
|
|
|
|
assert_equal %w[rails adequate], s.keys
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_values
|
2015-08-22 20:57:45 -04:00
|
|
|
s = Session.create(store, req, {})
|
2012-05-22 22:24:08 -04:00
|
|
|
s['rails'] = 'ftw'
|
|
|
|
s['adequate'] = 'awesome'
|
|
|
|
assert_equal %w[ftw awesome], s.values
|
|
|
|
end
|
|
|
|
|
2012-09-07 17:57:01 -04:00
|
|
|
def test_clear
|
2015-08-22 20:57:45 -04:00
|
|
|
s = Session.create(store, req, {})
|
2012-09-07 17:57:01 -04:00
|
|
|
s['rails'] = 'ftw'
|
|
|
|
s['adequate'] = 'awesome'
|
2014-03-19 22:01:08 -04:00
|
|
|
|
2012-09-07 17:57:01 -04:00
|
|
|
s.clear
|
2014-03-19 22:01:08 -04:00
|
|
|
assert_empty(s.values)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_update
|
2015-08-22 20:57:45 -04:00
|
|
|
s = Session.create(store, req, {})
|
2014-03-19 22:01:08 -04:00
|
|
|
s['rails'] = 'ftw'
|
|
|
|
|
|
|
|
s.update(:rails => 'awesome')
|
|
|
|
|
|
|
|
assert_equal(['rails'], s.keys)
|
|
|
|
assert_equal('awesome', s['rails'])
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_delete
|
2015-08-22 20:57:45 -04:00
|
|
|
s = Session.create(store, req, {})
|
2014-03-19 22:01:08 -04:00
|
|
|
s['rails'] = 'ftw'
|
|
|
|
|
|
|
|
s.delete('rails')
|
|
|
|
|
|
|
|
assert_empty(s.keys)
|
2012-09-07 17:57:01 -04:00
|
|
|
end
|
|
|
|
|
2013-10-29 12:00:45 -04:00
|
|
|
def test_fetch
|
2015-08-22 20:57:45 -04:00
|
|
|
session = Session.create(store, req, {})
|
2013-10-29 12:00:45 -04:00
|
|
|
|
2013-10-30 10:04:19 -04:00
|
|
|
session['one'] = '1'
|
2013-10-29 12:00:45 -04:00
|
|
|
assert_equal '1', session.fetch(:one)
|
2013-10-30 10:04:19 -04:00
|
|
|
|
2013-10-29 12:00:45 -04:00
|
|
|
assert_equal '2', session.fetch(:two, '2')
|
2013-12-11 16:29:33 -05:00
|
|
|
assert_nil session.fetch(:two, nil)
|
2013-10-30 10:04:19 -04:00
|
|
|
|
2013-10-29 12:00:45 -04:00
|
|
|
assert_equal 'three', session.fetch(:three) {|el| el.to_s }
|
|
|
|
|
|
|
|
assert_raise KeyError do
|
2013-12-11 16:29:33 -05:00
|
|
|
session.fetch(:three)
|
2013-10-29 12:00:45 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-05-02 20:29:33 -04:00
|
|
|
private
|
|
|
|
def store
|
|
|
|
Class.new {
|
|
|
|
def load_session(env); [1, {}]; end
|
|
|
|
def session_exists?(env); true; end
|
2015-09-04 22:25:59 -04:00
|
|
|
def delete_session(env, id, options); 123; end
|
2012-05-02 20:29:33 -04:00
|
|
|
}.new
|
|
|
|
end
|
|
|
|
end
|
2016-05-02 17:56:57 -04:00
|
|
|
|
|
|
|
class SessionIntegrationTest < ActionDispatch::IntegrationTest
|
|
|
|
class MySessionApp
|
|
|
|
def call(env)
|
|
|
|
request = Rack::Request.new(env)
|
|
|
|
request.session['hello'] = 'Hello from MySessionApp!'
|
|
|
|
[ 200, {}, ['Hello from MySessionApp!'] ]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
Router = ActionDispatch::Routing::RouteSet.new
|
|
|
|
Router.draw do
|
|
|
|
get '/mysessionapp' => MySessionApp.new
|
|
|
|
end
|
|
|
|
|
|
|
|
def app
|
|
|
|
@app ||= RoutedRackApp.new(Router)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_session_follows_rack_api_contract_1
|
|
|
|
get '/mysessionapp'
|
|
|
|
assert_response :ok
|
|
|
|
assert_equal 'Hello from MySessionApp!', @response.body
|
|
|
|
assert_equal 'Hello from MySessionApp!', session['hello']
|
|
|
|
end
|
|
|
|
end
|
2012-05-02 20:29:33 -04:00
|
|
|
end
|
|
|
|
end
|