diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/web/activity_pub/object_validator_test.exs | 17 | ||||
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 80 | 
2 files changed, 96 insertions, 1 deletions
| diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index 1d3646487..412db09ff 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -52,9 +52,11 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do      test "it's invalid if the actor of the object and the actor of delete are from different domains",           %{valid_post_delete: valid_post_delete} do +      valid_user = insert(:user) +        valid_other_actor =          valid_post_delete -        |> Map.put("actor", valid_post_delete["actor"] <> "1") +        |> Map.put("actor", valid_user.ap_id)        assert match?({:ok, _, _}, ObjectValidator.validate(valid_other_actor, [])) @@ -66,6 +68,19 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do        assert {:actor, {"is not allowed to delete object", []}} in cng.errors      end + +    test "it's valid if the actor of the object is a local superuser", +         %{valid_post_delete: valid_post_delete} do +      user = +        insert(:user, local: true, is_moderator: true, ap_id: "https://gensokyo.2hu/users/raymoo") + +      valid_other_actor = +        valid_post_delete +        |> Map.put("actor", user.ap_id) + +      {:ok, _, meta} = ObjectValidator.validate(valid_other_actor, []) +      assert meta[:do_not_federate] +    end    end    describe "likes" do diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 1758662b0..32d91ce02 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -9,11 +9,13 @@ defmodule Pleroma.Web.CommonAPITest do    alias Pleroma.Object    alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub +  alias Pleroma.Web.ActivityPub.Transmogrifier    alias Pleroma.Web.ActivityPub.Visibility    alias Pleroma.Web.AdminAPI.AccountView    alias Pleroma.Web.CommonAPI    import Pleroma.Factory +  import Mock    require Pleroma.Constants @@ -21,6 +23,84 @@ defmodule Pleroma.Web.CommonAPITest do    setup do: clear_config([:instance, :limit])    setup do: clear_config([:instance, :max_pinned_statuses]) +  describe "deletion" do +    test "it allows users to delete their posts" do +      user = insert(:user) + +      {:ok, post} = CommonAPI.post(user, %{"status" => "namu amida butsu"}) + +      with_mock Pleroma.Web.Federator, +        publish: fn _ -> nil end do +        assert {:ok, delete} = CommonAPI.delete(post.id, user) +        assert delete.local +        assert called(Pleroma.Web.Federator.publish(delete)) +      end + +      refute Activity.get_by_id(post.id) +    end + +    test "it does not allow a user to delete their posts" do +      user = insert(:user) +      other_user = insert(:user) + +      {:ok, post} = CommonAPI.post(user, %{"status" => "namu amida butsu"}) + +      assert {:error, "Could not delete"} = CommonAPI.delete(post.id, other_user) +      assert Activity.get_by_id(post.id) +    end + +    test "it allows moderators to delete other user's posts" do +      user = insert(:user) +      moderator = insert(:user, is_moderator: true) + +      {:ok, post} = CommonAPI.post(user, %{"status" => "namu amida butsu"}) + +      assert {:ok, delete} = CommonAPI.delete(post.id, moderator) +      assert delete.local + +      refute Activity.get_by_id(post.id) +    end + +    test "it allows admins to delete other user's posts" do +      user = insert(:user) +      moderator = insert(:user, is_admin: true) + +      {:ok, post} = CommonAPI.post(user, %{"status" => "namu amida butsu"}) + +      assert {:ok, delete} = CommonAPI.delete(post.id, moderator) +      assert delete.local + +      refute Activity.get_by_id(post.id) +    end + +    test "superusers deleting non-local posts won't federate the delete" do +      # This is the user of the ingested activity +      _user = +        insert(:user, +          local: false, +          ap_id: "http://mastodon.example.org/users/admin", +          last_refreshed_at: NaiveDateTime.utc_now() +        ) + +      moderator = insert(:user, is_admin: true) + +      data = +        File.read!("test/fixtures/mastodon-post-activity.json") +        |> Jason.decode!() + +      {:ok, post} = Transmogrifier.handle_incoming(data) + +      with_mock Pleroma.Web.Federator, +        publish: fn _ -> nil end do +        assert {:ok, delete} = CommonAPI.delete(post.id, moderator) +        assert delete.local +        refute called(Pleroma.Web.Federator.publish(:_)) +      end + +      refute Activity.get_by_id(post.id) +    end +  end +    test "favoriting race condition" do      user = insert(:user)      users_serial = insert_list(10, :user) | 
