diff options
Diffstat (limited to 'test/web/ostatus')
| -rw-r--r-- | test/web/ostatus/activity_representer_test.exs | 19 | ||||
| -rw-r--r-- | test/web/ostatus/incoming_documents/delete_handling_test.exs | 13 | ||||
| -rw-r--r-- | test/web/ostatus/ostatus_controller_test.exs | 20 | ||||
| -rw-r--r-- | test/web/ostatus/ostatus_test.exs | 72 | 
4 files changed, 82 insertions, 42 deletions
diff --git a/test/web/ostatus/activity_representer_test.exs b/test/web/ostatus/activity_representer_test.exs index 16ee02abb..a3a92ce5b 100644 --- a/test/web/ostatus/activity_representer_test.exs +++ b/test/web/ostatus/activity_representer_test.exs @@ -38,22 +38,23 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenterTest do    test "a note activity" do      note_activity = insert(:note_activity) +    object_data = Object.normalize(note_activity).data      user = User.get_cached_by_ap_id(note_activity.data["actor"])      expected = """      <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>      <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> -    <id>#{note_activity.data["object"]["id"]}</id> +    <id>#{object_data["id"]}</id>      <title>New note by #{user.nickname}</title> -    <content type="html">#{note_activity.data["object"]["content"]}</content> -    <published>#{note_activity.data["object"]["published"]}</published> -    <updated>#{note_activity.data["object"]["published"]}</updated> +    <content type="html">#{object_data["content"]}</content> +    <published>#{object_data["published"]}</published> +    <updated>#{object_data["published"]}</updated>      <ostatus:conversation ref="#{note_activity.data["context"]}">#{note_activity.data["context"]}</ostatus:conversation>      <link ref="#{note_activity.data["context"]}" rel="ostatus:conversation" /> -    <summary>#{note_activity.data["object"]["summary"]}</summary> -    <link type="application/atom+xml" href="#{note_activity.data["object"]["id"]}" rel="self" /> -    <link type="text/html" href="#{note_activity.data["object"]["id"]}" rel="alternate" /> +    <summary>#{object_data["summary"]}</summary> +    <link type="application/atom+xml" href="#{object_data["id"]}" rel="self" /> +    <link type="text/html" href="#{object_data["id"]}" rel="alternate" />      <category term="2hu"/>      <link rel="mentioned" ostatus:object-type="http://activitystrea.ms/schema/1.0/collection" href="http://activityschema.org/collection/public"/>      <link name="2hu" rel="emoji" href="corndog.png" /> @@ -106,7 +107,7 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenterTest do    test "an announce activity" do      note = insert(:note_activity)      user = insert(:user) -    object = Object.get_cached_by_ap_id(note.data["object"]["id"]) +    object = Object.normalize(note)      {:ok, announce, _object} = ActivityPub.announce(user, object) @@ -125,7 +126,7 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenterTest do      <activity:verb>http://activitystrea.ms/schema/1.0/share</activity:verb>      <id>#{announce.data["id"]}</id>      <title>#{user.nickname} repeated a notice</title> -    <content type="html">RT #{note.data["object"]["content"]}</content> +    <content type="html">RT #{object.data["content"]}</content>      <published>#{announce.data["published"]}</published>      <updated>#{announce.data["published"]}</updated>      <ostatus:conversation ref="#{announce.data["context"]}">#{announce.data["context"]}</ostatus:conversation> diff --git a/test/web/ostatus/incoming_documents/delete_handling_test.exs b/test/web/ostatus/incoming_documents/delete_handling_test.exs index ca6e61339..cd0447af7 100644 --- a/test/web/ostatus/incoming_documents/delete_handling_test.exs +++ b/test/web/ostatus/incoming_documents/delete_handling_test.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only +  defmodule Pleroma.Web.OStatus.DeleteHandlingTest do    use Pleroma.DataCase @@ -17,8 +21,9 @@ defmodule Pleroma.Web.OStatus.DeleteHandlingTest do      test "it removes the mentioned activity" do        note = insert(:note_activity)        second_note = insert(:note_activity) +      object = Object.normalize(note) +      second_object = Object.normalize(second_note)        user = insert(:user) -      object = Object.get_by_ap_id(note.data["object"]["id"])        {:ok, like, _object} = Pleroma.Web.ActivityPub.ActivityPub.like(user, object) @@ -26,16 +31,16 @@ defmodule Pleroma.Web.OStatus.DeleteHandlingTest do          File.read!("test/fixtures/delete.xml")          |> String.replace(            "tag:mastodon.sdf.org,2017-06-10:objectId=310513:objectType=Status", -          note.data["object"]["id"] +          object.data["id"]          )        {:ok, [delete]} = OStatus.handle_incoming(incoming)        refute Activity.get_by_id(note.id)        refute Activity.get_by_id(like.id) -      assert Object.get_by_ap_id(note.data["object"]["id"]).data["type"] == "Tombstone" +      assert Object.get_by_ap_id(object.data["id"]).data["type"] == "Tombstone"        assert Activity.get_by_id(second_note.id) -      assert Object.get_by_ap_id(second_note.data["object"]["id"]) +      assert Object.get_by_ap_id(second_object.data["id"])        assert delete.data["type"] == "Delete"      end diff --git a/test/web/ostatus/ostatus_controller_test.exs b/test/web/ostatus/ostatus_controller_test.exs index 7441e5fce..3dd8c6491 100644 --- a/test/web/ostatus/ostatus_controller_test.exs +++ b/test/web/ostatus/ostatus_controller_test.exs @@ -12,6 +12,13 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do    setup_all do      Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) + +    config_path = [:instance, :federating] +    initial_setting = Pleroma.Config.get(config_path) + +    Pleroma.Config.put(config_path, true) +    on_exit(fn -> Pleroma.Config.put(config_path, initial_setting) end) +      :ok    end @@ -65,6 +72,7 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do    test "gets a feed", %{conn: conn} do      note_activity = insert(:note_activity) +    object = Object.normalize(note_activity)      user = User.get_cached_by_ap_id(note_activity.data["actor"])      conn = @@ -72,7 +80,7 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do        |> put_req_header("content-type", "application/atom+xml")        |> get("/users/#{user.nickname}/feed.atom") -    assert response(conn, 200) =~ note_activity.data["object"]["content"] +    assert response(conn, 200) =~ object.data["content"]    end    test "returns 404 for a missing feed", %{conn: conn} do @@ -86,8 +94,9 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do    test "gets an object", %{conn: conn} do      note_activity = insert(:note_activity) +    object = Object.normalize(note_activity)      user = User.get_cached_by_ap_id(note_activity.data["actor"]) -    [_, uuid] = hd(Regex.scan(~r/.+\/([\w-]+)$/, note_activity.data["object"]["id"])) +    [_, uuid] = hd(Regex.scan(~r/.+\/([\w-]+)$/, object.data["id"]))      url = "/objects/#{uuid}"      conn = @@ -106,7 +115,8 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do    test "404s on private objects", %{conn: conn} do      note_activity = insert(:direct_note_activity) -    [_, uuid] = hd(Regex.scan(~r/.+\/([\w-]+)$/, note_activity.data["object"]["id"])) +    object = Object.normalize(note_activity) +    [_, uuid] = hd(Regex.scan(~r/.+\/([\w-]+)$/, object.data["id"]))      conn      |> get("/objects/#{uuid}") @@ -131,8 +141,8 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do    test "404s on deleted objects", %{conn: conn} do      note_activity = insert(:note_activity) -    [_, uuid] = hd(Regex.scan(~r/.+\/([\w-]+)$/, note_activity.data["object"]["id"])) -    object = Object.get_by_ap_id(note_activity.data["object"]["id"]) +    object = Object.normalize(note_activity) +    [_, uuid] = hd(Regex.scan(~r/.+\/([\w-]+)$/, object.data["id"]))      conn      |> put_req_header("accept", "application/xml") diff --git a/test/web/ostatus/ostatus_test.exs b/test/web/ostatus/ostatus_test.exs index f6be16862..4e8f3a0fc 100644 --- a/test/web/ostatus/ostatus_test.exs +++ b/test/web/ostatus/ostatus_test.exs @@ -11,8 +11,10 @@ defmodule Pleroma.Web.OStatusTest do    alias Pleroma.User    alias Pleroma.Web.OStatus    alias Pleroma.Web.XML -  import Pleroma.Factory +    import ExUnit.CaptureLog +  import Mock +  import Pleroma.Factory    setup_all do      Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) @@ -28,7 +30,7 @@ defmodule Pleroma.Web.OStatusTest do    test "handle incoming note - GS, Salmon" do      incoming = File.read!("test/fixtures/incoming_note_activity.xml")      {:ok, [activity]} = OStatus.handle_incoming(incoming) -    object = Object.normalize(activity.data["object"]) +    object = Object.normalize(activity)      user = User.get_cached_by_ap_id(activity.data["actor"])      assert user.info.note_count == 1 @@ -51,7 +53,7 @@ defmodule Pleroma.Web.OStatusTest do    test "handle incoming notes - GS, subscription" do      incoming = File.read!("test/fixtures/ostatus_incoming_post.xml")      {:ok, [activity]} = OStatus.handle_incoming(incoming) -    object = Object.normalize(activity.data["object"]) +    object = Object.normalize(activity)      assert activity.data["type"] == "Create"      assert object.data["type"] == "Note" @@ -65,7 +67,7 @@ defmodule Pleroma.Web.OStatusTest do    test "handle incoming notes with attachments - GS, subscription" do      incoming = File.read!("test/fixtures/incoming_websub_gnusocial_attachments.xml")      {:ok, [activity]} = OStatus.handle_incoming(incoming) -    object = Object.normalize(activity.data["object"]) +    object = Object.normalize(activity)      assert activity.data["type"] == "Create"      assert object.data["type"] == "Note" @@ -78,7 +80,7 @@ defmodule Pleroma.Web.OStatusTest do    test "handle incoming notes with tags" do      incoming = File.read!("test/fixtures/ostatus_incoming_post_tag.xml")      {:ok, [activity]} = OStatus.handle_incoming(incoming) -    object = Object.normalize(activity.data["object"]) +    object = Object.normalize(activity)      assert object.data["tag"] == ["nsfw"]      assert "https://www.w3.org/ns/activitystreams#Public" in activity.data["to"] @@ -95,7 +97,7 @@ defmodule Pleroma.Web.OStatusTest do      incoming = File.read!("test/fixtures/incoming_reply_mastodon.xml")      {:ok, [activity]} = OStatus.handle_incoming(incoming) -    object = Object.normalize(activity.data["object"]) +    object = Object.normalize(activity)      assert activity.data["type"] == "Create"      assert object.data["type"] == "Note" @@ -107,7 +109,7 @@ defmodule Pleroma.Web.OStatusTest do    test "handle incoming notes - Mastodon, with CW" do      incoming = File.read!("test/fixtures/mastodon-note-cw.xml")      {:ok, [activity]} = OStatus.handle_incoming(incoming) -    object = Object.normalize(activity.data["object"]) +    object = Object.normalize(activity)      assert activity.data["type"] == "Create"      assert object.data["type"] == "Note" @@ -119,7 +121,7 @@ defmodule Pleroma.Web.OStatusTest do    test "handle incoming unlisted messages, put public into cc" do      incoming = File.read!("test/fixtures/mastodon-note-unlisted.xml")      {:ok, [activity]} = OStatus.handle_incoming(incoming) -    object = Object.normalize(activity.data["object"]) +    object = Object.normalize(activity)      refute "https://www.w3.org/ns/activitystreams#Public" in activity.data["to"]      assert "https://www.w3.org/ns/activitystreams#Public" in activity.data["cc"] @@ -130,7 +132,7 @@ defmodule Pleroma.Web.OStatusTest do    test "handle incoming retweets - Mastodon, with CW" do      incoming = File.read!("test/fixtures/cw_retweet.xml")      {:ok, [[_activity, retweeted_activity]]} = OStatus.handle_incoming(incoming) -    retweeted_object = Object.normalize(retweeted_activity.data["object"]) +    retweeted_object = Object.normalize(retweeted_activity)      assert retweeted_object.data["summary"] == "Hey."    end @@ -138,7 +140,7 @@ defmodule Pleroma.Web.OStatusTest do    test "handle incoming notes - GS, subscription, reply" do      incoming = File.read!("test/fixtures/ostatus_incoming_reply.xml")      {:ok, [activity]} = OStatus.handle_incoming(incoming) -    object = Object.normalize(activity.data["object"]) +    object = Object.normalize(activity)      assert activity.data["type"] == "Create"      assert object.data["type"] == "Note" @@ -164,7 +166,7 @@ defmodule Pleroma.Web.OStatusTest do      refute activity.local      retweeted_activity = Activity.get_by_id(retweeted_activity.id) -    retweeted_object = Object.normalize(retweeted_activity.data["object"]) +    retweeted_object = Object.normalize(retweeted_activity)      assert retweeted_activity.data["type"] == "Create"      assert retweeted_activity.data["actor"] == "https://pleroma.soykaf.com/users/lain"      refute retweeted_activity.local @@ -176,18 +178,19 @@ defmodule Pleroma.Web.OStatusTest do    test "handle incoming retweets - GS, subscription - local message" do      incoming = File.read!("test/fixtures/share-gs-local.xml")      note_activity = insert(:note_activity) +    object = Object.normalize(note_activity)      user = User.get_cached_by_ap_id(note_activity.data["actor"])      incoming =        incoming -      |> String.replace("LOCAL_ID", note_activity.data["object"]["id"]) +      |> String.replace("LOCAL_ID", object.data["id"])        |> String.replace("LOCAL_USER", user.ap_id)      {:ok, [[activity, retweeted_activity]]} = OStatus.handle_incoming(incoming)      assert activity.data["type"] == "Announce"      assert activity.data["actor"] == "https://social.heldscal.la/user/23211" -    assert activity.data["object"] == retweeted_activity.data["object"]["id"] +    assert activity.data["object"] == object.data["id"]      assert user.ap_id in activity.data["to"]      refute activity.local @@ -202,7 +205,7 @@ defmodule Pleroma.Web.OStatusTest do    test "handle incoming retweets - Mastodon, salmon" do      incoming = File.read!("test/fixtures/share.xml")      {:ok, [[activity, retweeted_activity]]} = OStatus.handle_incoming(incoming) -    retweeted_object = Object.normalize(retweeted_activity.data["object"]) +    retweeted_object = Object.normalize(retweeted_activity)      assert activity.data["type"] == "Announce"      assert activity.data["actor"] == "https://mastodon.social/users/lambadalambda" @@ -251,25 +254,29 @@ defmodule Pleroma.Web.OStatusTest do    test "handle incoming favorites with locally available object - GS, websub" do      note_activity = insert(:note_activity) +    object = Object.normalize(note_activity)      incoming =        File.read!("test/fixtures/favorite_with_local_note.xml") -      |> String.replace("localid", note_activity.data["object"]["id"]) +      |> String.replace("localid", object.data["id"])      {:ok, [[activity, favorited_activity]]} = OStatus.handle_incoming(incoming)      assert activity.data["type"] == "Like"      assert activity.data["actor"] == "https://social.heldscal.la/user/23211" -    assert activity.data["object"] == favorited_activity.data["object"]["id"] +    assert activity.data["object"] == object.data["id"]      refute activity.local      assert note_activity.id == favorited_activity.id      assert favorited_activity.local    end -  test "handle incoming replies" do +  test_with_mock "handle incoming replies, fetching replied-to activities if we don't have them", +                 OStatus, +                 [:passthrough], +                 [] do      incoming = File.read!("test/fixtures/incoming_note_activity_answer.xml")      {:ok, [activity]} = OStatus.handle_incoming(incoming) -    object = Object.normalize(activity.data["object"]) +    object = Object.normalize(activity, false)      assert activity.data["type"] == "Create"      assert object.data["type"] == "Note" @@ -282,6 +289,23 @@ defmodule Pleroma.Web.OStatusTest do      assert object.data["id"] == "tag:gs.example.org:4040,2017-04-25:noticeId=55:objectType=note"      assert "https://www.w3.org/ns/activitystreams#Public" in activity.data["to"] + +    assert called(OStatus.fetch_activity_from_url(object.data["inReplyTo"], :_)) +  end + +  test_with_mock "handle incoming replies, not fetching replied-to activities beyond max_replies_depth", +                 OStatus, +                 [:passthrough], +                 [] do +    incoming = File.read!("test/fixtures/incoming_note_activity_answer.xml") + +    with_mock Pleroma.Web.Federator, +      allowed_incoming_reply_depth?: fn _ -> false end do +      {:ok, [activity]} = OStatus.handle_incoming(incoming) +      object = Object.normalize(activity, false) + +      refute called(OStatus.fetch_activity_from_url(object.data["inReplyTo"], :_)) +    end    end    test "handle incoming follows" do @@ -315,13 +339,14 @@ defmodule Pleroma.Web.OStatusTest do               "undo:tag:social.heldscal.la,2017-05-07:subscription:23211:person:44803:2017-05-07T09:54:48+00:00"      assert activity.data["actor"] == "https://social.heldscal.la/user/23211" -    assert is_map(activity.data["object"]) -    assert activity.data["object"]["type"] == "Follow" -    assert activity.data["object"]["object"] == "https://pawoo.net/users/pekorino" +    embedded_object = activity.data["object"] +    assert is_map(embedded_object) +    assert embedded_object["type"] == "Follow" +    assert embedded_object["object"] == "https://pawoo.net/users/pekorino"      refute activity.local      follower = User.get_cached_by_ap_id(activity.data["actor"]) -    followed = User.get_cached_by_ap_id(activity.data["object"]["object"]) +    followed = User.get_cached_by_ap_id(embedded_object["object"])      refute User.following?(follower, followed)    end @@ -538,8 +563,7 @@ defmodule Pleroma.Web.OStatusTest do      test "Article objects are not representable" do        note_activity = insert(:note_activity) - -      note_object = Object.normalize(note_activity.data["object"]) +      note_object = Object.normalize(note_activity)        note_data =          note_object.data  | 
