improved cookies testing, to test also the array-of-cookie-hashes case; does not accept a string anymore, as besides untested, it wasn't working properly

This commit is contained in:
HoneyryderChuck 2020-10-31 14:49:28 +00:00
parent 1b068aca21
commit 959429b386
3 changed files with 26 additions and 18 deletions

View File

@ -20,18 +20,6 @@ module HTTPX
require "httpx/plugins/cookies/set_cookie_parser"
end
def self.extra_options(options)
Class.new(options.class) do
def_option(:cookies) do |cookies|
if cookies.is_a?(Store)
cookies
else
Store.new(cookies)
end
end
end.new(options)
end
class Store
def self.new(cookies = nil)
return cookies if cookies.is_a?(self)
@ -41,14 +29,14 @@ module HTTPX
def initialize(cookies = nil)
@store = Hash.new { |hash, origin| hash[origin] = HTTP::CookieJar.new }
return unless cookies
cookies = cookies.split(/ *; */) if cookies.is_a?(String)
@default_cookies = cookies.map do |cookie, v|
if cookie.is_a?(HTTP::Cookie)
cookie
@default_cookies = cookies.enum_for(:each).map do |*args|
if args.size == 1 && args.first.is_a?(HTTP::Cookie)
args.first
else
HTTP::Cookie.new(cookie.to_s, v.to_s)
HTTP::Cookie.new(*args)
end
end
end
@ -79,6 +67,18 @@ module HTTPX
require "http/cookie"
end
def self.extra_options(options)
Class.new(options.class) do
def_option(:cookies) do |cookies|
if cookies.is_a?(Store)
cookies
else
Store.new(cookies)
end
end
end.new(options)
end
module InstanceMethods
extend Forwardable

View File

@ -1,7 +1,7 @@
module HTTPX
module Plugins
module Cookies
type store_value = String | Array[HTTP::Cookie] | Hash[_ToS, _ToS]
type store_value = Array[HTTP::Cookie] | _Each[_ToS, _ToS] | _Each[Hash[_ToS, _ToS]]
type cookies_value = Store | store_value
interface _CookieOptions

View File

@ -16,6 +16,14 @@ module Requests
assert body["cookies"]["abc"] == "def", "abc wasn't properly set"
end
def test_plugin_cookies_get_with_hash
session = HTTPX.plugin(:cookies)
session_response = session.with_cookies([{ "name" => "abc", "value" => "def" }]).get(cookies_uri)
body = json_body(session_response)
assert body.key?("cookies")
assert body["cookies"]["abc"] == "def", "abc wasn't properly set"
end
def test_plugin_cookies_set
session = HTTPX.plugin(:cookies)
session_cookies = { "a" => "b", "c" => "d" }