diff --git a/lib/rack/conform/application.rb b/lib/rack/conform/application.rb index 715bc55..541970c 100644 --- a/lib/rack/conform/application.rb +++ b/lib/rack/conform/application.rb @@ -41,9 +41,14 @@ def test_echo(env) end def test_cookies(env) - cookies = JSON.parse(env['rack.input'].read) + request = Rack::Request.new(env) + cookies = request.cookies Rack::Response.new.tap do |response| + # Hex encode non-printable characters: + value = env['HTTP_COOKIE'].gsub(/[^[:print:]]/, &:ord) + response.add_header('x-http-cookie', value) + cookies.each do |key, value| response.set_cookie(key, value) end diff --git a/test/rack/conform/cookies.rb b/test/rack/conform/cookies.rb index 661dc29..b0092f2 100644 --- a/test/rack/conform/cookies.rb +++ b/test/rack/conform/cookies.rb @@ -11,21 +11,35 @@ def body(headers) end it 'can respond with a single cookie' do - response = client.get("/cookies", {}, body({'a' => 1})) + response = client.get("/cookies", [['cookie', 'a=1']]) expect(response.status).to be == 200 expect(response.headers).to have_keys( + 'x-http-cookie' => be == ['a=1'], 'set-cookie' => be == ['a=1'] ) ensure response&.finish end -it 'can respond with multiple cookies' do - response = client.get("/cookies", {}, body({'a' => 1, 'b' => 2})) +it 'can respond with multiple combined cookies' do + response = client.get("/cookies", [['cookie', 'a=1;b=2']]) expect(response.status).to be == 200 expect(response.headers).to have_keys( + 'x-http-cookie' => be == ['a=1;b=2'], + 'set-cookie' => be == ["a=1", "b=2"] + ) +ensure + response&.finish +end + +it 'can respond with multiple cookie headers' do + response = client.get("/cookies", [['cookie', 'a=1'], ['cookie', 'b=2']]) + + expect(response.status).to be == 200 + expect(response.headers).to have_keys( + 'x-http-cookie' => be == ['a=1;b=2'], 'set-cookie' => be == ['a=1', 'b=2'] ) ensure