Adds deactivated fixture. Removes token after use. Updates tests.

This commit is contained in:
May Tusek 2025-02-15 17:29:23 -08:00
parent 7e19e41621
commit f887eace1a
3 changed files with 26 additions and 5 deletions

View file

@ -796,7 +796,7 @@ defmodule Philomena.Users do
end
@doc """
Reactivates a previously deactivated user account.
Reactivates a previously deactivated user account. Removes all "reactivate" user tokens for that user if they exist.
## Examples
@ -805,6 +805,8 @@ defmodule Philomena.Users do
"""
def reactivate_user(%User{} = user) do
UserToken.user_and_contexts_query(user, ["reactivate"]) |> Repo.delete_all()
user
|> User.reactivate_changeset()
|> Repo.update()

View file

@ -1,16 +1,20 @@
defmodule PhilomenaWeb.ReactivationControllerTest do
use PhilomenaWeb.ConnCase, async: true
alias Philomena.Repo
alias Philomena.Users.UserToken
alias Philomena.Users
import Philomena.UsersFixtures
setup :register_and_log_in_user
setup do
%{user: deactivated_user_fixture()}
end
@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")
conn = get(conn, ~p"/reactivations/pinkie-pie-is-best-pony")
response = html_response(conn, 200)
assert response =~ "<h1>Reactivate Your Account</h1>"
@ -19,11 +23,11 @@ defmodule PhilomenaWeb.ReactivationControllerTest do
describe "POST /reactivations/" do
test "reactivate account page works", %{conn: conn, user: user} do
conn = delete(conn, ~p"/deactivations")
{:ok, email} =
Users.deliver_user_reactivation_instructions(user, &url(~p"/reactivations/#{&1}"))
assert UserToken.user_and_contexts_query(user, ["reactivate"]) |> Repo.exists?()
{token, url} = extract_reactivation_link_from_email(email)
assert token != nil
@ -34,6 +38,8 @@ defmodule PhilomenaWeb.ReactivationControllerTest do
user = Users.get_user!(user.id)
assert user.deleted_by_user_id == nil
assert not(UserToken.user_and_contexts_query(user, ["reactivate"]) |> Repo.exists?())
end
end

View file

@ -37,6 +37,19 @@ defmodule Philomena.UsersFixtures do
|> Repo.update!()
end
@doc """
Fixture for a deactivated user.
If `deactivated_by_user` is `nil` the user will be deactivated by themselves.
"""
def deactivated_user_fixture(deactived_by_user \\ nil, attrs \\ %{}) do
user = user_fixture(attrs)
user
|> Users.User.deactivate_changeset(deactived_by_user || user)
|> Repo.update!()
end
def extract_user_token(fun) do
{:ok, captured} = fun.(&"[TOKEN]#{&1}[TOKEN]")
[_, token, _] = String.split(captured.text_body, "[TOKEN]")