-
Notifications
You must be signed in to change notification settings - Fork 25
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
API: add test coverage for
APIResponse
- Loading branch information
Showing
5 changed files
with
212 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,209 @@ | ||
defmodule Playwright.APIResponseTest do | ||
use Playwright.TestCase, async: true | ||
alias Playwright.API.Error | ||
alias Playwright.APIRequest | ||
alias Playwright.APIResponse | ||
alias Playwright.APIRequestContext | ||
|
||
describe "APIResponse.dispose/" do | ||
describe "APIResponse.body/1" do | ||
test "on success, returns response body", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
|
||
assert "{\"foo\": \"bar\"}\n" = APIResponse.body(response) | ||
end | ||
|
||
test "on failure, returns `{:error, error}`", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
response = %{response | fetchUid: "bogus"} | ||
|
||
assert {:error, %Error{type: "ResponseError"}} = APIResponse.body(response) | ||
end | ||
|
||
test "on HTTP error, returns status code as the response body", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/bogus.json") | ||
|
||
assert "404" = APIResponse.body(response) | ||
end | ||
end | ||
|
||
describe "APIResponse.body!/1" do | ||
test "on failure, raises", %{assets: assets, session: session} do | ||
assert_raise RuntimeError, fn -> | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
response = %{response | fetchUid: "bogus"} | ||
|
||
APIResponse.body!(response) | ||
end | ||
end | ||
end | ||
|
||
describe "APIResponse.dispose/1" do | ||
test "on success, causes subsequent usage of `APIResponse` to fail", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
|
||
assert :ok = APIResponse.dispose(response) | ||
assert {:error, %{type: "ResponseError", message: "Response has been disposed"}} = APIResponse.body(response) | ||
end | ||
|
||
test "on failure, returns `{:error, error}`", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
response = %{response | context: %{guid: "bogus", session: session}} | ||
|
||
assert {:error, %Error{type: "TargetClosedError"}} = APIResponse.dispose(response) | ||
end | ||
end | ||
|
||
describe "APIResponse.dispose!/1" do | ||
test "on failure, raises", %{assets: assets, session: session} do | ||
assert_raise RuntimeError, fn -> | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
response = %{response | context: %{guid: "bogus", session: session}} | ||
|
||
APIResponse.dispose!(response) | ||
end | ||
end | ||
end | ||
|
||
describe "APIResponse.header/1" do | ||
test "on success, returns the value of the HTTP header", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
|
||
assert "application/json" = APIResponse.header(response, "content-type") | ||
end | ||
|
||
test "when the HTTP header is not found, returns `nil`", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
|
||
assert APIResponse.header(response, "bogus") == nil | ||
end | ||
end | ||
|
||
describe "APIResponse.header!/1" do | ||
test "on success, returns the value of the HTTP header", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
|
||
assert "application/json" = APIResponse.header(response, "content-type") | ||
end | ||
|
||
# @tag :skip | ||
# ...haven't found a way to fail | ||
# test "on failure, raises", %{assets: assets, session: session} do | ||
# end | ||
end | ||
|
||
describe "APIResponse.headers/1" do | ||
end | ||
|
||
describe "APIResponse.headers!/1" do | ||
end | ||
|
||
describe "APIResponse.json/1" do | ||
test "on success, returns response body", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
|
||
assert %{"foo" => "bar"} = APIResponse.json(response) | ||
end | ||
|
||
test "on failure, returns `{:error, error}`", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
response = %{response | fetchUid: "bogus"} | ||
|
||
assert {:error, %Error{type: "ResponseError"}} = APIResponse.json(response) | ||
end | ||
|
||
test "on HTTP error, returns status code as the response body", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/bogus.json") | ||
|
||
assert 404 = APIResponse.json(response) | ||
end | ||
end | ||
|
||
describe "APIResponse.json!/1" do | ||
test "on failure, raises", %{assets: assets, session: session} do | ||
assert_raise RuntimeError, fn -> | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/simple.json") | ||
response = %{response | fetchUid: "bogus"} | ||
|
||
APIResponse.json!(response) | ||
end | ||
end | ||
end | ||
|
||
describe "APIResponse.ok/1" do | ||
test "is true when the response status code is in the range, 200-299" do | ||
range = 200..299 | ||
|
||
Enum.each(range, fn code -> | ||
assert APIResponse.ok(%APIResponse{status: code}) | ||
end) | ||
end | ||
|
||
test "is true when the response status code is 0" do | ||
assert APIResponse.ok(%APIResponse{status: 0}) | ||
end | ||
|
||
test "is false otherwise" do | ||
range = 1..199 | ||
|
||
Enum.each(range, fn code -> | ||
refute APIResponse.ok(%APIResponse{status: code}) | ||
end) | ||
|
||
range = 300..999 | ||
|
||
Enum.each(range, fn code -> | ||
refute APIResponse.ok(%APIResponse{status: code}) | ||
end) | ||
end | ||
end | ||
|
||
describe "APIResponse.text/1" do | ||
test "on success, returns response body", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/empty.html") | ||
|
||
assert APIResponse.text(response) == "" | ||
end | ||
|
||
test "on failure, returns `{:error, error}`", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/empty.html") | ||
response = %{response | fetchUid: "bogus"} | ||
|
||
assert {:error, %Error{type: "ResponseError"}} = APIResponse.text(response) | ||
end | ||
|
||
test "on HTTP error, returns status code as the response body", %{assets: assets, session: session} do | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/bogus.text") | ||
|
||
assert "404" = APIResponse.text(response) | ||
end | ||
end | ||
|
||
describe "APIResponse.text!/1" do | ||
test "on failure, raises", %{assets: assets, session: session} do | ||
assert_raise RuntimeError, fn -> | ||
request = Playwright.request(session) |> APIRequest.new_context() | ||
response = APIRequestContext.fetch(request, assets.prefix <> "/empty.html") | ||
response = %{response | fetchUid: "bogus"} | ||
|
||
APIResponse.text!(response) | ||
end | ||
end | ||
end | ||
end |