diff options
| -rw-r--r-- | lib/pleroma/following_relationship.ex | 8 | ||||
| -rw-r--r-- | lib/pleroma/notification.ex | 9 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api.ex | 3 | ||||
| -rw-r--r-- | test/notification_test.exs | 8 | ||||
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 4 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/notification_controller_test.exs | 26 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/notification_view_test.exs | 6 | 
7 files changed, 54 insertions, 10 deletions
diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index a03c9bd30..0b0219b82 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -121,8 +121,12 @@ defmodule Pleroma.FollowingRelationship do        Pleroma.Web.CommonAPI.follow(following_relationship.follower, target)      end)      |> case do -      [] -> :ok -      _ -> move_following(origin, target) +      [] -> +        User.update_follower_count(origin) +        :ok + +      _ -> +        move_following(origin, target)      end    end  end diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index f37e7ec67..6b6e1c2e1 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -57,6 +57,7 @@ defmodule Pleroma.Notification do      |> exclude_muted(user, opts)      |> exclude_blocked(user)      |> exclude_visibility(opts) +    |> exclude_move(opts)    end    defp exclude_blocked(query, user) do @@ -81,6 +82,14 @@ defmodule Pleroma.Notification do      |> where([n, a, o, tm], is_nil(tm.user_id))    end +  defp exclude_move(query, %{with_move: true}) do +    query +  end + +  defp exclude_move(query, _opts) do +    where(query, [n, a], fragment("?->>'type' != 'Move'", a.data)) +  end +    @valid_visibilities ~w[direct unlisted public private]    defp exclude_visibility(query, %{exclude_visibilities: visibility}) diff --git a/lib/pleroma/web/mastodon_api/mastodon_api.ex b/lib/pleroma/web/mastodon_api/mastodon_api.ex index d875a5788..3e7dc4617 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api.ex @@ -73,7 +73,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do        exclude_types: {:array, :string},        exclude_visibilities: {:array, :string},        reblogs: :boolean, -      with_muted: :boolean +      with_muted: :boolean, +      with_move: :boolean      }      changeset = cast({%{}, param_types}, params, Map.keys(param_types)) diff --git a/test/notification_test.exs b/test/notification_test.exs index dcbffeafe..9fe34d18f 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -643,13 +643,17 @@ defmodule Pleroma.NotificationTest do        Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)        ObanHelpers.perform_all() +      assert [] = Notification.for_user(follower) +        assert [                 %{                   activity: %{                     data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}                   }                 } -             ] = Notification.for_user(follower) +             ] = Notification.for_user(follower, %{with_move: true}) + +      assert [] = Notification.for_user(other_follower)        assert [                 %{ @@ -657,7 +661,7 @@ defmodule Pleroma.NotificationTest do                     data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}                   }                 } -             ] = Notification.for_user(other_follower) +             ] = Notification.for_user(other_follower, %{with_move: true})      end    end diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 2677b9e36..93eabde85 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1619,10 +1619,10 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do        activity = %Activity{activity | object: nil}        assert [%Notification{activity: ^activity}] = -               Notification.for_user_since(follower, ~N[2019-04-13 11:22:33]) +               Notification.for_user(follower, %{with_move: true})        assert [%Notification{activity: ^activity}] = -               Notification.for_user_since(follower_move_opted_out, ~N[2019-04-13 11:22:33]) +               Notification.for_user(follower_move_opted_out, %{with_move: true})      end      test "old user must be in the new user's `also_known_as` list" do diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs index fa55a7cf9..349cca682 100644 --- a/test/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/web/mastodon_api/controllers/notification_controller_test.exs @@ -341,6 +341,32 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do      assert length(json_response(conn, 200)) == 1    end +  test "see move notifications with `with_move` parameter", %{ +    conn: conn +  } do +    old_user = insert(:user) +    new_user = insert(:user, also_known_as: [old_user.ap_id]) +    follower = insert(:user) + +    User.follow(follower, old_user) +    Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user) +    Pleroma.Tests.ObanHelpers.perform_all() + +    conn = +      conn +      |> assign(:user, follower) +      |> get("/api/v1/notifications") + +    assert json_response(conn, 200) == [] + +    conn = +      build_conn() +      |> assign(:user, follower) +      |> get("/api/v1/notifications", %{"with_move" => "true"}) + +    assert length(json_response(conn, 200)) == 1 +  end +    defp get_notification_id_by_activity(%{id: id}) do      Notification      |> Repo.get_by(activity_id: id) diff --git a/test/web/mastodon_api/views/notification_view_test.exs b/test/web/mastodon_api/views/notification_view_test.exs index 26e1afc85..ba1721e06 100644 --- a/test/web/mastodon_api/views/notification_view_test.exs +++ b/test/web/mastodon_api/views/notification_view_test.exs @@ -109,8 +109,8 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do    end    test "Move notification" do -    %{ap_id: old_ap_id} = old_user = insert(:user) -    %{ap_id: _new_ap_id} = new_user = insert(:user, also_known_as: [old_ap_id]) +    old_user = insert(:user) +    new_user = insert(:user, also_known_as: [old_user.ap_id])      follower = insert(:user)      User.follow(follower, old_user) @@ -120,7 +120,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do      old_user = refresh_record(old_user)      new_user = refresh_record(new_user) -    [notification] = Notification.for_user(follower) +    [notification] = Notification.for_user(follower, %{with_move: true})      expected = %{        id: to_string(notification.id),  | 
