Refactor User.confirm/1, add more tests
This commit is contained in:
parent
9ddc292ca8
commit
6ebec50df6
3 changed files with 89 additions and 5 deletions
|
@ -1598,6 +1598,22 @@ def approve(%User{} = user) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def confirm(users) when is_list(users) do
|
||||||
|
Repo.transaction(fn ->
|
||||||
|
Enum.map(users, fn user ->
|
||||||
|
with {:ok, user} <- confirm(user), do: user
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
def confirm(%User{} = user) do
|
||||||
|
with chg <- confirmation_changeset(user, need_confirmation: false),
|
||||||
|
{:ok, user} <- update_and_set_cache(chg) do
|
||||||
|
post_register_action(user)
|
||||||
|
{:ok, user}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def update_notification_settings(%User{} = user, settings) do
|
def update_notification_settings(%User{} = user, settings) do
|
||||||
user
|
user
|
||||||
|> cast(%{notification_settings: settings}, [])
|
|> cast(%{notification_settings: settings}, [])
|
||||||
|
|
|
@ -31,11 +31,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
|
||||||
def confirm_email(conn, %{"user_id" => uid, "token" => token}) do
|
def confirm_email(conn, %{"user_id" => uid, "token" => token}) do
|
||||||
with %User{} = user <- User.get_cached_by_id(uid),
|
with %User{} = user <- User.get_cached_by_id(uid),
|
||||||
true <- user.local and user.confirmation_pending and user.confirmation_token == token,
|
true <- user.local and user.confirmation_pending and user.confirmation_token == token,
|
||||||
{:ok, _} <-
|
{:ok, _} <- User.confirm(user) do
|
||||||
user
|
|
||||||
|> User.confirmation_changeset(need_confirmation: false)
|
|
||||||
|> User.update_and_set_cache() do
|
|
||||||
User.post_register_action(user)
|
|
||||||
redirect(conn, to: "/")
|
redirect(conn, to: "/")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1352,6 +1352,78 @@ test "approves a list of users" do
|
||||||
assert false == user.approval_pending
|
assert false == user.approval_pending
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it sends welcome email if it is set" do
|
||||||
|
clear_config([:welcome, :email, :enabled], true)
|
||||||
|
clear_config([:welcome, :email, :sender], "tester@test.me")
|
||||||
|
|
||||||
|
user = insert(:user, approval_pending: true)
|
||||||
|
welcome_user = insert(:user, email: "tester@test.me")
|
||||||
|
instance_name = Pleroma.Config.get([:instance, :name])
|
||||||
|
|
||||||
|
User.approve(user)
|
||||||
|
|
||||||
|
ObanHelpers.perform_all()
|
||||||
|
|
||||||
|
assert_email_sent(
|
||||||
|
from: {instance_name, welcome_user.email},
|
||||||
|
to: {user.name, user.email},
|
||||||
|
html_body: "Welcome to #{instance_name}"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "confirm" do
|
||||||
|
test "confirms a user" do
|
||||||
|
user = insert(:user, confirmation_pending: true)
|
||||||
|
assert true == user.confirmation_pending
|
||||||
|
{:ok, user} = User.confirm(user)
|
||||||
|
assert false == user.confirmation_pending
|
||||||
|
end
|
||||||
|
|
||||||
|
test "confirms a list of users" do
|
||||||
|
unconfirmed_users = [
|
||||||
|
insert(:user, confirmation_pending: true),
|
||||||
|
insert(:user, confirmation_pending: true),
|
||||||
|
insert(:user, confirmation_pending: true)
|
||||||
|
]
|
||||||
|
|
||||||
|
{:ok, users} = User.confirm(unconfirmed_users)
|
||||||
|
|
||||||
|
assert Enum.count(users) == 3
|
||||||
|
|
||||||
|
Enum.each(users, fn user ->
|
||||||
|
assert false == user.confirmation_pending
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "sends approval emails when `approval_pending: true`" do
|
||||||
|
admin = insert(:user, is_admin: true)
|
||||||
|
user = insert(:user, confirmation_pending: true, approval_pending: true)
|
||||||
|
User.confirm(user)
|
||||||
|
|
||||||
|
ObanHelpers.perform_all()
|
||||||
|
|
||||||
|
user_email = Pleroma.Emails.UserEmail.approval_pending_email(user)
|
||||||
|
admin_email = Pleroma.Emails.AdminEmail.new_unapproved_registration(admin, user)
|
||||||
|
|
||||||
|
notify_email = Pleroma.Config.get([:instance, :notify_email])
|
||||||
|
instance_name = Pleroma.Config.get([:instance, :name])
|
||||||
|
|
||||||
|
# User approval email
|
||||||
|
assert_email_sent(
|
||||||
|
from: {instance_name, notify_email},
|
||||||
|
to: {user.name, user.email},
|
||||||
|
html_body: user_email.html_body
|
||||||
|
)
|
||||||
|
|
||||||
|
# Admin email
|
||||||
|
assert_email_sent(
|
||||||
|
from: {instance_name, notify_email},
|
||||||
|
to: {admin.name, admin.email},
|
||||||
|
html_body: admin_email.html_body
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "delete" do
|
describe "delete" do
|
||||||
|
|
Loading…
Reference in a new issue