Revert "Delete report notifs when demoting from superuser"
This reverts commit89667189b8
andcdc5bbe836
. This is a side effect when changing user role. The goal was to not have report notifications when someone isn't admin or moderator any more. But this won't be triggered when we change the privilege tags for a role, so we can't use this sollution any more. There was another solution to filter out report notifications during fetch. It wasn't merged because this seemed 'cleaner' at the time, but now it seems the better sollution. I'll add it in the next commit.
This commit is contained in:
parent
edf0013ff3
commit
e45faddb38
|
@ -341,14 +341,6 @@ def destroy_multiple(%{id: user_id} = _user, ids) do
|
||||||
|> Repo.delete_all()
|
|> Repo.delete_all()
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy_multiple_from_types(%{id: user_id}, types) do
|
|
||||||
from(n in Notification,
|
|
||||||
where: n.user_id == ^user_id,
|
|
||||||
where: n.type in ^types
|
|
||||||
)
|
|
||||||
|> Repo.delete_all()
|
|
||||||
end
|
|
||||||
|
|
||||||
def dismiss(%Pleroma.Activity{} = activity) do
|
def dismiss(%Pleroma.Activity{} = activity) do
|
||||||
Notification
|
Notification
|
||||||
|> where([n], n.activity_id == ^activity.id)
|
|> where([n], n.activity_id == ^activity.id)
|
||||||
|
|
|
@ -1147,24 +1147,10 @@ def update_and_set_cache(struct, params) do
|
||||||
|> update_and_set_cache()
|
|> update_and_set_cache()
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_and_set_cache(%{data: %Pleroma.User{} = user} = changeset) do
|
def update_and_set_cache(changeset) do
|
||||||
was_superuser_before_update = User.superuser?(user)
|
|
||||||
|
|
||||||
with {:ok, user} <- Repo.update(changeset, stale_error_field: :id) do
|
with {:ok, user} <- Repo.update(changeset, stale_error_field: :id) do
|
||||||
set_cache(user)
|
set_cache(user)
|
||||||
end
|
end
|
||||||
|> maybe_remove_report_notifications(was_superuser_before_update)
|
|
||||||
end
|
|
||||||
|
|
||||||
defp maybe_remove_report_notifications({:ok, %Pleroma.User{} = user} = result, true) do
|
|
||||||
if not User.superuser?(user),
|
|
||||||
do: user |> Notification.destroy_multiple_from_types(["pleroma:report"])
|
|
||||||
|
|
||||||
result
|
|
||||||
end
|
|
||||||
|
|
||||||
defp maybe_remove_report_notifications(result, _) do
|
|
||||||
result
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_user_friends_ap_ids(user) do
|
def get_user_friends_ap_ids(user) do
|
||||||
|
|
|
@ -520,25 +520,6 @@ test "it clears all notifications belonging to the user" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "destroy_multiple_from_types/2" do
|
|
||||||
test "clears all notifications of a certain type for a given user" do
|
|
||||||
report_activity = insert(:report_activity)
|
|
||||||
user1 = insert(:user, is_moderator: true, is_admin: true)
|
|
||||||
user2 = insert(:user, is_moderator: true, is_admin: true)
|
|
||||||
{:ok, _} = Notification.create_notifications(report_activity)
|
|
||||||
|
|
||||||
{:ok, _} =
|
|
||||||
CommonAPI.post(user2, %{
|
|
||||||
status: "hey @#{user1.nickname} !"
|
|
||||||
})
|
|
||||||
|
|
||||||
Notification.destroy_multiple_from_types(user1, ["pleroma:report"])
|
|
||||||
|
|
||||||
assert [%Pleroma.Notification{type: "mention"}] = Notification.for_user(user1)
|
|
||||||
assert [%Pleroma.Notification{type: "pleroma:report"}] = Notification.for_user(user2)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "set_read_up_to()" do
|
describe "set_read_up_to()" do
|
||||||
test "it sets all notifications as read up to a specified notification ID" do
|
test "it sets all notifications as read up to a specified notification ID" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
defmodule Pleroma.UserTest do
|
defmodule Pleroma.UserTest do
|
||||||
alias Pleroma.Activity
|
alias Pleroma.Activity
|
||||||
alias Pleroma.Builders.UserBuilder
|
alias Pleroma.Builders.UserBuilder
|
||||||
alias Pleroma.Notification
|
|
||||||
alias Pleroma.Object
|
alias Pleroma.Object
|
||||||
alias Pleroma.Repo
|
alias Pleroma.Repo
|
||||||
alias Pleroma.Tests.ObanHelpers
|
alias Pleroma.Tests.ObanHelpers
|
||||||
|
@ -2252,26 +2251,6 @@ test "performs update cache if user updated" do
|
||||||
assert {:ok, user} = Cachex.get(:user_cache, "ap_id:#{user.ap_id}")
|
assert {:ok, user} = Cachex.get(:user_cache, "ap_id:#{user.ap_id}")
|
||||||
assert %User{bio: "test-bio"} = User.get_cached_by_ap_id(user.ap_id)
|
assert %User{bio: "test-bio"} = User.get_cached_by_ap_id(user.ap_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "removes report notifs when user isn't superuser any more" do
|
|
||||||
report_activity = insert(:report_activity)
|
|
||||||
user = insert(:user, is_moderator: true, is_admin: true)
|
|
||||||
{:ok, _} = Notification.create_notifications(report_activity)
|
|
||||||
|
|
||||||
assert [%Pleroma.Notification{type: "pleroma:report"}] = Notification.for_user(user)
|
|
||||||
|
|
||||||
{:ok, user} = user |> User.admin_api_update(%{is_moderator: false})
|
|
||||||
# is still superuser because still admin
|
|
||||||
assert [%Pleroma.Notification{type: "pleroma:report"}] = Notification.for_user(user)
|
|
||||||
|
|
||||||
{:ok, user} = user |> User.admin_api_update(%{is_moderator: true, is_admin: false})
|
|
||||||
# is still superuser because still moderator
|
|
||||||
assert [%Pleroma.Notification{type: "pleroma:report"}] = Notification.for_user(user)
|
|
||||||
|
|
||||||
{:ok, user} = user |> User.admin_api_update(%{is_moderator: false})
|
|
||||||
# is not a superuser any more
|
|
||||||
assert [] = Notification.for_user(user)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "following/followers synchronization" do
|
describe "following/followers synchronization" do
|
||||||
|
|
Loading…
Reference in New Issue