@@ -45,6 +45,69 @@ def app; subject end
4545 end
4646 end
4747
48+ describe '#cookies' do
49+ it 'should be callable from within a block' do
50+ subject . get ( '/get/cookies' ) do
51+ cookies [ 'my-awesome-cookie1' ] = 'is cool'
52+ cookies [ 'my-awesome-cookie2' ] = {
53+ :value => 'is cool too' ,
54+ :domain => 'my.example.com' ,
55+ :path => '/' ,
56+ :secure => true ,
57+ }
58+ cookies [ :cookie3 ] = 'symbol'
59+ cookies [ 'cookie4' ] = 'secret code here'
60+ end
61+
62+ get ( '/get/cookies' )
63+
64+ last_response . headers [ 'Set-Cookie' ] . tap { |set_cookies |
65+ set_cookies . should =~ /my-awesome-cookie1=is\+ cool\n /
66+ set_cookies . should =~ /my-awesome-cookie2=is\+ cool\+ too;\ domain=my\. example\. com;\ path=\/ ;\ secure\n /
67+ set_cookies . should =~ /cookie3=symbol\n /
68+ set_cookies . should =~ /cookie4=secret\+ code\+ here/
69+ }
70+ end
71+
72+ it "should set browser cookies and should not set response cookies" do
73+ subject . get ( '/username' ) do
74+ cookies [ :username ]
75+ end
76+ get ( '/username' , { } , 'HTTP_COOKIE' => 'username=mrplum; sandbox=true' )
77+
78+ last_response . body . should == 'mrplum'
79+ last_response . headers [ 'Set-Cookie' ] . should_not =~ /username=mrplum/
80+ last_response . headers [ 'Set-Cookie' ] . should_not =~ /sandbox=true/
81+ end
82+
83+ it "should set and update browser cookies" do
84+ subject . get ( '/username' ) do
85+ cookies [ :sandbox ] = true if cookies [ :sandbox ] == 'false'
86+ cookies [ :username ] += "_test"
87+ end
88+ get ( '/username' , { } , 'HTTP_COOKIE' => 'username=user; sandbox=false' )
89+ last_response . body . should == 'user_test'
90+ last_response . headers [ 'Set-Cookie' ] . should =~ /username=user_test/
91+ last_response . headers [ 'Set-Cookie' ] . should =~ /sandbox=true/
92+ end
93+
94+ it "should delete cookie" do
95+ subject . get ( '/test' ) do
96+ sum = 0
97+ cookies . each do |name , val |
98+ sum += val . to_i
99+ cookies . delete name
100+ end
101+ sum
102+ end
103+ get ( '/test' , { } , 'HTTP_COOKIE' => 'delete_this_cookie=1; and_this=2' )
104+ last_response . body . should == '3'
105+ last_response . headers [ 'Set-Cookie' ] . should ==
106+ "delete_this_cookie=deleted; expires=Thu, 01-Jan-1970 00:00:00 GMT\n " +
107+ 'and_this=deleted; expires=Thu, 01-Jan-1970 00:00:00 GMT'
108+ end
109+ end
110+
48111 describe '#params' do
49112 it 'should be available to the caller' do
50113 subject . get ( '/hey' ) do
0 commit comments