diff options
Diffstat (limited to 'test/web')
| -rw-r--r-- | test/web/activity_pub/utils_test.exs | 232 | 
1 files changed, 228 insertions, 4 deletions
| diff --git a/test/web/activity_pub/utils_test.exs b/test/web/activity_pub/utils_test.exs index eb429b2c4..b1c1d6f71 100644 --- a/test/web/activity_pub/utils_test.exs +++ b/test/web/activity_pub/utils_test.exs @@ -87,6 +87,18 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        assert Utils.determine_explicit_mentions(object) == []      end + +    test "works with an object has tags as map" do +      object = %{ +        "tag" => %{ +          "type" => "Mention", +          "href" => "https://example.com/~alyssa", +          "name" => "Alyssa P. Hacker" +        } +      } + +      assert Utils.determine_explicit_mentions(object) == ["https://example.com/~alyssa"] +    end    end    describe "make_unlike_data/3" do @@ -300,8 +312,8 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        {:ok, follow_activity_two} =          Utils.update_follow_state_for_all(follow_activity_two, "accept") -      assert Repo.get(Activity, follow_activity.id).data["state"] == "accept" -      assert Repo.get(Activity, follow_activity_two.id).data["state"] == "accept" +      assert refresh_record(follow_activity).data["state"] == "accept" +      assert refresh_record(follow_activity_two).data["state"] == "accept"      end    end @@ -323,8 +335,8 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        {:ok, follow_activity_two} = Utils.update_follow_state(follow_activity_two, "reject") -      assert Repo.get(Activity, follow_activity.id).data["state"] == "pending" -      assert Repo.get(Activity, follow_activity_two.id).data["state"] == "reject" +      assert refresh_record(follow_activity).data["state"] == "pending" +      assert refresh_record(follow_activity_two).data["state"] == "reject"      end    end @@ -401,4 +413,216 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        assert ^like_activity = Utils.get_existing_like(user.ap_id, object)      end    end + +  describe "get_get_existing_announce/2" do +    test "returns nil if announce not found" do +      actor = insert(:user) +      refute Utils.get_existing_announce(actor.ap_id, %{data: %{"id" => "test"}}) +    end + +    test "fetches existing announce" do +      note_activity = insert(:note_activity) +      assert object = Object.normalize(note_activity) +      actor = insert(:user) + +      {:ok, announce, _object} = ActivityPub.announce(actor, object) +      assert Utils.get_existing_announce(actor.ap_id, object) == announce +    end +  end + +  describe "fetch_latest_block/2" do +    test "fetches last block activities" do +      user1 = insert(:user) +      user2 = insert(:user) + +      assert {:ok, %Activity{} = _} = ActivityPub.block(user1, user2) +      assert {:ok, %Activity{} = _} = ActivityPub.block(user1, user2) +      assert {:ok, %Activity{} = activity} = ActivityPub.block(user1, user2) + +      assert Utils.fetch_latest_block(user1, user2) == activity +    end +  end + +  describe "recipient_in_message/3" do +    test "returns true when recipient in `to`" do +      recipient = insert(:user) +      actor = insert(:user) +      assert Utils.recipient_in_message(recipient, actor, %{"to" => recipient.ap_id}) + +      assert Utils.recipient_in_message( +               recipient, +               actor, +               %{"to" => [recipient.ap_id], "cc" => ""} +             ) +    end + +    test "returns true when recipient in `cc`" do +      recipient = insert(:user) +      actor = insert(:user) +      assert Utils.recipient_in_message(recipient, actor, %{"cc" => recipient.ap_id}) + +      assert Utils.recipient_in_message( +               recipient, +               actor, +               %{"cc" => [recipient.ap_id], "to" => ""} +             ) +    end + +    test "returns true when recipient in `bto`" do +      recipient = insert(:user) +      actor = insert(:user) +      assert Utils.recipient_in_message(recipient, actor, %{"bto" => recipient.ap_id}) + +      assert Utils.recipient_in_message( +               recipient, +               actor, +               %{"bcc" => "", "bto" => [recipient.ap_id]} +             ) +    end + +    test "returns true when recipient in `bcc`" do +      recipient = insert(:user) +      actor = insert(:user) +      assert Utils.recipient_in_message(recipient, actor, %{"bcc" => recipient.ap_id}) + +      assert Utils.recipient_in_message( +               recipient, +               actor, +               %{"bto" => "", "bcc" => [recipient.ap_id]} +             ) +    end + +    test "returns true when message without addresses fields" do +      recipient = insert(:user) +      actor = insert(:user) +      assert Utils.recipient_in_message(recipient, actor, %{"bccc" => recipient.ap_id}) + +      assert Utils.recipient_in_message( +               recipient, +               actor, +               %{"btod" => "", "bccc" => [recipient.ap_id]} +             ) +    end + +    test "returns false" do +      recipient = insert(:user) +      actor = insert(:user) +      refute Utils.recipient_in_message(recipient, actor, %{"to" => "ap_id"}) +    end +  end + +  describe "lazy_put_activity_defaults/2" do +    test "returns map with id and published data" do +      note_activity = insert(:note_activity) +      object = Object.normalize(note_activity) +      res = Utils.lazy_put_activity_defaults(%{"context" => object.data["id"]}) +      assert res["context"] == object.data["id"] +      assert res["context_id"] == object.id +      assert res["id"] +      assert res["published"] +    end + +    test "returns map with fake id and published data" do +      assert %{ +               "context" => "pleroma:fakecontext", +               "context_id" => -1, +               "id" => "pleroma:fakeid", +               "published" => _ +             } = Utils.lazy_put_activity_defaults(%{}, true) +    end + +    test "returns activity data with object" do +      note_activity = insert(:note_activity) +      object = Object.normalize(note_activity) + +      res = +        Utils.lazy_put_activity_defaults(%{ +          "context" => object.data["id"], +          "object" => %{} +        }) + +      assert res["context"] == object.data["id"] +      assert res["context_id"] == object.id +      assert res["id"] +      assert res["published"] +      assert res["object"]["id"] +      assert res["object"]["published"] +      assert res["object"]["context"] == object.data["id"] +      assert res["object"]["context_id"] == object.id +    end +  end + +  describe "make_flag_data" do +    test "returns empty map when params is invalid" do +      assert Utils.make_flag_data(%{}, %{}) == %{} +    end + +    test "returns map with Flag object" do +      reporter = insert(:user) +      target_account = insert(:user) +      {:ok, activity} = CommonAPI.post(target_account, %{"status" => "foobar"}) +      context = Utils.generate_context_id() +      content = "foobar" + +      target_ap_id = target_account.ap_id +      activity_ap_id = activity.data["id"] + +      res = +        Utils.make_flag_data( +          %{ +            actor: reporter, +            context: context, +            account: target_account, +            statuses: [%{"id" => activity.data["id"]}], +            content: content +          }, +          %{} +        ) + +      assert %{ +               "type" => "Flag", +               "content" => ^content, +               "context" => ^context, +               "object" => [^target_ap_id, ^activity_ap_id], +               "state" => "open" +             } = res +    end +  end + +  describe "add_announce_to_object/2" do +    test "adds actor to announcement" do +      user = insert(:user) +      object = insert(:note) + +      activity = +        insert(:note_activity, +          data: %{ +            "actor" => user.ap_id, +            "cc" => [Pleroma.Constants.as_public()] +          } +        ) + +      assert {:ok, updated_object} = Utils.add_announce_to_object(activity, object) +      assert updated_object.data["announcements"] == [user.ap_id] +      assert updated_object.data["announcement_count"] == 1 +    end +  end + +  describe "remove_announce_from_object/2" do +    test "removes actor from announcements" do +      user = insert(:user) +      user2 = insert(:user) + +      object = +        insert(:note, +          data: %{"announcements" => [user.ap_id, user2.ap_id], "announcement_count" => 2} +        ) + +      activity = insert(:note_activity, data: %{"actor" => user.ap_id}) + +      assert {:ok, updated_object} = Utils.remove_announce_from_object(activity, object) +      assert updated_object.data["announcements"] == [user2.ap_id] +      assert updated_object.data["announcement_count"] == 1 +    end +  end  end | 
