@@ -29,6 +29,69 @@ def app; subject end
2929 last_response . headers [ 'X-Awesome' ] . should == 'true'
3030 end
3131 end
32+
33+ describe '#cookies' do
34+ it 'should be callable from within a block' do
35+ subject . get ( '/get/cookies' ) do
36+ cookies [ 'my-awesome-cookie1' ] = 'is cool'
37+ cookies [ 'my-awesome-cookie2' ] = {
38+ :value => 'is cool too' ,
39+ :domain => 'my.example.com' ,
40+ :path => '/' ,
41+ :secure => true ,
42+ }
43+ cookies [ :cookie3 ] = 'symbol'
44+ cookies [ 'cookie4' ] = 'secret code here'
45+ end
46+
47+ get ( '/get/cookies' )
48+
49+ last_response . headers [ 'Set-Cookie' ] . tap { |set_cookies |
50+ set_cookies . should =~ /my-awesome-cookie1=is\+ cool\n /
51+ set_cookies . should =~ /my-awesome-cookie2=is\+ cool\+ too;\ domain=my\. example\. com;\ path=\/ ;\ secure\n /
52+ set_cookies . should =~ /cookie3=symbol\n /
53+ set_cookies . should =~ /cookie4=secret\+ code\+ here/
54+ }
55+ end
56+
57+ it "should set browser cookies and should not set response cookies" do
58+ subject . get ( '/username' ) do
59+ cookies [ :username ]
60+ end
61+ get ( '/username' , { } , 'HTTP_COOKIE' => 'username=mrplum; sandbox=true' )
62+
63+ last_response . body . should == 'mrplum'
64+ last_response . headers [ 'Set-Cookie' ] . should_not =~ /username=mrplum/
65+ last_response . headers [ 'Set-Cookie' ] . should_not =~ /sandbox=true/
66+ end
67+
68+ it "should set and update browser cookies" do
69+ subject . get ( '/username' ) do
70+ cookies [ :sandbox ] = true if cookies [ :sandbox ] == 'false'
71+ cookies [ :username ] += "_test"
72+ end
73+ get ( '/username' , { } , 'HTTP_COOKIE' => 'username=user; sandbox=false' )
74+ last_response . body . should == 'user_test'
75+ last_response . headers [ 'Set-Cookie' ] . should =~ /username=user_test/
76+ last_response . headers [ 'Set-Cookie' ] . should =~ /sandbox=true/
77+ end
78+
79+ it "should delete cookie" do
80+ subject . get ( '/test' ) do
81+ sum = 0
82+ cookies . each do |name , val |
83+ sum += val . to_i
84+ cookies . delete name
85+ end
86+ sum
87+ end
88+ get ( '/test' , { } , 'HTTP_COOKIE' => 'delete_this_cookie=1; and_this=2' )
89+ last_response . body . should == '3'
90+ last_response . headers [ 'Set-Cookie' ] . should ==
91+ "delete_this_cookie=deleted; expires=Thu, 01-Jan-1970 00:00:00 GMT\n " +
92+ 'and_this=deleted; expires=Thu, 01-Jan-1970 00:00:00 GMT'
93+ end
94+ end
3295
3396 describe '#params' do
3497 it 'should be available to the caller' do
0 commit comments