Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compression Middleware: Add accept-encoding header when appropriate #485

Merged
merged 1 commit into from
May 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/tesla/middleware/compression.ex
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ defmodule Tesla.Middleware.Compression do
def call(env, next, opts) do
env
|> compress(opts)
|> Tesla.put_headers([{"accept-encoding", "gzip, deflate"}])
|> Tesla.run(next)
|> decompress()
end
Expand Down Expand Up @@ -98,6 +99,7 @@ defmodule Tesla.Middleware.DecompressResponse do
@impl Tesla.Middleware
def call(env, next, _opts) do
env
|> Tesla.put_headers([{"accept-encoding", "gzip, deflate"}])
|> Tesla.run(next)
|> Tesla.Middleware.Compression.decompress()
end
Expand Down
63 changes: 63 additions & 0 deletions test/tesla/middleware/compression_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -104,4 +104,67 @@ defmodule Tesla.Middleware.CompressionTest do
assert {:ok, env} = CRDRClient.post("/", "foo bar")
assert env.body == "foo bar"
end

defmodule CompressionHeadersClient do
use Tesla

plug Tesla.Middleware.Compression

adapter fn env ->
{status, headers, body} =
case env.url do
"/" ->
{200, [{"content-type", "text/plain"}, {"content-encoding", "gzip"}], env.headers}
end

{:ok, %{env | status: status, headers: headers, body: body}}
end
end

test "Compression headers" do
assert {:ok, env} = CompressionHeadersClient.get("/")
assert env.body == [{"accept-encoding", "gzip, deflate"}]
end

defmodule DecompressResponseHeadersClient do
use Tesla

plug Tesla.Middleware.DecompressResponse

adapter fn env ->
{status, headers, body} =
case env.url do
"/" ->
{200, [{"content-type", "text/plain"}, {"content-encoding", "gzip"}], env.headers}
end

{:ok, %{env | status: status, headers: headers, body: body}}
end
end

test "Decompress response headers" do
assert {:ok, env} = DecompressResponseHeadersClient.get("/")
assert env.body == [{"accept-encoding", "gzip, deflate"}]
end

defmodule CompressRequestHeadersClient do
use Tesla

plug Tesla.Middleware.CompressRequest

adapter fn env ->
{status, headers, body} =
case env.url do
"/" ->
{200, [{"content-type", "text/plain"}, {"content-encoding", "gzip"}], env.headers}
end

{:ok, %{env | status: status, headers: headers, body: body}}
end
end

test "Compress request headers" do
assert {:ok, env} = CompressRequestHeadersClient.get("/")
assert env.body == []
end
end