diff --git a/test/philomena_web/controllers/deactivation_controller_test.exs b/test/philomena_web/controllers/deactivation_controller_test.exs new file mode 100644 index 00000000..9f31312f --- /dev/null +++ b/test/philomena_web/controllers/deactivation_controller_test.exs @@ -0,0 +1,31 @@ +defmodule PhilomenaWeb.DeactivationControllerTest do + use PhilomenaWeb.ConnCase, async: true + + alias Swoosh.Adapters.Local.Storage.Memory + alias Philomena.Users + alias Philomena.Repo + import Philomena.UsersFixtures + + setup :register_and_log_in_user + + describe "GET /deactivations" do + test "renders the deactive account page", %{conn: conn, user: user} do + conn = get(conn, ~p"/deactivations") + response = html_response(conn, 200) + assert response =~ "

Deactivate Account

" + end + end + + describe "DELETE /deactivations" do + test "causes the user to be deactivated", %{conn: conn, user: user} do + conn = delete(conn, ~p"/deactivations") + assert redirected_to(conn) == ~p"/" + conn = get(conn, ~p"/registrations/edit") + assert redirected_to(conn) == ~p"/sessions/new" + assert Memory.all() |> Enum.count() == 1 + + user = Users.get_user!(user.id) + assert user.deleted_by_user_id == user.id + end + end +end diff --git a/test/philomena_web/controllers/reactivation_controller_test.exs b/test/philomena_web/controllers/reactivation_controller_test.exs new file mode 100644 index 00000000..51fbde33 --- /dev/null +++ b/test/philomena_web/controllers/reactivation_controller_test.exs @@ -0,0 +1,37 @@ +defmodule PhilomenaWeb.ReactivationControllerTest do + use PhilomenaWeb.ConnCase, async: true + + alias Swoosh.Adapters.Local.Storage.Memory + alias Philomena.Users + alias Philomena.Repo + alias Phoenix.Flash + import Philomena.UsersFixtures + + setup :register_and_log_in_user + + describe "GET /reactivations/:id" do + test "renders the reactivate account page", %{conn: conn, user: user} do + conn = delete(conn, ~p"/deactivations") + conn = get(conn, ~p"/reactivations/pinkie-pie-is-best-pony") + response = html_response(conn, 200) + assert response =~ "

Reactivate Your Account

" + end + end + + describe "POST /reactivations/:id" do + test "reactivate account page works", %{conn: conn, user: user} do + conn = delete(conn, ~p"/deactivations") + reactivation_link = Memory.all() |> hd |> extract_reactivation_link_from_email + conn = post(conn, reactivation_link) + assert redirected_to(conn) == ~p"/" + + user = Users.get_user!(user.id) + assert user.deleted_by_user_id == nil + end + end + + defp extract_reactivation_link_from_email(email = %Swoosh.Email{}) do + Regex.scan(~r/http:\/\/localhost:4002\/reactivations\/.*/, email.text_body) |> hd |> hd + end + +end diff --git a/test/philomena_web/controllers/registration_controller_test.exs b/test/philomena_web/controllers/registration_controller_test.exs index dc557666..5d59561d 100644 --- a/test/philomena_web/controllers/registration_controller_test.exs +++ b/test/philomena_web/controllers/registration_controller_test.exs @@ -55,6 +55,12 @@ defmodule PhilomenaWeb.RegistrationControllerTest do assert response =~ "Settings" end + test "renders the deactivation section of the settings page", %{conn: conn, user: user} do + conn = get(conn, ~p"/registrations/edit") + response = html_response(conn, 200) + assert response =~ "

Deactivate Account

" + end + test "redirects if user is not logged in" do conn = build_conn() conn = get(conn, ~p"/registrations/edit")