philomena/test/philomena_web/controllers/reactivation_controller_test.exs

54 lines
1.5 KiB
Elixir
Raw Normal View History

2025-02-14 23:37:41 +01:00
defmodule PhilomenaWeb.ReactivationControllerTest do
use PhilomenaWeb.ConnCase, async: true
import Philomena.TestUtilities
2025-02-14 23:37:41 +01:00
alias Swoosh.Adapters.Local.Storage.Memory
alias Philomena.Users
setup :register_and_log_in_user
@host PhilomenaWeb.Endpoint.config(:url)[:host]
@port PhilomenaWeb.Endpoint.config(:http)[:port]
2025-02-14 23:37:41 +01:00
describe "GET /reactivations/:id" do
2025-02-14 23:45:30 +01:00
test "renders the reactivate account page", %{conn: conn} do
2025-02-14 23:37:41 +01:00
conn = delete(conn, ~p"/deactivations")
conn = get(conn, ~p"/reactivations/pinkie-pie-is-best-pony")
response = html_response(conn, 200)
assert response =~ "<h1>Reactivate Your Account</h1>"
end
end
describe "POST /reactivations/" do
2025-02-14 23:37:41 +01:00
test "reactivate account page works", %{conn: conn, user: user} do
conn = delete(conn, ~p"/deactivations")
2025-02-15 00:05:53 +01:00
{token, url} =
2025-02-15 00:05:53 +01:00
Memory.all()
|> Enum.find(&(&1.subject == "Reactivation instructions for your account"))
|> extract_reactivation_link_from_email()
assert token != nil
assert url != nil
conn = post(conn, url, %{"token" => token})
2025-02-14 23:37:41 +01:00
assert redirected_to(conn) == ~p"/"
assert_retry(fn ->
user = Users.get_user!(user.id)
user.deleted_by_user_id == nil
end)
2025-02-14 23:37:41 +01:00
end
end
defp extract_reactivation_link_from_email(email = %Swoosh.Email{}) do
%{"token" => token, "url" => url} =
Regex.named_captures(
~r/(?<url>http:\/\/#{@host}:#{@port}\/reactivations)\/(?<token>.*)/,
email.text_body
)
{token, url}
2025-02-14 23:37:41 +01:00
end
end