httpx/test/response_cache_store_test.rb
HoneyryderChuck 7173616154 response cache: fix vary header handling by supporting a defined set of headers
the cache key will be also determined by the supported vary headers values, when present; this means easier lookups, and one level hash fetch, where the same url-verb request may have multiple entries depending on those headers

checking response vary header will therefore be something done at cache response lookup; writes may override when they shouldn't though, as a full match on supported vary headers will be performed, and one can't know in advance the combo of vary headers, which is why insterested parties will have to be judicious with the new  option
2025-04-12 22:09:12 +01:00

36 lines
1.2 KiB
Ruby

# frozen_string_literal: true
require_relative "test_helper"
require "httpx/plugins/response_cache/store"
class ResponseCacheStoreTest < Minitest::Test
include ResponseCacheStoreTests
def test_internal_store_set
internal_store = store.instance_variable_get(:@store)
request = make_request("GET", "http://example.com/")
response = cached_response(request)
assert internal_store.size == 1
assert internal_store[request.response_cache_key] == response
response1 = cached_response(request, extra_headers: { "content-language" => "en" })
assert internal_store.size == 1
assert internal_store[request.response_cache_key] == response1
response2 = cached_response(request, extra_headers: { "content-language" => "en", "vary" => "accept-language" })
assert internal_store.size == 1
assert internal_store[request.response_cache_key] == response2
request.merge_headers("accept-language" => "pt")
response3 = cached_response(request, extra_headers: { "content-language" => "pt", "vary" => "accept-language" }, body: "teste")
assert internal_store.size == 2
assert internal_store[request.response_cache_key] == response3
end
private
def store
@store ||= Plugins::ResponseCache::Store.new
end
end