From b3492b445903c3fd4b73c37c3e63efa6fd66de11 Mon Sep 17 00:00:00 2001 From: May Tusek Date: Fri, 14 Feb 2025 16:03:53 -0800 Subject: [PATCH] Updates controllers and tests to be not hardcoded and use show convention. --- .../controllers/reactivation_controller.ex | 4 ++-- .../reactivation_controller_test.exs | 21 ++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/philomena_web/controllers/reactivation_controller.ex b/lib/philomena_web/controllers/reactivation_controller.ex index a2a34a99..6e669bd3 100644 --- a/lib/philomena_web/controllers/reactivation_controller.ex +++ b/lib/philomena_web/controllers/reactivation_controller.ex @@ -3,11 +3,11 @@ defmodule PhilomenaWeb.ReactivationController do alias Philomena.Users.{User} alias Philomena.Users - def show(conn, %{"token" => _}) do + def show(conn, %{"id" => _}) do render(conn, "show.html", title: "Reactivate Your Account") end - def post(conn, %{"token" => token}) do + def create(conn, %{"token" => token}) do with user = %User{} <- Users.get_user_by_reactivation_token(token) do Users.reactivate_user(user) else diff --git a/test/philomena_web/controllers/reactivation_controller_test.exs b/test/philomena_web/controllers/reactivation_controller_test.exs index d4289fe3..96c54431 100644 --- a/test/philomena_web/controllers/reactivation_controller_test.exs +++ b/test/philomena_web/controllers/reactivation_controller_test.exs @@ -6,6 +6,9 @@ defmodule PhilomenaWeb.ReactivationControllerTest do setup :register_and_log_in_user + @host PhilomenaWeb.Endpoint.config(:url)[:host] + @port PhilomenaWeb.Endpoint.config(:http)[:port] + describe "GET /reactivations/:id" do test "renders the reactivate account page", %{conn: conn} do conn = delete(conn, ~p"/deactivations") @@ -15,17 +18,19 @@ defmodule PhilomenaWeb.ReactivationControllerTest do end end - describe "POST /reactivations/:id" do + describe "POST /reactivations/" do test "reactivate account page works", %{conn: conn, user: user} do conn = delete(conn, ~p"/deactivations") - reactivation_link = + {token, url} = Memory.all() |> Enum.find(&(&1.subject == "Reactivation instructions for your account")) |> extract_reactivation_link_from_email() - assert reactivation_link != nil - conn = post(conn, reactivation_link) + assert token != nil + assert url != nil + + conn = post(conn, url, %{"token" => token}) assert redirected_to(conn) == ~p"/" user = Users.get_user!(user.id) @@ -34,6 +39,12 @@ defmodule PhilomenaWeb.ReactivationControllerTest do end defp extract_reactivation_link_from_email(email = %Swoosh.Email{}) do - Regex.scan(~r/http:\/\/localhost:4002\/reactivations\/.*/, email.text_body) |> hd |> hd + %{"token" => token, "url" => url} = + Regex.named_captures( + ~r/(?http:\/\/#{@host}:#{@port}\/reactivations)\/(?.*)/, + email.text_body + ) + + {token, url} end end