diff options
| -rw-r--r-- | lib/pleroma/notification.ex | 11 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 5 | ||||
| -rw-r--r-- | lib/pleroma/web/router.ex | 1 | ||||
| -rw-r--r-- | test/web/mastodon_api/mastodon_api_controller_test.exs | 52 | 
4 files changed, 67 insertions, 2 deletions
diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 15789907a..b357d5399 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -98,6 +98,14 @@ defmodule Pleroma.Notification do      |> Repo.delete_all()    end +  def destroy_multiple(%{id: user_id} = _user, ids) do +    from(n in Notification, +      where: n.id in ^ids, +      where: n.user_id == ^user_id +    ) +    |> Repo.delete_all() +  end +    def dismiss(%{id: user_id} = _user, id) do      notification = Repo.get(Notification, id) @@ -173,8 +181,7 @@ defmodule Pleroma.Notification do    def skip?(:muted, activity, user) do      actor = activity.data["actor"] -    User.mutes?(user, %{ap_id: actor}) or -      CommonAPI.thread_muted?(user, activity) +    User.mutes?(user, %{ap_id: actor}) or CommonAPI.thread_muted?(user, activity)    end    def skip?( diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index ed082abdf..f3865b2f2 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -612,6 +612,11 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do      end    end +  def destroy_multiple(%{assigns: %{user: user}} = conn, %{"ids" => ids} = _params) do +    Notification.destroy_multiple(user, ids) +    json(conn, %{}) +  end +    def relationships(%{assigns: %{user: user}} = conn, %{"id" => id}) do      id = List.wrap(id)      q = from(u in User, where: u.id in ^id) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 172f337db..a809347be 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -261,6 +261,7 @@ defmodule Pleroma.Web.Router do        post("/notifications/dismiss", MastodonAPIController, :dismiss_notification)        get("/notifications", MastodonAPIController, :notifications)        get("/notifications/:id", MastodonAPIController, :get_notification) +      delete("/notifications/destroy_multiple", MastodonAPIController, :destroy_multiple)        get("/scheduled_statuses", MastodonAPIController, :scheduled_statuses)        get("/scheduled_statuses/:id", MastodonAPIController, :show_scheduled_status) diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index fbdde2593..a906c6082 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -944,6 +944,58 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do        assert [%{"id" => ^reblog_notification_id}] = json_response(conn_res, 200)      end + +    test "destroy multiple", %{conn: conn} do +      user = insert(:user) +      other_user = insert(:user) + +      {:ok, activity1} = CommonAPI.post(other_user, %{"status" => "hi @#{user.nickname}"}) +      {:ok, activity2} = CommonAPI.post(other_user, %{"status" => "hi @#{user.nickname}"}) +      {:ok, activity3} = CommonAPI.post(user, %{"status" => "hi @#{other_user.nickname}"}) +      {:ok, activity4} = CommonAPI.post(user, %{"status" => "hi @#{other_user.nickname}"}) + +      notification1_id = Repo.get_by(Notification, activity_id: activity1.id).id |> to_string() +      notification2_id = Repo.get_by(Notification, activity_id: activity2.id).id |> to_string() +      notification3_id = Repo.get_by(Notification, activity_id: activity3.id).id |> to_string() +      notification4_id = Repo.get_by(Notification, activity_id: activity4.id).id |> to_string() + +      conn = +        conn +        |> assign(:user, user) + +      conn_res = +        conn +        |> get("/api/v1/notifications") + +      result = json_response(conn_res, 200) +      assert [%{"id" => ^notification2_id}, %{"id" => ^notification1_id}] = result + +      conn2 = +        conn +        |> assign(:user, other_user) + +      conn_res = +        conn2 +        |> get("/api/v1/notifications") + +      result = json_response(conn_res, 200) +      assert [%{"id" => ^notification4_id}, %{"id" => ^notification3_id}] = result + +      conn_destroy = +        conn +        |> delete("/api/v1/notifications/destroy_multiple", %{ +          "ids" => [notification1_id, notification2_id] +        }) + +      assert json_response(conn_destroy, 200) == %{} + +      conn_res = +        conn2 +        |> get("/api/v1/notifications") + +      result = json_response(conn_res, 200) +      assert [%{"id" => ^notification4_id}, %{"id" => ^notification3_id}] = result +    end    end    describe "reblogging" do  | 
