Skip to content

Commit a069f97

Browse files
authored
ConfigFetcher accepts ETag in a case-insensitive manner (#136)
* ConfigFetcher accepts ETag in a case-insensitive manner * credo fix
1 parent ae088d4 commit a069f97

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

lib/config_cat/config_fetcher.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ defmodule ConfigCat.CacheControlConfigFetcher do
330330
end
331331

332332
defp extract_etag(headers) do
333-
case List.keyfind(headers, "ETag", 0) do
333+
case Enum.find(headers, fn {key, _value} -> String.downcase(key) == "etag" end) do
334334
nil -> nil
335335
{_key, value} -> value
336336
end

test/config_cat/config_fetcher_test.exs

+12
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,18 @@ defmodule ConfigCat.ConfigFetcherTest do
138138
assert {:ok, :unchanged} = ConfigFetcher.fetch(fetcher, @etag)
139139
end
140140

141+
test "returns unchanged response (with lowercase 'etag') when server responds that the config hasn't changed" do
142+
{:ok, fetcher} = start_fetcher(@fetcher_options)
143+
144+
response = %Response{
145+
status_code: 304,
146+
headers: [{"etag", @etag}]
147+
}
148+
149+
stub(MockAPI, :get, fn _url, _headers, _options -> {:ok, response} end)
150+
assert {:ok, :unchanged} = ConfigFetcher.fetch(fetcher, @etag)
151+
end
152+
141153
@tag capture_log: true
142154
test "returns error for non-200 response from ConfigCat" do
143155
{:ok, fetcher} = start_fetcher(@fetcher_options)

0 commit comments

Comments
 (0)