mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-08-10 00:01:27 -04:00
added test which loads the cookies from the response and passes it to the next request; added the functionality also, along with the cookie jar
This commit is contained in:
parent
1c507545c1
commit
5ee94bbc98
@ -16,24 +16,36 @@ module HTTPX
|
||||
module RequestMethods
|
||||
def initialize(*)
|
||||
super
|
||||
@headers.cookies(@options.cookies)
|
||||
@headers.cookies(@options.cookies, self)
|
||||
end
|
||||
end
|
||||
|
||||
module HeadersMethods
|
||||
def cookies(cookies)
|
||||
return unless cookies
|
||||
cookies.each do |k, v|
|
||||
cookie = k.is_a?(HTTP::Cookie) ? k : HTTP::Cookie.new(k.to_s, v.to_s)
|
||||
add("cookie", cookie.cookie_value)
|
||||
def cookies(jar, request)
|
||||
return unless jar
|
||||
unless jar.is_a?(HTTP::CookieJar)
|
||||
jar = jar.each_with_object(HTTP::CookieJar.new) do |(k, v), j|
|
||||
cookie = k.is_a?(HTTP::Cookie) ? v : HTTP::Cookie.new(k.to_s, v.to_s)
|
||||
cookie.domain = request.authority
|
||||
cookie.path = request.path
|
||||
j.add(cookie)
|
||||
end
|
||||
end
|
||||
self["cookie"] = HTTP::Cookie.cookie_value(jar.cookies)
|
||||
end
|
||||
end
|
||||
|
||||
module ResponseMethods
|
||||
def cookies
|
||||
headers["cookie"]
|
||||
def cookie_jar
|
||||
return @cookies if defined?(@cookies)
|
||||
return nil unless headers.key?("set-cookie")
|
||||
@cookies ||= begin
|
||||
jar = HTTP::CookieJar.new
|
||||
jar.parse(headers["set-cookie"], @request.uri)
|
||||
jar
|
||||
end
|
||||
end
|
||||
alias :cookies :cookie_jar
|
||||
end
|
||||
|
||||
module OptionsMethods
|
||||
|
@ -4,7 +4,7 @@ module Requests
|
||||
module Plugins
|
||||
module Cookies
|
||||
|
||||
def test_plugin_cookies
|
||||
def test_plugin_cookies_get
|
||||
client = HTTPX.plugin(:cookies)
|
||||
assert client.respond_to?(:cookies), "client should be cookie-enabled"
|
||||
response = client.get(cookies_uri)
|
||||
@ -19,11 +19,36 @@ module Requests
|
||||
assert body["cookies"]["abc"] == "def", "abc wasn't properly set"
|
||||
end
|
||||
|
||||
def test_plugin_cookies_set
|
||||
client = HTTPX.plugin(:cookies)
|
||||
session_cookies = { "a" => "b", "c" => "d" }
|
||||
session_uri = set_cookies_uri(session_cookies)
|
||||
session_response = client.get(set_cookies_uri(session_cookies))
|
||||
assert session_response.status == 302, "response should redirect"
|
||||
|
||||
assert !session_response.cookies.nil?, "there should be cookies in the response"
|
||||
response_cookies = session_response.cookie_jar
|
||||
assert !response_cookies.empty?
|
||||
response_cookies.cookies(session_uri).each do |cookie|
|
||||
assert session_cookies.one? { |k, v| k == cookie.name && v == cookie.value }
|
||||
end
|
||||
|
||||
response = client.cookies(response_cookies).get(cookies_uri)
|
||||
body = json_body(response)
|
||||
assert body.key?("cookies")
|
||||
assert body["cookies"]["a"] == "b"
|
||||
assert body["cookies"]["c"] == "d"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def cookies_uri
|
||||
build_uri("/cookies")
|
||||
end
|
||||
|
||||
def set_cookies_uri(cookies)
|
||||
build_uri("/cookies/set?" + URI.encode_www_form(cookies))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user