8000 chore(notifications): B-series follow-up cleanups by mwoods79 · Pull Request #130 · huddlz-hq/huddlz · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 6 additions & 12 deletions lib/huddlz/communities/group/changes/transfer_ownership.ex
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,7 @@ defmodule Huddlz.Communities.Group.Changes.TransferOwnership do
membership
|> Ash.Changeset.for_update(:set_role, %{role: :organizer})
|> Ash.update(authorize?: false)
|> case do
{:ok, _} -> :ok
{:error, reason} -> {:error, reason}
end
|> ok_or_error()
end
end

Expand All @@ -102,22 +99,19 @@ defmodule Huddlz.Communities.Group.Changes.TransferOwnership do
role: "owner"
})
|> Ash.create(authorize?: false)
|> case do
{:ok, _} -> :ok
{:error, reason} -> {:error, reason}
end
|> ok_or_error()

membership ->
membership
|> Ash.Changeset.for_update(:set_role, %{role: :owner})
|> Ash.update(authorize?: false)
|> case do
{:ok, _} -> :ok
{:error, reason} -> {:error, reason}
end
|> ok_or_error()
end
end

defp ok_or_error({:ok, _}), do: :ok
defp ok_or_error({:error, reason}), do: {:error, reason}

defp fetch_membership(group_id, user_id) do
GroupMember
|> Ash.Query.filter(group_id == ^group_id and user_id == ^user_id)
Expand Down
13 changes: 13 additions & 0 deletions lib/huddlz/notifications.ex
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ defmodule Huddlz.Notifications do
for the registry of trigger codes.
"""

require Logger

alias Huddlz.Accounts.User
alias Huddlz.Mailer
alias Huddlz.Notifications.DeliverWorker
Expand Down Expand Up @@ -70,6 +72,17 @@ defmodule Huddlz.Notifications do
%{user_id: user_id, trigger: Atom.to_string(trigger), payload: payload}
|> DeliverWorker.new()
|> Oban.ins 8000 ert()
|> case do
{:ok, job} ->
{:ok, job}

{:error, reason} = err ->
Logger.warning(
"Failed to enqueue #{inspect(trigger)} notification for user #{user_id}: #{inspect(reason)}"
)

err
end
end

# The registry references sender modules for triggers whose phases haven't
Expand Down
10 changes: 5 additions & 5 deletions lib/huddlz/notifications/senders/group_role_changed.ex
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ defmodule Huddlz.Notifications.Senders.GroupRoleChanged do
def build(user, payload) do
safe_name = HtmlEscape.escape(user.display_name)
safe_group = HtmlEscape.escape(group_name(payload))
safe_prev = HtmlEscape.escape(humanize_role(role_value(payload, "previous_role")))
safe_new = HtmlEscape.escape(humanize_role(role_value(payload, "new_role")))
safe_prev = HtmlEscape.escape(role_label(role_value(payload, "previous_role")))
safe_new = HtmlEscape.escape(role_label(role_value(payload, "new_role")))
group_url = group_url(payload)

{footer_html, footer_text} = Footer.build(user, :group_role_changed)
Expand All @@ -49,7 +49,7 @@ defmodule Huddlz.Notifications.Senders.GroupRoleChanged do
|> text_body("""
Hi #{user.display_name},

Your role in "#{group_name(payload)}" changed from #{humanize_role(role_value(payload, "previous_role"))} to #{humanize_role(role_value(payload, "new_role"))}.
Your role in "#{group_name(payload)}" changed from #{role_label(role_value(payload, "previous_role"))} to #{role_label(role_value(payload, "new_role"))}.

Visit the group at #{group_url}.
#{footer_text}
Expand All @@ -70,6 +70,6 @@ defmodule Huddlz.Notifications.Senders.GroupRoleChanged do
end
end

defp humanize_role(""), do: "member"
defp humanize_role(role), do: role
defp role_label(""), do: "member"
defp role_label(role), do: role
end
21 changes: 10 additions & 11 deletions test/huddlz/notifications/group_membership_notifications_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,9 @@ defmodule Huddlz.Notifications.GroupMembershipNotificationsTest do
|> Ash.create(actor: owner)

# Drain any prior add_member-triggered jobs (none for public groups,
# but keep the queue clean).
# but keep the queue clean) and flush any leftover test mailbox
# messages from prior drains.
Oban.drain_queue(queue: :notifications)
Process.sleep(0)
# Flush any leftover test mailbox messages from prior drains.
flush_mailbox()

{:ok, _} =
Expand Down Expand Up @@ -226,14 +225,6 @@ defmodule Huddlz.Notifications.GroupMembershipNotificationsTest do
end
end

defp flush_mailbox do
receive do
{:email, _} -> flush_mailbox()
after
0 -> :ok
end
end

describe "B6: group_archived" do
test "emails every non-actor member when the group is destroyed" do
owner = generate(user(role: :user))
Expand Down Expand Up @@ -382,4 +373,12 @@ defmodule Huddlz.Notifications.GroupMembershipNotificationsTest do
refute_enqueued(worker: DeliverWorker)
end
end

defp flush_mailbox do
receive do
{:email, _} -> flush_mailbox()
after
0 -> :ok
end
end
end
Loading
0