diff options
| author | lain <lain@soykaf.club> | 2019-08-27 20:59:09 +0000 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2019-08-27 20:59:09 +0000 | 
| commit | 96de84a93d596f767020206b7d5bb82b65e75a5a (patch) | |
| tree | 5985bfa20375b398707c374d546d183be9bad6bd /test | |
| parent | ba5e14be05c78a8905747d7c9930b3b23a9bdb18 (diff) | |
| parent | ffcd742aa0797b5bb872e58c1e605f22c8652250 (diff) | |
| download | pleroma-96de84a93d596f767020206b7d5bb82b65e75a5a.tar.gz pleroma-96de84a93d596f767020206b7d5bb82b65e75a5a.zip  | |
Merge branch 'tests/activity_pub' into 'develop'
added tests for ActivityPub.like\unlike
See merge request pleroma/pleroma!1606
Diffstat (limited to 'test')
| -rw-r--r-- | test/support/factory.ex | 16 | ||||
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 44 | ||||
| -rw-r--r-- | test/web/activity_pub/utils_test.exs | 102 | 
3 files changed, 155 insertions, 7 deletions
diff --git a/test/support/factory.ex b/test/support/factory.ex index 62d1de717..719115003 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -207,13 +207,15 @@ defmodule Pleroma.Factory do      object = Object.normalize(note_activity)      user = insert(:user) -    data = %{ -      "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(), -      "actor" => user.ap_id, -      "type" => "Like", -      "object" => object.data["id"], -      "published_at" => DateTime.utc_now() |> DateTime.to_iso8601() -    } +    data = +      %{ +        "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(), +        "actor" => user.ap_id, +        "type" => "Like", +        "object" => object.data["id"], +        "published_at" => DateTime.utc_now() |> DateTime.to_iso8601() +      } +      |> Map.merge(attrs[:data_attrs] || %{})      %Pleroma.Activity{        data: data diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 1515f4eb6..f72b44aed 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -21,6 +21,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do      :ok    end +  clear_config([:instance, :federating]) +    describe "streaming out participations" do      test "it streams them out" do        user = insert(:user) @@ -676,6 +678,29 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do    end    describe "like an object" do +    test_with_mock "sends an activity to federation", Pleroma.Web.Federator, [:passthrough], [] do +      Pleroma.Config.put([:instance, :federating], true) +      note_activity = insert(:note_activity) +      assert object_activity = Object.normalize(note_activity) + +      user = insert(:user) + +      {:ok, like_activity, _object} = ActivityPub.like(user, object_activity) +      assert called(Pleroma.Web.Federator.publish(like_activity, 5)) +    end + +    test "returns exist activity if object already liked" do +      note_activity = insert(:note_activity) +      assert object_activity = Object.normalize(note_activity) + +      user = insert(:user) + +      {:ok, like_activity, _object} = ActivityPub.like(user, object_activity) + +      {:ok, like_activity_exist, _object} = ActivityPub.like(user, object_activity) +      assert like_activity == like_activity_exist +    end +      test "adds a like activity to the db" do        note_activity = insert(:note_activity)        assert object = Object.normalize(note_activity) @@ -706,6 +731,25 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do    end    describe "unliking" do +    test_with_mock "sends an activity to federation", Pleroma.Web.Federator, [:passthrough], [] do +      Pleroma.Config.put([:instance, :federating], true) + +      note_activity = insert(:note_activity) +      object = Object.normalize(note_activity) +      user = insert(:user) + +      {:ok, object} = ActivityPub.unlike(user, object) +      refute called(Pleroma.Web.Federator.publish()) + +      {:ok, _like_activity, object} = ActivityPub.like(user, object) +      assert object.data["like_count"] == 1 + +      {:ok, unlike_activity, _, object} = ActivityPub.unlike(user, object) +      assert object.data["like_count"] == 0 + +      assert called(Pleroma.Web.Federator.publish(unlike_activity, 5)) +    end +      test "unliking a previously liked object" do        note_activity = insert(:note_activity)        object = Object.normalize(note_activity) diff --git a/test/web/activity_pub/utils_test.exs b/test/web/activity_pub/utils_test.exs index ca5f057a7..eb429b2c4 100644 --- a/test/web/activity_pub/utils_test.exs +++ b/test/web/activity_pub/utils_test.exs @@ -14,6 +14,8 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do    import Pleroma.Factory +  require Pleroma.Constants +    describe "fetch the latest Follow" do      test "fetches the latest Follow activity" do        %Activity{data: %{"type" => "Follow"}} = activity = insert(:follow_activity) @@ -87,6 +89,32 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do      end    end +  describe "make_unlike_data/3" do +    test "returns data for unlike activity" do +      user = insert(:user) +      like_activity = insert(:like_activity, data_attrs: %{"context" => "test context"}) + +      assert Utils.make_unlike_data(user, like_activity, nil) == %{ +               "type" => "Undo", +               "actor" => user.ap_id, +               "object" => like_activity.data, +               "to" => [user.follower_address, like_activity.data["actor"]], +               "cc" => [Pleroma.Constants.as_public()], +               "context" => like_activity.data["context"] +             } + +      assert Utils.make_unlike_data(user, like_activity, "9mJEZK0tky1w2xD2vY") == %{ +               "type" => "Undo", +               "actor" => user.ap_id, +               "object" => like_activity.data, +               "to" => [user.follower_address, like_activity.data["actor"]], +               "cc" => [Pleroma.Constants.as_public()], +               "context" => like_activity.data["context"], +               "id" => "9mJEZK0tky1w2xD2vY" +             } +    end +  end +    describe "make_like_data" do      setup do        user = insert(:user) @@ -299,4 +327,78 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        assert Repo.get(Activity, follow_activity_two.id).data["state"] == "reject"      end    end + +  describe "update_element_in_object/3" do +    test "updates likes" do +      user = insert(:user) +      activity = insert(:note_activity) +      object = Object.normalize(activity) + +      assert {:ok, updated_object} = +               Utils.update_element_in_object( +                 "like", +                 [user.ap_id], +                 object +               ) + +      assert updated_object.data["likes"] == [user.ap_id] +      assert updated_object.data["like_count"] == 1 +    end +  end + +  describe "add_like_to_object/2" do +    test "add actor to likes" do +      user = insert(:user) +      user2 = insert(:user) +      object = insert(:note) + +      assert {:ok, updated_object} = +               Utils.add_like_to_object( +                 %Activity{data: %{"actor" => user.ap_id}}, +                 object +               ) + +      assert updated_object.data["likes"] == [user.ap_id] +      assert updated_object.data["like_count"] == 1 + +      assert {:ok, updated_object2} = +               Utils.add_like_to_object( +                 %Activity{data: %{"actor" => user2.ap_id}}, +                 updated_object +               ) + +      assert updated_object2.data["likes"] == [user2.ap_id, user.ap_id] +      assert updated_object2.data["like_count"] == 2 +    end +  end + +  describe "remove_like_from_object/2" do +    test "removes ap_id from likes" do +      user = insert(:user) +      user2 = insert(:user) +      object = insert(:note, data: %{"likes" => [user.ap_id, user2.ap_id], "like_count" => 2}) + +      assert {:ok, updated_object} = +               Utils.remove_like_from_object( +                 %Activity{data: %{"actor" => user.ap_id}}, +                 object +               ) + +      assert updated_object.data["likes"] == [user2.ap_id] +      assert updated_object.data["like_count"] == 1 +    end +  end + +  describe "get_existing_like/2" do +    test "fetches existing like" do +      note_activity = insert(:note_activity) +      assert object = Object.normalize(note_activity) + +      user = insert(:user) +      refute Utils.get_existing_like(user.ap_id, object) +      {:ok, like_activity, _object} = ActivityPub.like(user, object) + +      assert ^like_activity = Utils.get_existing_like(user.ap_id, object) +    end +  end  end  | 
