Make account moderation submission atomic
This commit is contained in:
parent
4c52c8bf3d
commit
d3dc882549
|
|
@ -32,10 +32,6 @@ defmodule WhoNeedHelpWeb.AdminUserLive do
|
|||
)
|
||||
end
|
||||
|
||||
def handle_event("validate-moderation", %{"moderation" => params}, socket) do
|
||||
{:noreply, assign(socket, :moderation_form, to_form(params, as: :moderation))}
|
||||
end
|
||||
|
||||
def handle_event("set-staff-roles", %{"staff" => params}, socket) do
|
||||
roles = params |> Map.get("roles", []) |> List.wrap() |> Enum.reject(&(&1 == ""))
|
||||
|
||||
|
|
@ -181,7 +177,6 @@ defmodule WhoNeedHelpWeb.AdminUserLive do
|
|||
:if={can_moderate?(@current_scope.user, @user)}
|
||||
for={@moderation_form}
|
||||
id={"moderate-user-#{@user.id}"}
|
||||
phx-change="validate-moderation"
|
||||
phx-submit="moderate-user"
|
||||
class="mt-4 space-y-4"
|
||||
>
|
||||
|
|
|
|||
|
|
@ -205,8 +205,8 @@ msgstr ""
|
|||
msgid "Action center"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:113
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:193
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:109
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:188
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:125
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:185
|
||||
#: lib/who_need_help_web/live/notification_live.ex:521
|
||||
|
|
@ -264,7 +264,7 @@ msgid "Add unverified link"
|
|||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_dashboard_live.ex:135
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:102
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:98
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:123
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Administrator"
|
||||
|
|
@ -891,7 +891,7 @@ msgstr ""
|
|||
msgid "Interface language"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:201
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:196
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Internal note"
|
||||
msgstr ""
|
||||
|
|
@ -1060,7 +1060,7 @@ msgid "Moderation"
|
|||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_dashboard_live.ex:132
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:99
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:95
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:120
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Moderator"
|
||||
|
|
@ -1549,8 +1549,8 @@ msgstr ""
|
|||
msgid "Resolved"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:114
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:194
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:110
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:189
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:126
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:186
|
||||
#, elixir-autogen, elixir-format
|
||||
|
|
@ -1759,7 +1759,7 @@ msgstr ""
|
|||
msgid "Starts"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:191
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:186
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:236
|
||||
#: lib/who_need_help_web/live/moderation_live.ex:632
|
||||
#: lib/who_need_help_web/live/moderation_live.ex:812
|
||||
|
|
@ -1792,8 +1792,8 @@ msgstr ""
|
|||
msgid "Submit review"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:115
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:195
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:111
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:190
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:127
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:187
|
||||
#, elixir-autogen, elixir-format
|
||||
|
|
@ -2795,7 +2795,7 @@ msgstr ""
|
|||
|
||||
#: lib/who_need_help_web/controllers/support_html.ex:6
|
||||
#: lib/who_need_help_web/controllers/support_html/new.html.heex:32
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:174
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:170
|
||||
#: lib/who_need_help_web/live/support_operation_live.ex:140
|
||||
#: lib/who_need_help_web/live/support_operations_live.ex:244
|
||||
#: lib/who_need_help_web/live/support_operations_live.ex:395
|
||||
|
|
@ -3232,7 +3232,7 @@ msgstr ""
|
|||
#: lib/who_need_help_web/components/admin_components.ex:166
|
||||
#: lib/who_need_help_web/components/layouts.ex:197
|
||||
#: lib/who_need_help_web/live/admin_dashboard_live.ex:131
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:98
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:94
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:119
|
||||
#: lib/who_need_help_web/live/support_operations_live.ex:340
|
||||
#, elixir-autogen, elixir-format
|
||||
|
|
@ -5447,7 +5447,7 @@ msgstr ""
|
|||
msgid "Safety guidance for voluntary help, medicine pickup, roadside requests, location sharing, and in-person activities."
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:205
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:200
|
||||
#: lib/who_need_help_web/live/support_operation_live.ex:335
|
||||
#: lib/who_need_help_web/live/support_operation_live.ex:438
|
||||
#, elixir-autogen, elixir-format
|
||||
|
|
@ -6777,7 +6777,7 @@ msgstr[1] ""
|
|||
msgid "A single starting point for users, support, safety, legal work, analytics, roles, and audited staff actions."
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:222
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:217
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "A staff member may hold several fixed roles."
|
||||
msgstr ""
|
||||
|
|
@ -6828,7 +6828,7 @@ msgstr ""
|
|||
msgid "All metrics"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:111
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:107
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "All permissions, staff roles, and audit log"
|
||||
msgstr ""
|
||||
|
|
@ -6839,7 +6839,7 @@ msgid "An account may hold several roles. Permissions are the union of those rol
|
|||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_dashboard_live.ex:134
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:101
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:97
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:122
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Analyst"
|
||||
|
|
@ -6948,7 +6948,7 @@ msgstr ""
|
|||
msgid "Back to queue"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:140
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:136
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Back to users"
|
||||
msgstr ""
|
||||
|
|
@ -6958,7 +6958,7 @@ msgstr ""
|
|||
msgid "Chat message"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:95
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:91
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Check the status and internal note."
|
||||
msgstr ""
|
||||
|
|
@ -6973,7 +6973,7 @@ msgstr ""
|
|||
msgid "Content locations"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:109
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:105
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Content-removal and legal notice queue"
|
||||
msgstr ""
|
||||
|
|
@ -7055,7 +7055,7 @@ msgid "Joined %{date}"
|
|||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_dashboard_live.ex:133
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:100
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:96
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:121
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Legal"
|
||||
|
|
@ -7099,7 +7099,7 @@ msgid "Manage %{name}"
|
|||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:20
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:135
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:131
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Manage user"
|
||||
msgstr ""
|
||||
|
|
@ -7179,7 +7179,7 @@ msgstr ""
|
|||
msgid "Notice"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:93
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:89
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "One or more staff roles are invalid."
|
||||
msgstr ""
|
||||
|
|
@ -7189,7 +7189,7 @@ msgstr ""
|
|||
msgid "One row per date, metric, and non-identifying dimension."
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:267
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:262
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Only administrators can change staff roles."
|
||||
msgstr ""
|
||||
|
|
@ -7245,7 +7245,7 @@ msgstr ""
|
|||
msgid "Previous"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:110
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:106
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Privacy-preserving aggregate product analytics"
|
||||
msgstr ""
|
||||
|
|
@ -7320,14 +7320,14 @@ msgstr ""
|
|||
msgid "Registrations"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:159
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:155
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:263
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:304
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Regular user"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:107
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:103
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Reports, safety signals, user restrictions, and categories"
|
||||
msgstr ""
|
||||
|
|
@ -7347,7 +7347,7 @@ msgstr ""
|
|||
msgid "Requests created"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:176
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:172
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Restrict or suspend access and record an internal reason."
|
||||
msgstr ""
|
||||
|
|
@ -7357,7 +7357,7 @@ msgstr ""
|
|||
msgid "Restricted workspace"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:136
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:132
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Review account access and staff permissions for one user."
|
||||
msgstr ""
|
||||
|
|
@ -7415,7 +7415,7 @@ msgstr ""
|
|||
msgid "SUBMISSION SAVED"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:206
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:201
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Save account status"
|
||||
msgstr ""
|
||||
|
|
@ -7472,13 +7472,13 @@ msgstr ""
|
|||
msgid "Staff role"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:220
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:234
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:215
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:229
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Staff roles"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:45
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:41
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Staff roles updated."
|
||||
msgstr ""
|
||||
|
|
@ -7513,7 +7513,7 @@ msgstr ""
|
|||
msgid "Support and legal operations"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:104
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:100
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Support conversations and verified support cases"
|
||||
msgstr ""
|
||||
|
|
@ -7543,19 +7543,19 @@ msgstr ""
|
|||
msgid "Technical signal metadata"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:96
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:92
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "The account could not be updated."
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:91
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:87
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "The last active administrator cannot lose administrator access or be restricted."
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:14
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:57
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:94
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:53
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:90
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "The selected account is no longer available."
|
||||
msgstr ""
|
||||
|
|
@ -7610,13 +7610,13 @@ msgstr ""
|
|||
msgid "Unknown staff member"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:148
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:144
|
||||
#: lib/who_need_help_web/live/admin_users_live.ex:129
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Unnamed user"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:259
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:254
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Update staff roles"
|
||||
msgstr ""
|
||||
|
|
@ -7626,7 +7626,7 @@ msgstr ""
|
|||
msgid "Update status, assignment, and optionally reply."
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:257
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:252
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Updating…"
|
||||
msgstr ""
|
||||
|
|
@ -7688,12 +7688,12 @@ msgstr ""
|
|||
msgid "Write the decision, next step, or information you need…"
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:214
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:209
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "You can view this account but cannot change its access."
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:87
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:83
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "You cannot restrict or suspend your own account."
|
||||
msgstr ""
|
||||
|
|
@ -7709,7 +7709,7 @@ msgstr ""
|
|||
msgid "You do not have permission for this action."
|
||||
msgstr ""
|
||||
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:82
|
||||
#: lib/who_need_help_web/live/admin_user_live.ex:78
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "You do not have permission for this action. Role changes also require a recent sign-in."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -64,27 +64,26 @@ defmodule WhoNeedHelpWeb.AdminLiveTest do
|
|||
{:ok, user_view, html} = live(conn, ~p"/admin/users/#{target.id}")
|
||||
assert html =~ "Account under review"
|
||||
assert has_element?(user_view, "#staff-roles-#{target.id}")
|
||||
refute has_element?(user_view, "#moderate-user-#{target.id}[phx-change]")
|
||||
|
||||
user_view
|
||||
|> form("#moderate-user-#{target.id}", %{
|
||||
"moderation" => %{
|
||||
"moderation_status" => "restricted",
|
||||
"moderation_note" => "Unsaved review note"
|
||||
"moderation_note" => "Confirmed restricted account"
|
||||
}
|
||||
})
|
||||
|> render_change()
|
||||
|> render_submit()
|
||||
|
||||
restricted = Repo.reload!(target)
|
||||
assert restricted.moderation_status == :restricted
|
||||
assert restricted.moderation_note == "Confirmed restricted account"
|
||||
|
||||
assert has_element?(
|
||||
user_view,
|
||||
"#moderate-user-#{target.id} option[value='restricted'][selected]"
|
||||
)
|
||||
|
||||
assert has_element?(
|
||||
user_view,
|
||||
"#moderate-user-#{target.id} textarea",
|
||||
"Unsaved review note"
|
||||
)
|
||||
|
||||
user_view
|
||||
|> form("#staff-roles-#{target.id}", %{
|
||||
"staff" => %{"roles" => ["support", "moderator"]}
|
||||
|
|
@ -106,18 +105,20 @@ defmodule WhoNeedHelpWeb.AdminLiveTest do
|
|||
assert Repo.reload!(target).moderation_status == :suspended
|
||||
|
||||
assert Repo.exists?(
|
||||
from event in AuditEvent,
|
||||
from(event in AuditEvent,
|
||||
where:
|
||||
event.actor_id == ^admin.id and event.target_id == ^target.id and
|
||||
event.action == "user.staff_roles_changed"
|
||||
)
|
||||
)
|
||||
|
||||
assert Repo.exists?(
|
||||
from event in AuditEvent,
|
||||
from(event in AuditEvent,
|
||||
where:
|
||||
event.actor_id == ^admin.id and event.target_id == ^target.id and
|
||||
event.action == "user.moderated"
|
||||
)
|
||||
)
|
||||
|
||||
{:ok, _audit_view, audit_html} = live(conn, ~p"/admin/audit")
|
||||
assert audit_html =~ "user.staff_roles_changed"
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user