56 lines
1.8 KiB
Elixir
56 lines
1.8 KiB
Elixir
defmodule ToweropsWeb.PlugExceptionsTest do
|
|
use ToweropsWeb.ConnCase, async: true
|
|
|
|
alias Plug.CSRFProtection.InvalidCSRFTokenError
|
|
|
|
describe "Phoenix.NotAcceptableError protocol implementation" do
|
|
test "implements status/1 callback" do
|
|
exception = %Phoenix.NotAcceptableError{}
|
|
status = Plug.Exception.status(exception)
|
|
assert status == 400
|
|
end
|
|
|
|
test "implements actions/1 callback" do
|
|
exception = %Phoenix.NotAcceptableError{}
|
|
actions = Plug.Exception.actions(exception)
|
|
assert actions == []
|
|
end
|
|
|
|
test "returns 400 status code when sent", %{conn: conn} do
|
|
# Verify that when the exception is raised and handled by Phoenix,
|
|
# it returns 400 (not 500) due to our protocol implementation
|
|
assert_error_sent 400, fn ->
|
|
conn
|
|
|> put_req_header("accept", "application/invalid")
|
|
|> get("/api/v1/sites")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "Plug.CSRFProtection.InvalidCSRFTokenError protocol implementation" do
|
|
test "implements status/1 callback" do
|
|
exception = %InvalidCSRFTokenError{}
|
|
status = Plug.Exception.status(exception)
|
|
assert status == 400
|
|
end
|
|
|
|
test "implements actions/1 callback" do
|
|
exception = %InvalidCSRFTokenError{}
|
|
actions = Plug.Exception.actions(exception)
|
|
assert actions == []
|
|
end
|
|
|
|
test "returns 400 status code when exception is raised" do
|
|
# Verify that the protocol converts the exception to 400
|
|
# This simulates what Phoenix does when handling the exception
|
|
exception = %InvalidCSRFTokenError{}
|
|
|
|
# Phoenix checks Plug.Exception protocol to determine status code
|
|
status = Plug.Exception.status(exception)
|
|
assert status == 400
|
|
|
|
# In production, this means Phoenix returns 400 instead of 500
|
|
# when CSRF protection raises InvalidCSRFTokenError
|
|
end
|
|
end
|
|
end
|