test: add tests for join mail confirmation
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
ad6ef169ac
commit
3672ef0d03
5 changed files with 177 additions and 0 deletions
45
lib/mv_web/controllers/join_confirm_controller.ex
Normal file
45
lib/mv_web/controllers/join_confirm_controller.ex
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
defmodule MvWeb.JoinConfirmController do
|
||||
@moduledoc """
|
||||
Handles GET /confirm_join/:token for the public join flow (double opt-in).
|
||||
|
||||
Calls a configurable callback (default Mv.Membership) so tests can stub the
|
||||
dependency. Public route; no authentication required.
|
||||
"""
|
||||
use MvWeb, :controller
|
||||
|
||||
def confirm(conn, %{"token" => token}) when is_binary(token) do
|
||||
callback = Application.get_env(:mv, :join_confirm_callback, Mv.Membership)
|
||||
|
||||
case callback.confirm_join_request(token, actor: nil) do
|
||||
{:ok, _request} ->
|
||||
success_response(conn)
|
||||
|
||||
{:error, :token_expired} ->
|
||||
expired_response(conn)
|
||||
|
||||
{:error, _} ->
|
||||
invalid_response(conn)
|
||||
end
|
||||
end
|
||||
|
||||
def confirm(conn, _params), do: invalid_response(conn)
|
||||
|
||||
defp success_response(conn) do
|
||||
conn
|
||||
|> put_resp_content_type("text/html")
|
||||
|> send_resp(200, gettext("Thank you, we have received your request."))
|
||||
end
|
||||
|
||||
defp expired_response(conn) do
|
||||
conn
|
||||
|> put_resp_content_type("text/html")
|
||||
|> send_resp(200, gettext("This link has expired. Please submit the form again."))
|
||||
end
|
||||
|
||||
defp invalid_response(conn) do
|
||||
conn
|
||||
|> put_resp_content_type("text/html")
|
||||
|> put_status(404)
|
||||
|> send_resp(404, gettext("Invalid or expired link."))
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue