Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F114103
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
17 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/test/tesla/middleware/compression_test.exs b/test/tesla/middleware/compression_test.exs
index 741d916..69ca55a 100644
--- a/test/tesla/middleware/compression_test.exs
+++ b/test/tesla/middleware/compression_test.exs
@@ -1,112 +1,102 @@
defmodule Tesla.Middleware.CompressionTest do
use ExUnit.Case
defmodule CompressionGzipRequestClient do
use Tesla
plug Tesla.Middleware.Compression
adapter fn env ->
{status, headers, body} =
case env.url do
"/" ->
- {200, %{'Content-Type' => 'text/plain'}, :zlib.gunzip(env.body)}
+ {200, [{"content-type", "text/plain"}], :zlib.gunzip(env.body)}
end
%{env | status: status, headers: headers, body: body}
end
end
test "compress request body (gzip)" do
assert CompressionGzipRequestClient.post("/", "compress request").body == "compress request"
end
defmodule CompressionDeflateRequestClient do
use Tesla
plug Tesla.Middleware.Compression, format: "deflate"
adapter fn env ->
{status, headers, body} =
case env.url do
"/" ->
- {200, %{'Content-Type' => 'text/plain'}, :zlib.unzip(env.body)}
+ {200, [{"content-type", "text/plain"}], :zlib.unzip(env.body)}
end
%{env | status: status, headers: headers, body: body}
end
end
test "compress request body (deflate)" do
assert CompressionDeflateRequestClient.post("/", "compress request").body ==
"compress request"
end
defmodule CompressionResponseClient do
use Tesla
plug Tesla.Middleware.Compression
adapter fn env ->
{status, headers, body} =
case env.url do
"/response-gzip" ->
- {
- 200,
- %{'Content-Type' => 'text/plain', 'Content-Encoding' => 'gzip'},
- :zlib.gzip("decompressed gzip")
- }
+ {200, [{"content-type", "text/plain"}, {"content-encoding", "gzip"}],
+ :zlib.gzip("decompressed gzip")}
"/response-deflate" ->
- {
- 200,
- %{'Content-Type' => 'text/plain', 'Content-Encoding' => 'deflate'},
- :zlib.zip("decompressed deflate")
- }
+ {200, [{"content-type", "text/plain"}, {"content-encoding", "deflate"}],
+ :zlib.zip("decompressed deflate")}
"/response-identity" ->
- {
- 200,
- %{'Content-Type' => 'text/plain', 'Content-Encoding' => 'identity'},
- "unchanged"
- }
+ {200, [{"content-type", "text/plain"}, {"content-encoding", "identity"}], "unchanged"}
end
%{env | status: status, headers: headers, body: body}
end
end
test "decompress response body (gzip)" do
assert CompressionResponseClient.get("/response-gzip").body == "decompressed gzip"
end
test "decompress response body (deflate)" do
assert CompressionResponseClient.get("/response-deflate").body == "decompressed deflate"
end
test "return unchanged response for unsupported content-encoding" do
assert CompressionResponseClient.get("/response-identity").body == "unchanged"
end
defmodule CompressRequestDecompressResponseClient do
use Tesla
plug Tesla.Middleware.CompressRequest
plug Tesla.Middleware.DecompressResponse
adapter fn env ->
{status, headers, body} =
case env.url do
"/" ->
- {200, %{'Content-Type' => 'text/plain', 'Content-Encoding' => 'gzip'}, env.body}
+ {200, [{"content-type", "text/plain"}, {"content-encoding", "gzip"}], env.body}
end
%{env | status: status, headers: headers, body: body}
end
end
test "CompressRequest / DecompressResponse work without options" do
alias CompressRequestDecompressResponseClient, as: CRDRClient
assert CRDRClient.post("/", "foo bar").body == "foo bar"
end
end
diff --git a/test/tesla/middleware/follow_redirects_test.exs b/test/tesla/middleware/follow_redirects_test.exs
index 1e04c79..9185c00 100644
--- a/test/tesla/middleware/follow_redirects_test.exs
+++ b/test/tesla/middleware/follow_redirects_test.exs
@@ -1,105 +1,105 @@
defmodule Tesla.Middleware.FollowRedirectsTest do
use ExUnit.Case
defmodule Client do
use Tesla
plug Tesla.Middleware.FollowRedirects
adapter fn env ->
{status, headers, body} =
case env.url do
"http://example.com/0" ->
- {200, %{'Content-Type' => 'text/plain'}, "foo bar"}
+ {200, [{"content-type", "text/plain"}], "foo bar"}
"http://example.com/" <> n ->
next = String.to_integer(n) - 1
- {301, %{'Location' => 'http://example.com/#{next}'}, ""}
+ {301, [{"location", "http://example.com/#{next}"}], ""}
end
%{env | status: status, headers: headers, body: body}
end
end
test "redirects if default max redirects isn't exceeded" do
assert Client.get("http://example.com/5").status == 200
end
test "raise error when redirect default max redirects is exceeded" do
assert_raise(Tesla.Error, "too many redirects", fn -> Client.get("http://example.com/6") end)
end
defmodule CustomMaxRedirectsClient do
use Tesla
plug Tesla.Middleware.FollowRedirects, max_redirects: 1
adapter fn env ->
{status, headers, body} =
case env.url do
"http://example.com/0" ->
- {200, %{'Content-Type' => 'text/plain'}, "foo bar"}
+ {200, [{"content-type", "text/plain"}], "foo bar"}
"http://example.com/" <> n ->
next = String.to_integer(n) - 1
- {301, %{'Location' => 'http://example.com/#{next}'}, ""}
+ {301, [{"location", "http://example.com/#{next}"}], ""}
end
%{env | status: status, headers: headers, body: body}
end
end
alias CustomMaxRedirectsClient, as: CMRClient
test "redirects if custom max redirects isn't exceeded" do
assert CMRClient.get("http://example.com/1").status == 200
end
test "raise error when custom max redirects is exceeded" do
assert_raise(Tesla.Error, "too many redirects", fn ->
CMRClient.get("http://example.com/2")
end)
end
defmodule RelativeLocationClient do
use Tesla
plug Tesla.Middleware.FollowRedirects
adapter fn env ->
{status, headers, body} =
case env.url do
"https://example.com/pl" ->
- {200, %{'Content-Type' => 'text/plain'}, "foo bar"}
+ {200, [{"content-type", "text/plain"}], "foo bar"}
"http://example.com" ->
- {301, %{'Location' => 'https://example.com'}, ""}
+ {301, [{"location", "https://example.com"}], ""}
"https://example.com" ->
- {301, %{'Location' => '/pl'}, ""}
+ {301, [{"location", "/pl"}], ""}
"https://example.com/" ->
- {301, %{'Location' => '/pl'}, ""}
+ {301, [{"location", "/pl"}], ""}
"https://example.com/article" ->
- {301, %{'Location' => '/pl'}, ""}
+ {301, [{"location", "/pl"}], ""}
end
%{env | status: status, headers: headers, body: body}
end
end
alias RelativeLocationClient, as: RLClient
test "supports relative address in location header" do
assert RLClient.get("http://example.com").status == 200
end
test "doesn't create double slashes inside new url" do
assert RLClient.get("https://example.com/").url == "https://example.com/pl"
end
test "rewrites URLs to their root" do
assert RLClient.get("https://example.com/article").url == "https://example.com/pl"
end
end
diff --git a/test/tesla/middleware/form_urlencoded_test.exs b/test/tesla/middleware/form_urlencoded_test.exs
index f88b384..fadba6c 100644
--- a/test/tesla/middleware/form_urlencoded_test.exs
+++ b/test/tesla/middleware/form_urlencoded_test.exs
@@ -1,61 +1,61 @@
defmodule Tesla.Middleware.FormUrlencodedTest do
use ExUnit.Case
defmodule Client do
use Tesla
plug Tesla.Middleware.FormUrlencoded
adapter fn env ->
{status, headers, body} =
case env.url do
"/post" ->
- {201, %{'Content-Type' => 'text/html'}, env.body}
+ {201, [{"content-type", "text/html"}], env.body}
"/check_incoming_content_type" ->
- {201, %{'Content-Type' => 'text/html'}, Tesla.get_header(env, "content-type")}
+ {201, [{"content-type", "text/html"}], Tesla.get_header(env, "content-type")}
end
%{env | status: status, headers: headers, body: body}
end
end
test "encode body as application/x-www-form-urlencoded" do
assert URI.decode_query(Client.post("/post", %{"foo" => "%bar "}).body) == %{"foo" => "%bar "}
end
test "leave body alone if binary" do
assert Client.post("/post", "data").body == "data"
end
test "check header is set as application/x-www-form-urlencoded" do
assert Client.post("/check_incoming_content_type", %{"foo" => "%bar "}).body ==
"application/x-www-form-urlencoded"
end
defmodule MultipartClient do
use Tesla
plug Tesla.Middleware.FormUrlencoded
adapter fn %{url: url, body: %Tesla.Multipart{}} = env ->
{status, headers, body} =
case url do
"/upload" ->
- {200, %{'Content-Type' => 'text/html'}, "ok"}
+ {200, [{"content-type", "text/html"}], "ok"}
end
%{env | status: status, headers: headers, body: body}
end
end
test "skips encoding multipart bodies" do
alias Tesla.Multipart
mp =
Multipart.new()
|> Multipart.add_field("param", "foo")
assert MultipartClient.post("/upload", mp).body == "ok"
end
end
diff --git a/test/tesla/middleware/json_test.exs b/test/tesla/middleware/json_test.exs
index 70356a7..eff5aa0 100644
--- a/test/tesla/middleware/json_test.exs
+++ b/test/tesla/middleware/json_test.exs
@@ -1,209 +1,189 @@
defmodule Tesla.Middleware.JsonTest do
use ExUnit.Case
defmodule Client do
use Tesla
plug Tesla.Middleware.JSON
adapter fn env ->
{status, headers, body} =
case env.url do
"/decode" ->
- {200, %{'Content-Type' => 'application/json'}, "{\"value\": 123}"}
+ {200, [{"content-type", "application/json"}], "{\"value\": 123}"}
"/encode" ->
- {
- 200,
- %{'Content-Type' => 'application/json'},
- env.body |> String.replace("foo", "baz")
- }
+ {200, [{"content-type", "application/json"}],
+ env.body |> String.replace("foo", "baz")}
"/empty" ->
- {200, %{'Content-Type' => 'application/json'}, nil}
+ {200, [{"content-type", "application/json"}], nil}
"/empty-string" ->
- {200, %{'Content-Type' => 'application/json'}, ""}
+ {200, [{"content-type", "application/json"}], ""}
"/invalid-content-type" ->
- {200, %{'Content-Type' => 'text/plain'}, "hello"}
+ {200, [{"content-type", "text/plain"}], "hello"}
"/invalid-json-format" ->
- {200, %{'Content-Type' => 'application/json'}, "{\"foo\": bar}"}
+ {200, [{"content-type", "application/json"}], "{\"foo\": bar}"}
"/invalid-json-encoding" ->
- {200, %{'Content-Type' => 'application/json'}, <<
- 123,
- 34,
- 102,
- 111,
- 111,
- 34,
- 58,
- 32,
- 34,
- 98,
- 225,
- 114,
- 34,
- 125
- >>}
+ {200, [{"content-type", "application/json"}],
+ <<123, 34, 102, 111, 111, 34, 58, 32, 34, 98, 225, 114, 34, 125>>}
"/facebook" ->
- {200, %{'Content-Type' => 'text/javascript'}, "{\"friends\": 1000000}"}
+ {200, [{"content-type", "text/javascript"}], "{\"friends\": 1000000}"}
"/raw" ->
- {200, %{}, env.body}
+ {200, [], env.body}
"/stream" ->
list = env.body |> Enum.to_list() |> Enum.join("---")
- {200, %{}, list}
+ {200, [], list}
end
%{env | status: status, headers: headers, body: body}
end
end
test "decode JSON body" do
assert Client.get("/decode").body == %{"value" => 123}
end
test "do not decode empty body" do
assert Client.get("/empty").body == nil
end
test "do not decode empty string body" do
assert Client.get("/empty-string").body == ""
end
test "decode only if Content-Type is application/json or test/json" do
assert Client.get("/invalid-content-type").body == "hello"
end
test "encode body as JSON" do
assert Client.post("/encode", %{"foo" => "bar"}).body == %{"baz" => "bar"}
end
test "do not encode nil body" do
assert Client.post("/raw", nil).body == nil
end
test "do not encode binary body" do
assert Client.post("/raw", "raw-string").body == "raw-string"
end
test "decode if Content-Type is text/javascript" do
assert Client.get("/facebook").body == %{"friends" => 1_000_000}
end
test "post json stream" do
stream = Stream.map(1..3, fn i -> %{id: i} end)
assert env = Client.post("/stream", stream)
assert env.body == ~s|{"id":1}\n---{"id":2}\n---{"id":3}\n|
end
test "raise error when decoding invalid json format" do
assert_raise Tesla.Error, ~r/JSON decode error:/, fn ->
Client.get("/invalid-json-format")
end
end
test "raise error when decoding non-utf8 json" do
assert_raise Tesla.Error, ~r/JSON decode error:/, fn ->
Client.get("/invalid-json-encoding")
end
end
defmodule CustomClient do
use Tesla
plug Tesla.Middleware.DecodeJson, engine: Poison, engine_opts: [keys: :atoms]
adapter fn env ->
{status, headers, body} =
case env.url do
"/decode" ->
- {200, %{'Content-Type' => 'application/json'}, "{\"value\": 123}"}
+ {200, [{"content-type", "application/json"}], "{\"value\": 123}"}
end
%{env | status: status, headers: headers, body: body}
end
end
test "decode with custom engine options" do
assert CustomClient.get("/decode").body == %{value: 123}
end
defmodule CustomContentTypeClient do
use Tesla
plug Tesla.Middleware.JSON, decode_content_types: ["application/x-custom-json"]
adapter fn env ->
{status, headers, body} =
case env.url do
"/decode" ->
- {200, %{'Content-Type' => 'application/x-custom-json'}, "{\"value\": 123}"}
+ {200, [{"content-type", "application/x-custom-json"}], "{\"value\": 123}"}
end
%{env | status: status, headers: headers, body: body}
end
end
test "decode if Content-Type specified in :decode_content_types" do
alias CustomContentTypeClient, as: CCTClient
assert CCTClient.get("/decode").body == %{"value" => 123}
end
defmodule EncodeDecodeJsonClient do
use Tesla
plug Tesla.Middleware.DecodeJson
plug Tesla.Middleware.EncodeJson
adapter fn env ->
{status, headers, body} =
case env.url do
"/foo2baz" ->
- {
- 200,
- %{'Content-Type' => 'application/json'},
- env.body |> String.replace("foo", "baz")
- }
+ {200, [{"content-type", "application/json"}],
+ env.body |> String.replace("foo", "baz")}
end
%{env | status: status, headers: headers, body: body}
end
end
test "EncodeJson / DecodeJson work without options" do
alias EncodeDecodeJsonClient, as: EDJClient
assert EDJClient.post("/foo2baz", %{"foo" => "bar"}).body == %{"baz" => "bar"}
end
defmodule MultipartClient do
use Tesla
plug Tesla.Middleware.JSON
adapter fn %{url: url, body: %Tesla.Multipart{}} = env ->
{status, headers, body} =
case url do
"/upload" ->
- {200, %{'Content-Type' => 'application/json'}, "{\"status\": \"ok\"}"}
+ {200, [{"content-type", "application/json"}], "{\"status\": \"ok\"}"}
end
%{env | status: status, headers: headers, body: body}
end
end
test "skips encoding multipart bodies" do
alias Tesla.Multipart
mp =
Multipart.new()
|> Multipart.add_field("param", "foo")
assert MultipartClient.post("/upload", mp).body == %{"status" => "ok"}
end
end
diff --git a/test/tesla/mock_test.exs b/test/tesla/mock_test.exs
index 4c712ff..f8b5533 100644
--- a/test/tesla/mock_test.exs
+++ b/test/tesla/mock_test.exs
@@ -1,42 +1,42 @@
defmodule Tesla.MockTest do
use ExUnit.Case
defp setup_mock(_) do
Tesla.Mock.mock(fn
%{method: :get, url: "http://example.com/list"} -> %Tesla.Env{status: 200, body: "hello"}
- %{method: :post, url: "http://example.com/create", body: ~s({"some":"data"})} -> {201, %{"Content-Type" => "application/json"}, ~s({"id":42})}
+ %{method: :post, url: "http://example.com/create", body: ~s({"some":"data"})} -> {201, [{"content-type", "application/json"}], ~s"{\"id\":42}"}
end)
:ok
end
describe "with mock" do
setup :setup_mock
test "mock get request" do
assert %Tesla.Env{} = env = MockClient.list()
assert env.status == 200
assert env.body == "hello"
end
test "raise on unmocked request" do
assert_raise Tesla.Mock.Error, fn ->
MockClient.search()
end
end
test "mock post request" do
assert %Tesla.Env{} = env = MockClient.create(%{"some" => "data"})
assert env.status == 201
assert env.body == %{"id" => 42}
end
end
describe "without mock" do
test "raise on unmocked request" do
assert_raise Tesla.Mock.Error, fn ->
MockClient.search()
end
end
end
end
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Nov 25, 7:52 PM (1 d, 6 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40041
Default Alt Text
(17 KB)
Attached To
Mode
R28 tesla
Attached
Detach File
Event Timeline
Log In to Comment