@@ -14,16 +14,8 @@ def simple_response(status, body = "", headers = {})
1414 )
1515 end
1616
17- def redirect_response ( status , location , set_cookie = { } )
18- res = simple_response status , "" , "Location" => location
19- set_cookie . each do |name , value |
20- res . headers . add ( "Set-Cookie" , "#{ name } =#{ value } ; path=/; httponly; secure; SameSite=none; Secure" )
21- end
22- res
23- end
24-
25- def cookie_jar_from ( redirector )
26- redirector . instance_variable_get ( :@cookie_jar )
17+ def redirect_response ( status , location )
18+ simple_response status , "" , "Location" => location
2719 end
2820
2921 describe "#strict" do
@@ -114,68 +106,6 @@ def cookie_jar_from(redirector)
114106 assert_equal "http://example.com/123" , res . to_s
115107 end
116108
117- it "forwards accumulated cookies through redirect chain" do
118- req = HTTP ::Request . new verb : :head , uri : "http://example.com"
119- hops = [
120- redirect_response ( 301 , "http://example.com/1" , { "foo" => "42" } ) ,
121- redirect_response ( 301 , "http://example.com/2" , { "bar" => "53" , "deleted" => "foo" } ) ,
122- redirect_response ( 301 , "http://example.com/3" , { "baz" => "64" , "deleted" => "" } ) ,
123- redirect_response ( 301 , "http://example.com/4" , { "baz" => "65" } ) ,
124- simple_response ( 200 , "bar" )
125- ]
126-
127- request_cookies = [
128- { "foo" => "42" } ,
129- { "foo" => "42" , "bar" => "53" , "deleted" => "foo" } ,
130- { "foo" => "42" , "bar" => "53" , "baz" => "64" } ,
131- { "foo" => "42" , "bar" => "53" , "baz" => "65" }
132- ]
133-
134- res = redirector . perform ( req , hops . shift ) do |request |
135- req_cookie = HTTP ::Cookie . cookie_value_to_hash ( request . headers [ "Cookie" ] || "" )
136-
137- assert_equal request_cookies . shift , req_cookie
138- hops . shift
139- end
140-
141- assert_equal "bar" , res . to_s
142- end
143-
144- it "forwards original request cookies through redirect chain" do
145- req = HTTP ::Request . new verb : :head , uri : "http://example.com"
146- req . headers . set ( "Cookie" , "foo=42; deleted=baz" )
147- hops = [
148- redirect_response ( 301 , "http://example.com/1" , { "bar" => "64" , "deleted" => "" } ) ,
149- simple_response ( 200 , "bar" )
150- ]
151-
152- request_cookies = [
153- { "foo" => "42" , "bar" => "64" } ,
154- { "foo" => "42" , "bar" => "64" }
155- ]
156-
157- redirector . perform ( req , hops . shift ) do |request |
158- req_cookie = HTTP ::Cookie . cookie_value_to_hash ( request . headers [ "Cookie" ] || "" )
159-
160- assert_equal request_cookies . shift , req_cookie
161- hops . shift
162- end
163- end
164-
165- it "collects request cookies with correct path" do
166- req = HTTP ::Request . new verb : :head , uri : "http://example.com/some/path"
167- req . headers . set ( "Cookie" , "foo=bar" )
168- hops = [ simple_response ( 200 , "done" ) ]
169-
170- redirector . perform ( req , redirect_response ( 301 , "http://example.com/other" ) ) do
171- hops . shift
172- end
173-
174- cookie = cookie_jar_from ( redirector ) . detect { |c | c . name == "foo" }
175-
176- assert_equal "/some/path" , cookie . path
177- end
178-
179109 context "with on_redirect callback" do
180110 let ( :options ) do
181111 {
@@ -567,64 +497,6 @@ def empty_body
567497 end
568498 end
569499
570- it "collects cookies from initial request headers" do
571- req = HTTP ::Request . new verb : :get , uri : "http://example.com"
572- req . headers . set ( "Cookie" , "initial=cookie" )
573- hops = [
574- redirect_response ( 301 , "http://example.com/1" ) ,
575- simple_response ( 200 , "done" )
576- ]
577-
578- redirector . perform ( req , hops . shift ) do |request |
579- cookie_header = request . headers [ "Cookie" ]
580-
581- assert_includes cookie_header , "initial=cookie"
582- hops . shift
583- end
584- end
585-
586- it "collects cookies from response Set-Cookie headers" do
587- req = HTTP ::Request . new verb : :get , uri : "http://example.com"
588- hops = [
589- redirect_response ( 301 , "http://example.com/1" , { "resp_cookie" => "value1" } ) ,
590- simple_response ( 200 , "done" )
591- ]
592-
593- redirector . perform ( req , hops . shift ) do |request |
594- cookie_header = request . headers [ "Cookie" ]
595-
596- assert_includes cookie_header , "resp_cookie=value1"
597- hops . shift
598- end
599- end
600-
601- it "deletes cookies with empty value during redirect" do
602- req = HTTP ::Request . new verb : :get , uri : "http://example.com"
603- hops = [
604- redirect_response ( 301 , "http://example.com/1" , { "mycookie" => "present" } ) ,
605- redirect_response ( 301 , "http://example.com/2" , { "mycookie" => "" } ) ,
606- simple_response ( 200 , "done" )
607- ]
608-
609- redirector . perform ( req , hops . shift ) { hops . shift }
610- cookie_names = cookie_jar_from ( redirector ) . map ( &:name )
611-
612- refute_includes cookie_names , "mycookie"
613- end
614-
615- it "does not set Cookie header when cookie jar is empty" do
616- req = HTTP ::Request . new verb : :get , uri : "http://example.com"
617- hops = [
618- redirect_response ( 301 , "http://example.com/1" ) ,
619- simple_response ( 200 , "done" )
620- ]
621-
622- redirector . perform ( req , hops . shift ) do |request |
623- assert_nil request . headers [ "Cookie" ]
624- hops . shift
625- end
626- end
627-
628500 context "with max_hops: 2 and an endless redirect loop" do
629501 let ( :options ) { { max_hops : 2 } }
630502
0 commit comments