diff options
| author | Alex Gleason <alex@alexgleason.me> | 2021-12-23 16:00:16 +0000 | 
|---|---|---|
| committer | Alex Gleason <alex@alexgleason.me> | 2021-12-23 16:00:16 +0000 | 
| commit | d9746ae4cba32f7544edb776f77134be4141ba2c (patch) | |
| tree | 1a36cf2ff5f99046f5d95e45a63bf5c8f96a3060 /test | |
| parent | 05c7a141016cc7709357922842c7f9fb88c5b9aa (diff) | |
| parent | 8376e83f61b8dbe61134e814e093e8fe7288440f (diff) | |
| download | pleroma-d9746ae4cba32f7544edb776f77134be4141ba2c.tar.gz pleroma-d9746ae4cba32f7544edb776f77134be4141ba2c.zip | |
Merge branch 'from/develop/tusooa/2802-propagate-reject' into 'develop'
Handle Reject for already-accepted Follows properly
Closes #2766 and #2802
See merge request pleroma/pleroma!3568
Diffstat (limited to 'test')
| -rw-r--r-- | test/pleroma/web/activity_pub/side_effects_test.exs | 80 | ||||
| -rw-r--r-- | test/pleroma/web/activity_pub/utils_test.exs | 14 | 
2 files changed, 94 insertions, 0 deletions
| diff --git a/test/pleroma/web/activity_pub/side_effects_test.exs b/test/pleroma/web/activity_pub/side_effects_test.exs index d0988619d..c6155ed18 100644 --- a/test/pleroma/web/activity_pub/side_effects_test.exs +++ b/test/pleroma/web/activity_pub/side_effects_test.exs @@ -88,6 +88,16 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do        assert User.blocks?(user, blocked)      end +    test "it updates following relationship", %{user: user, blocked: blocked, block: block} do +      {:ok, _, _} = SideEffects.handle(block) + +      refute Pleroma.FollowingRelationship.get(user, blocked) +      assert User.get_follow_state(user, blocked) == nil +      assert User.get_follow_state(blocked, user) == nil +      assert User.get_follow_state(user, blocked, nil) == nil +      assert User.get_follow_state(blocked, user, nil) == nil +    end +      test "it blocks but does not unfollow if the relevant setting is set", %{        user: user,        blocked: blocked, @@ -542,4 +552,74 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do        end      end    end + +  describe "removing a follower" do +    setup do +      user = insert(:user) +      followed = insert(:user) + +      {:ok, _, _, follow_activity} = CommonAPI.follow(user, followed) + +      {:ok, reject_data, []} = Builder.reject(followed, follow_activity) +      {:ok, reject, _meta} = ActivityPub.persist(reject_data, local: true) + +      %{user: user, followed: followed, reject: reject} +    end + +    test "", %{user: user, followed: followed, reject: reject} do +      assert User.following?(user, followed) +      assert Pleroma.FollowingRelationship.get(user, followed) + +      {:ok, _, _} = SideEffects.handle(reject) + +      refute User.following?(user, followed) +      refute Pleroma.FollowingRelationship.get(user, followed) +      assert User.get_follow_state(user, followed) == nil +      assert User.get_follow_state(user, followed, nil) == nil +    end +  end + +  describe "removing a follower from remote" do +    setup do +      user = insert(:user) +      followed = insert(:user, local: false) + +      # Mock a local-to-remote follow +      {:ok, follow_data, []} = Builder.follow(user, followed) + +      follow_data = +        follow_data +        |> Map.put("state", "accept") + +      {:ok, follow, _meta} = ActivityPub.persist(follow_data, local: true) +      {:ok, _, _} = SideEffects.handle(follow) + +      # Mock a remote-to-local accept +      {:ok, accept_data, _} = Builder.accept(followed, follow) +      {:ok, accept, _} = ActivityPub.persist(accept_data, local: false) +      {:ok, _, _} = SideEffects.handle(accept) + +      # Mock a remote-to-local reject +      {:ok, reject_data, []} = Builder.reject(followed, follow) +      {:ok, reject, _meta} = ActivityPub.persist(reject_data, local: false) + +      %{user: user, followed: followed, reject: reject} +    end + +    test "", %{user: user, followed: followed, reject: reject} do +      assert User.following?(user, followed) +      assert Pleroma.FollowingRelationship.get(user, followed) + +      {:ok, _, _} = SideEffects.handle(reject) + +      refute User.following?(user, followed) +      refute Pleroma.FollowingRelationship.get(user, followed) + +      assert Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(user, followed).data["state"] == +               "reject" + +      assert User.get_follow_state(user, followed) == nil +      assert User.get_follow_state(user, followed, nil) == nil +    end +  end  end diff --git a/test/pleroma/web/activity_pub/utils_test.exs b/test/pleroma/web/activity_pub/utils_test.exs index ee3e1014e..62dc02f61 100644 --- a/test/pleroma/web/activity_pub/utils_test.exs +++ b/test/pleroma/web/activity_pub/utils_test.exs @@ -213,6 +213,20 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        assert refresh_record(follow_activity).data["state"] == "accept"        assert refresh_record(follow_activity_two).data["state"] == "accept"      end + +    test "also updates the state of accepted follows" do +      user = insert(:user) +      follower = insert(:user) + +      {:ok, _, _, follow_activity} = CommonAPI.follow(follower, user) +      {:ok, _, _, follow_activity_two} = CommonAPI.follow(follower, user) + +      {:ok, follow_activity_two} = +        Utils.update_follow_state_for_all(follow_activity_two, "reject") + +      assert refresh_record(follow_activity).data["state"] == "reject" +      assert refresh_record(follow_activity_two).data["state"] == "reject" +    end    end    describe "update_follow_state/2" do | 
