2016-06-27 21:37:40 +00:00
|
|
|
require "./spec_helper"
|
|
|
|
|
|
|
|
describe "Session" do
|
|
|
|
it "can establish a session" do
|
|
|
|
sid = nil
|
|
|
|
existing = nil
|
|
|
|
get "/" do |env|
|
|
|
|
sess = env.session
|
|
|
|
existing = sess["token"]?
|
2016-06-27 23:24:03 +00:00
|
|
|
sess.delete("token")
|
2016-06-27 21:37:40 +00:00
|
|
|
sid = sess.id
|
|
|
|
sess["token"] = "abc"
|
|
|
|
"Hello"
|
|
|
|
end
|
|
|
|
|
|
|
|
# make first request without any cookies/session
|
|
|
|
request = HTTP::Request.new("GET", "/")
|
|
|
|
response = call_request_on_app(request)
|
|
|
|
|
|
|
|
# verify we got a cookie and session ID
|
|
|
|
cookie = response.headers["Set-Cookie"]?
|
|
|
|
cookie.should_not be_nil
|
2016-09-29 19:11:01 +00:00
|
|
|
response.cookies[Kemal.config.session["name"].as(String)].value.should eq(sid)
|
2016-06-27 21:37:40 +00:00
|
|
|
lastsid = sid
|
|
|
|
existing.should be_nil
|
|
|
|
|
|
|
|
# make second request with cookies to get session
|
2016-08-13 14:54:11 +00:00
|
|
|
request = HTTP::Request.new("GET", "/", response.headers)
|
2016-06-27 21:37:40 +00:00
|
|
|
response = call_request_on_app(request)
|
|
|
|
|
|
|
|
# verify we got cookies and we could see values set
|
|
|
|
# in the previous request
|
|
|
|
cookie2 = response.headers["Set-Cookie"]?
|
|
|
|
cookie2.should_not be_nil
|
|
|
|
cookie2.should eq(cookie)
|
2016-09-29 19:11:01 +00:00
|
|
|
response.cookies[Kemal.config.session["name"].as(String)].value.should eq(lastsid)
|
2016-06-27 21:37:40 +00:00
|
|
|
existing.should eq("abc")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "can prune old sessions" do
|
|
|
|
s = Kemal::Sessions::STORE
|
|
|
|
s.clear
|
|
|
|
|
|
|
|
Kemal::Sessions.prune!
|
|
|
|
|
|
|
|
id = "foo"
|
|
|
|
s[id] = Kemal::Sessions::Session.new(id)
|
|
|
|
s.size.should eq(1)
|
|
|
|
Kemal::Sessions.prune!
|
|
|
|
s.size.should eq(1)
|
|
|
|
|
|
|
|
s[id].last_access_at = (Time.now - 1.week).epoch_ms
|
|
|
|
Kemal::Sessions.prune!
|
|
|
|
s.size.should eq(0)
|
|
|
|
end
|
2016-09-29 19:48:19 +00:00
|
|
|
|
|
|
|
it "supports many types" do
|
|
|
|
who = nil
|
|
|
|
age = nil
|
|
|
|
awesome = nil
|
|
|
|
velocity = nil
|
|
|
|
get "/" do |env|
|
|
|
|
sess = env.session
|
|
|
|
who = sess["who"]?
|
|
|
|
age = sess["age"]?
|
|
|
|
velocity = sess["velocity"]?
|
|
|
|
awesome = sess["awesome"]?
|
|
|
|
arr = sess["arr"]?
|
|
|
|
sess["who"] = "Kemal"
|
|
|
|
sess["age"] = 2016
|
|
|
|
sess["velocity"] = 9999.9
|
|
|
|
sess["awesome"] = true
|
|
|
|
"Hello"
|
|
|
|
end
|
|
|
|
|
|
|
|
request = HTTP::Request.new("GET", "/")
|
|
|
|
response = call_request_on_app(request)
|
|
|
|
request = HTTP::Request.new("GET", "/", response.headers)
|
|
|
|
response = call_request_on_app(request)
|
|
|
|
|
|
|
|
who.should eq "Kemal"
|
|
|
|
age.should eq 2016
|
|
|
|
velocity.should eq 9999.9
|
|
|
|
awesome.should eq true
|
|
|
|
end
|
2016-06-27 21:37:40 +00:00
|
|
|
end
|