diff options
Diffstat (limited to 'test/web/mastodon_api/views')
| -rw-r--r-- | test/web/mastodon_api/views/account_view_test.exs | 345 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/conversation_view_test.exs | 11 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/marker_view_test.exs | 8 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/notification_view_test.exs | 141 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/poll_view_test.exs | 81 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/scheduled_activity_view_test.exs | 4 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/status_view_test.exs | 156 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/subscription_view_test.exs (renamed from test/web/mastodon_api/views/push_subscription_view_test.exs) | 6 | 
8 files changed, 486 insertions, 266 deletions
diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 209c0c04a..8f37efa3c 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -5,7 +5,9 @@  defmodule Pleroma.Web.MastodonAPI.AccountViewTest do    use Pleroma.DataCase +  alias Pleroma.Config    alias Pleroma.User +  alias Pleroma.UserRelationship    alias Pleroma.Web.CommonAPI    alias Pleroma.Web.MastodonAPI.AccountView @@ -17,17 +19,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      :ok    end -  test "Represent a user account" do -    source_data = %{ -      "tag" => [ -        %{ -          "type" => "Emoji", -          "icon" => %{"url" => "/file.png"}, -          "name" => ":karjalanpiirakka:" -        } -      ] -    } +  setup do: clear_config([:instances_favicons, :enabled]) +  test "Represent a user account" do      background_image = %{        "url" => [%{"href" => "https://example.com/images/asuka_hospital.png"}]      } @@ -36,13 +30,14 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        insert(:user, %{          follower_count: 3,          note_count: 5, -        source_data: source_data,          background: background_image,          nickname: "shp@shitposter.club",          name: ":karjalanpiirakka: shp",          bio: -          "<script src=\"invalid-html\"></script><span>valid html</span>. a<br>b<br/>c<br >d<br />f", -        inserted_at: ~N[2017-08-15 15:47:06.597036] +          "<script src=\"invalid-html\"></script><span>valid html</span>. a<br>b<br/>c<br >d<br />f '&<>\"", +        inserted_at: ~N[2017-08-15 15:47:06.597036], +        emoji: %{"karjalanpiirakka" => "/file.png"}, +        raw_bio: "valid html. a\nb\nc\nd\nf '&<>\""        })      expected = %{ @@ -55,7 +50,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        followers_count: 3,        following_count: 0,        statuses_count: 5, -      note: "<span>valid html</span>. a<br/>b<br/>c<br/>d<br/>f", +      note: "<span>valid html</span>. a<br/>b<br/>c<br/>d<br/>f '&<>"",        url: user.ap_id,        avatar: "http://localhost:4001/images/avi.png",        avatar_static: "http://localhost:4001/images/avi.png", @@ -63,16 +58,16 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        header_static: "http://localhost:4001/images/banner.png",        emojis: [          %{ -          "static_url" => "/file.png", -          "url" => "/file.png", -          "shortcode" => "karjalanpiirakka", -          "visible_in_picker" => false +          static_url: "/file.png", +          url: "/file.png", +          shortcode: "karjalanpiirakka", +          visible_in_picker: false          }        ],        fields: [],        bot: false,        source: %{ -        note: "valid html. a\nb\nc\nd\nf", +        note: "valid html. a\nb\nc\nd\nf '&<>\"",          sensitive: false,          pleroma: %{            actor_type: "Person", @@ -81,7 +76,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do          fields: []        },        pleroma: %{ +        ap_id: user.ap_id,          background_image: "https://example.com/images/asuka_hospital.png", +        favicon: +          "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png",          confirmation_pending: false,          tags: [],          is_admin: false, @@ -92,17 +90,40 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do          hide_followers_count: false,          hide_follows_count: false,          relationship: %{}, -        skip_thread_containment: false +        skip_thread_containment: false, +        accepts_chat_messages: nil        }      } -    assert expected == AccountView.render("show.json", %{user: user}) +    assert expected == AccountView.render("show.json", %{user: user, skip_visibility_check: true}) +  end + +  test "Favicon is nil when :instances_favicons is disabled" do +    user = insert(:user) + +    Config.put([:instances_favicons, :enabled], true) + +    assert %{ +             pleroma: %{ +               favicon: +                 "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png" +             } +           } = AccountView.render("show.json", %{user: user, skip_visibility_check: true}) + +    Config.put([:instances_favicons, :enabled], false) + +    assert %{pleroma: %{favicon: nil}} = +             AccountView.render("show.json", %{user: user, skip_visibility_check: true})    end    test "Represent the user account for the account owner" do      user = insert(:user) -    notification_settings = %Pleroma.User.NotificationSetting{} +    notification_settings = %{ +      block_from_strangers: false, +      hide_notification_contents: false +    } +      privacy = user.default_scope      assert %{ @@ -116,7 +137,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        insert(:user, %{          follower_count: 3,          note_count: 5, -        source_data: %{},          actor_type: "Service",          nickname: "shp@shitposter.club",          inserted_at: ~N[2017-08-15 15:47:06.597036] @@ -151,7 +171,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do          fields: []        },        pleroma: %{ +        ap_id: user.ap_id,          background_image: nil, +        favicon: +          "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png",          confirmation_pending: false,          tags: [],          is_admin: false, @@ -162,11 +185,12 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do          hide_followers_count: false,          hide_follows_count: false,          relationship: %{}, -        skip_thread_containment: false +        skip_thread_containment: false, +        accepts_chat_messages: nil        }      } -    assert expected == AccountView.render("show.json", %{user: user}) +    assert expected == AccountView.render("show.json", %{user: user, skip_visibility_check: true})    end    test "Represent a Funkwhale channel" do @@ -175,7 +199,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do          "https://channels.tests.funkwhale.audio/federation/actors/compositions"        ) -    assert represented = AccountView.render("show.json", %{user: user}) +    assert represented = +             AccountView.render("show.json", %{user: user, skip_visibility_check: true}) +      assert represented.acct == "compositions@channels.tests.funkwhale.audio"      assert represented.url == "https://channels.tests.funkwhale.audio/channels/compositions"    end @@ -200,7 +226,50 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      assert expected == AccountView.render("mention.json", %{user: user})    end +  test "demands :for or :skip_visibility_check option for account rendering" do +    clear_config([:restrict_unauthenticated, :profiles, :local], false) + +    user = insert(:user) +    user_id = user.id + +    assert %{id: ^user_id} = AccountView.render("show.json", %{user: user, for: nil}) +    assert %{id: ^user_id} = AccountView.render("show.json", %{user: user, for: user}) + +    assert %{id: ^user_id} = +             AccountView.render("show.json", %{user: user, skip_visibility_check: true}) + +    assert_raise RuntimeError, ~r/:skip_visibility_check or :for option is required/, fn -> +      AccountView.render("show.json", %{user: user}) +    end +  end +    describe "relationship" do +    defp test_relationship_rendering(user, other_user, expected_result) do +      opts = %{user: user, target: other_user, relationships: nil} +      assert expected_result == AccountView.render("relationship.json", opts) + +      relationships_opt = UserRelationship.view_relationships_option(user, [other_user]) +      opts = Map.put(opts, :relationships, relationships_opt) +      assert expected_result == AccountView.render("relationship.json", opts) + +      assert [expected_result] == +               AccountView.render("relationships.json", %{user: user, targets: [other_user]}) +    end + +    @blank_response %{ +      following: false, +      followed_by: false, +      blocking: false, +      blocked_by: false, +      muting: false, +      muting_notifications: false, +      subscribing: false, +      requested: false, +      domain_blocking: false, +      showing_reblogs: true, +      endorsed: false +    } +      test "represent a relationship for the following and followed user" do        user = insert(:user)        other_user = insert(:user) @@ -211,23 +280,21 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        {:ok, _user_relationships} = User.mute(user, other_user, true)        {:ok, _reblog_mute} = CommonAPI.hide_reblogs(user, other_user) -      expected = %{ -        id: to_string(other_user.id), -        following: true, -        followed_by: true, -        blocking: false, -        blocked_by: false, -        muting: true, -        muting_notifications: true, -        subscribing: true, -        requested: false, -        domain_blocking: false, -        showing_reblogs: false, -        endorsed: false -      } - -      assert expected == -               AccountView.render("relationship.json", %{user: user, target: other_user}) +      expected = +        Map.merge( +          @blank_response, +          %{ +            following: true, +            followed_by: true, +            muting: true, +            muting_notifications: true, +            subscribing: true, +            showing_reblogs: false, +            id: to_string(other_user.id) +          } +        ) + +      test_relationship_rendering(user, other_user, expected)      end      test "represent a relationship for the blocking and blocked user" do @@ -239,23 +306,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        {:ok, _user_relationship} = User.block(user, other_user)        {:ok, _user_relationship} = User.block(other_user, user) -      expected = %{ -        id: to_string(other_user.id), -        following: false, -        followed_by: false, -        blocking: true, -        blocked_by: true, -        muting: false, -        muting_notifications: false, -        subscribing: false, -        requested: false, -        domain_blocking: false, -        showing_reblogs: true, -        endorsed: false -      } +      expected = +        Map.merge( +          @blank_response, +          %{following: false, blocking: true, blocked_by: true, id: to_string(other_user.id)} +        ) -      assert expected == -               AccountView.render("relationship.json", %{user: user, target: other_user}) +      test_relationship_rendering(user, other_user, expected)      end      test "represent a relationship for the user blocking a domain" do @@ -264,8 +321,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        {:ok, user} = User.block_domain(user, "bad.site") -      assert %{domain_blocking: true, blocking: false} = -               AccountView.render("relationship.json", %{user: user, target: other_user}) +      expected = +        Map.merge( +          @blank_response, +          %{domain_blocking: true, blocking: false, id: to_string(other_user.id)} +        ) + +      test_relationship_rendering(user, other_user, expected)      end      test "represent a relationship for the user with a pending follow request" do @@ -276,103 +338,16 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        user = User.get_cached_by_id(user.id)        other_user = User.get_cached_by_id(other_user.id) -      expected = %{ -        id: to_string(other_user.id), -        following: false, -        followed_by: false, -        blocking: false, -        blocked_by: false, -        muting: false, -        muting_notifications: false, -        subscribing: false, -        requested: true, -        domain_blocking: false, -        showing_reblogs: true, -        endorsed: false -      } +      expected = +        Map.merge( +          @blank_response, +          %{requested: true, following: false, id: to_string(other_user.id)} +        ) -      assert expected == -               AccountView.render("relationship.json", %{user: user, target: other_user}) +      test_relationship_rendering(user, other_user, expected)      end    end -  test "represent an embedded relationship" do -    user = -      insert(:user, %{ -        follower_count: 0, -        note_count: 5, -        source_data: %{}, -        actor_type: "Service", -        nickname: "shp@shitposter.club", -        inserted_at: ~N[2017-08-15 15:47:06.597036] -      }) - -    other_user = insert(:user) -    {:ok, other_user} = User.follow(other_user, user) -    {:ok, _user_relationship} = User.block(other_user, user) -    {:ok, _} = User.follow(insert(:user), user) - -    expected = %{ -      id: to_string(user.id), -      username: "shp", -      acct: user.nickname, -      display_name: user.name, -      locked: false, -      created_at: "2017-08-15T15:47:06.000Z", -      followers_count: 1, -      following_count: 0, -      statuses_count: 5, -      note: user.bio, -      url: user.ap_id, -      avatar: "http://localhost:4001/images/avi.png", -      avatar_static: "http://localhost:4001/images/avi.png", -      header: "http://localhost:4001/images/banner.png", -      header_static: "http://localhost:4001/images/banner.png", -      emojis: [], -      fields: [], -      bot: true, -      source: %{ -        note: user.bio, -        sensitive: false, -        pleroma: %{ -          actor_type: "Service", -          discoverable: false -        }, -        fields: [] -      }, -      pleroma: %{ -        background_image: nil, -        confirmation_pending: false, -        tags: [], -        is_admin: false, -        is_moderator: false, -        hide_favorites: true, -        hide_followers: false, -        hide_follows: false, -        hide_followers_count: false, -        hide_follows_count: false, -        relationship: %{ -          id: to_string(user.id), -          following: false, -          followed_by: false, -          blocking: true, -          blocked_by: false, -          subscribing: false, -          muting: false, -          muting_notifications: false, -          requested: false, -          domain_blocking: false, -          showing_reblogs: true, -          endorsed: false -        }, -        skip_thread_containment: false -      } -    } - -    assert expected == -             AccountView.render("show.json", %{user: refresh_record(user), for: other_user}) -  end -    test "returns the settings store if the requesting user is the represented user and it's requested specifically" do      user = insert(:user, pleroma_settings_store: %{fe: "test"}) @@ -381,7 +356,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      assert result.pleroma.settings_store == %{:fe => "test"} -    result = AccountView.render("show.json", %{user: user, with_pleroma_settings: true}) +    result = AccountView.render("show.json", %{user: user, for: nil, with_pleroma_settings: true})      assert result.pleroma[:settings_store] == nil      result = AccountView.render("show.json", %{user: user, for: user}) @@ -390,13 +365,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do    test "doesn't sanitize display names" do      user = insert(:user, name: "<marquee> username </marquee>") -    result = AccountView.render("show.json", %{user: user}) +    result = AccountView.render("show.json", %{user: user, skip_visibility_check: true})      assert result.display_name == "<marquee> username </marquee>"    end    test "never display nil user follow counts" do      user = insert(:user, following_count: 0, follower_count: 0) -    result = AccountView.render("show.json", %{user: user}) +    result = AccountView.render("show.json", %{user: user, skip_visibility_check: true})      assert result.following_count == 0      assert result.followers_count == 0 @@ -420,7 +395,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do                 followers_count: 0,                 following_count: 0,                 pleroma: %{hide_follows_count: true, hide_followers_count: true} -             } = AccountView.render("show.json", %{user: user}) +             } = AccountView.render("show.json", %{user: user, skip_visibility_check: true})      end      test "shows when follows/followers are hidden" do @@ -433,13 +408,16 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do                 followers_count: 1,                 following_count: 1,                 pleroma: %{hide_follows: true, hide_followers: true} -             } = AccountView.render("show.json", %{user: user}) +             } = AccountView.render("show.json", %{user: user, skip_visibility_check: true})      end      test "shows actual follower/following count to the account owner" do        user = insert(:user, hide_followers: true, hide_follows: true)        other_user = insert(:user)        {:ok, user, other_user, _activity} = CommonAPI.follow(user, other_user) + +      assert User.following?(user, other_user) +      assert Pleroma.FollowingRelationship.follower_count(other_user) == 1        {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user)        assert %{ @@ -454,8 +432,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        {:ok, _activity} =          CommonAPI.post(other_user, %{ -          "status" => "Hey @#{user.nickname}.", -          "visibility" => "direct" +          status: "Hey @#{user.nickname}.", +          visibility: "direct"          })        user = User.get_cached_by_ap_id(user.ap_id) @@ -468,6 +446,24 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do                 :unread_conversation_count               ] == 1      end + +    test "shows unread_count only to the account owner" do +      user = insert(:user) +      insert_list(7, :notification, user: user) +      other_user = insert(:user) + +      user = User.get_cached_by_ap_id(user.ap_id) + +      assert AccountView.render( +               "show.json", +               %{user: user, for: other_user} +             )[:pleroma][:unread_notifications_count] == nil + +      assert AccountView.render( +               "show.json", +               %{user: user, for: user} +             )[:pleroma][:unread_notifications_count] == 7 +    end    end    describe "follow requests counter" do @@ -544,4 +540,31 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do                 AccountView.render("show.json", %{user: user, for: user})      end    end + +  test "uses mediaproxy urls when it's enabled" do +    clear_config([:media_proxy, :enabled], true) + +    user = +      insert(:user, +        avatar: %{"url" => [%{"href" => "https://evil.website/avatar.png"}]}, +        banner: %{"url" => [%{"href" => "https://evil.website/banner.png"}]}, +        emoji: %{"joker_smile" => "https://evil.website/society.png"} +      ) + +    AccountView.render("show.json", %{user: user, skip_visibility_check: true}) +    |> Enum.all?(fn +      {key, url} when key in [:avatar, :avatar_static, :header, :header_static] -> +        String.starts_with?(url, Pleroma.Web.base_url()) + +      {:emojis, emojis} -> +        Enum.all?(emojis, fn %{url: url, static_url: static_url} -> +          String.starts_with?(url, Pleroma.Web.base_url()) && +            String.starts_with?(static_url, Pleroma.Web.base_url()) +        end) + +      _ -> +        true +    end) +    |> assert() +  end  end diff --git a/test/web/mastodon_api/views/conversation_view_test.exs b/test/web/mastodon_api/views/conversation_view_test.exs index dbf3c51e2..2e8203c9b 100644 --- a/test/web/mastodon_api/views/conversation_view_test.exs +++ b/test/web/mastodon_api/views/conversation_view_test.exs @@ -15,8 +15,17 @@ defmodule Pleroma.Web.MastodonAPI.ConversationViewTest do      user = insert(:user)      other_user = insert(:user) +    {:ok, parent} = CommonAPI.post(user, %{status: "parent"}) +      {:ok, activity} = -      CommonAPI.post(user, %{"status" => "hey @#{other_user.nickname}", "visibility" => "direct"}) +      CommonAPI.post(user, %{ +        status: "hey @#{other_user.nickname}", +        visibility: "direct", +        in_reply_to_id: parent.id +      }) + +    {:ok, _reply_activity} = +      CommonAPI.post(user, %{status: "hu", visibility: "public", in_reply_to_id: parent.id})      [participation] = Participation.for_user_with_last_activity_id(user) diff --git a/test/web/mastodon_api/views/marker_view_test.exs b/test/web/mastodon_api/views/marker_view_test.exs index 893cf8857..48a0a6d33 100644 --- a/test/web/mastodon_api/views/marker_view_test.exs +++ b/test/web/mastodon_api/views/marker_view_test.exs @@ -8,19 +8,21 @@ defmodule Pleroma.Web.MastodonAPI.MarkerViewTest do    import Pleroma.Factory    test "returns markers" do -    marker1 = insert(:marker, timeline: "notifications", last_read_id: "17") +    marker1 = insert(:marker, timeline: "notifications", last_read_id: "17", unread_count: 5)      marker2 = insert(:marker, timeline: "home", last_read_id: "42")      assert MarkerView.render("markers.json", %{markers: [marker1, marker2]}) == %{               "home" => %{                 last_read_id: "42",                 updated_at: NaiveDateTime.to_iso8601(marker2.updated_at), -               version: 0 +               version: 0, +               pleroma: %{unread_count: 0}               },               "notifications" => %{                 last_read_id: "17",                 updated_at: NaiveDateTime.to_iso8601(marker1.updated_at), -               version: 0 +               version: 0, +               pleroma: %{unread_count: 5}               }             }    end diff --git a/test/web/mastodon_api/views/notification_view_test.exs b/test/web/mastodon_api/views/notification_view_test.exs index 4df9c3c03..2f6a808f1 100644 --- a/test/web/mastodon_api/views/notification_view_test.exs +++ b/test/web/mastodon_api/views/notification_view_test.exs @@ -6,7 +6,10 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do    use Pleroma.DataCase    alias Pleroma.Activity +  alias Pleroma.Chat +  alias Pleroma.Chat.MessageReference    alias Pleroma.Notification +  alias Pleroma.Object    alias Pleroma.Repo    alias Pleroma.User    alias Pleroma.Web.CommonAPI @@ -14,72 +17,109 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do    alias Pleroma.Web.MastodonAPI.AccountView    alias Pleroma.Web.MastodonAPI.NotificationView    alias Pleroma.Web.MastodonAPI.StatusView +  alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView    import Pleroma.Factory +  defp test_notifications_rendering(notifications, user, expected_result) do +    result = NotificationView.render("index.json", %{notifications: notifications, for: user}) + +    assert expected_result == result + +    result = +      NotificationView.render("index.json", %{ +        notifications: notifications, +        for: user, +        relationships: nil +      }) + +    assert expected_result == result +  end + +  test "ChatMessage notification" do +    user = insert(:user) +    recipient = insert(:user) +    {:ok, activity} = CommonAPI.post_chat_message(user, recipient, "what's up my dude") + +    {:ok, [notification]} = Notification.create_notifications(activity) + +    object = Object.normalize(activity) +    chat = Chat.get(recipient.id, user.ap_id) + +    cm_ref = MessageReference.for_chat_and_object(chat, object) + +    expected = %{ +      id: to_string(notification.id), +      pleroma: %{is_seen: false, is_muted: false}, +      type: "pleroma:chat_mention", +      account: AccountView.render("show.json", %{user: user, for: recipient}), +      chat_message: MessageReferenceView.render("show.json", %{chat_message_reference: cm_ref}), +      created_at: Utils.to_masto_date(notification.inserted_at) +    } + +    test_notifications_rendering([notification], recipient, [expected]) +  end +    test "Mention notification" do      user = insert(:user)      mentioned_user = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => "hey @#{mentioned_user.nickname}"}) +    {:ok, activity} = CommonAPI.post(user, %{status: "hey @#{mentioned_user.nickname}"})      {:ok, [notification]} = Notification.create_notifications(activity)      user = User.get_cached_by_id(user.id)      expected = %{        id: to_string(notification.id), -      pleroma: %{is_seen: false}, +      pleroma: %{is_seen: false, is_muted: false},        type: "mention", -      account: AccountView.render("show.json", %{user: user, for: mentioned_user}), +      account: +        AccountView.render("show.json", %{ +          user: user, +          for: mentioned_user +        }),        status: StatusView.render("show.json", %{activity: activity, for: mentioned_user}),        created_at: Utils.to_masto_date(notification.inserted_at)      } -    result = -      NotificationView.render("index.json", %{notifications: [notification], for: mentioned_user}) - -    assert [expected] == result +    test_notifications_rendering([notification], mentioned_user, [expected])    end    test "Favourite notification" do      user = insert(:user)      another_user = insert(:user) -    {:ok, create_activity} = CommonAPI.post(user, %{"status" => "hey"}) -    {:ok, favorite_activity, _object} = CommonAPI.favorite(create_activity.id, another_user) +    {:ok, create_activity} = CommonAPI.post(user, %{status: "hey"}) +    {:ok, favorite_activity} = CommonAPI.favorite(another_user, create_activity.id)      {:ok, [notification]} = Notification.create_notifications(favorite_activity)      create_activity = Activity.get_by_id(create_activity.id)      expected = %{        id: to_string(notification.id), -      pleroma: %{is_seen: false}, +      pleroma: %{is_seen: false, is_muted: false},        type: "favourite",        account: AccountView.render("show.json", %{user: another_user, for: user}),        status: StatusView.render("show.json", %{activity: create_activity, for: user}),        created_at: Utils.to_masto_date(notification.inserted_at)      } -    result = NotificationView.render("index.json", %{notifications: [notification], for: user}) - -    assert [expected] == result +    test_notifications_rendering([notification], user, [expected])    end    test "Reblog notification" do      user = insert(:user)      another_user = insert(:user) -    {:ok, create_activity} = CommonAPI.post(user, %{"status" => "hey"}) -    {:ok, reblog_activity, _object} = CommonAPI.repeat(create_activity.id, another_user) +    {:ok, create_activity} = CommonAPI.post(user, %{status: "hey"}) +    {:ok, reblog_activity} = CommonAPI.repeat(create_activity.id, another_user)      {:ok, [notification]} = Notification.create_notifications(reblog_activity)      reblog_activity = Activity.get_by_id(create_activity.id)      expected = %{        id: to_string(notification.id), -      pleroma: %{is_seen: false}, +      pleroma: %{is_seen: false, is_muted: false},        type: "reblog",        account: AccountView.render("show.json", %{user: another_user, for: user}),        status: StatusView.render("show.json", %{activity: reblog_activity, for: user}),        created_at: Utils.to_masto_date(notification.inserted_at)      } -    result = NotificationView.render("index.json", %{notifications: [notification], for: user}) - -    assert [expected] == result +    test_notifications_rendering([notification], user, [expected])    end    test "Follow notification" do @@ -90,29 +130,36 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do      expected = %{        id: to_string(notification.id), -      pleroma: %{is_seen: false}, +      pleroma: %{is_seen: false, is_muted: false},        type: "follow",        account: AccountView.render("show.json", %{user: follower, for: followed}),        created_at: Utils.to_masto_date(notification.inserted_at)      } -    result = -      NotificationView.render("index.json", %{notifications: [notification], for: followed}) - -    assert [expected] == result +    test_notifications_rendering([notification], followed, [expected])      User.perform(:delete, follower) -    notification = Notification |> Repo.one() |> Repo.preload(:activity) - -    assert [] == -             NotificationView.render("index.json", %{notifications: [notification], for: followed}) +    refute Repo.one(Notification)    end +  @tag capture_log: true    test "Move notification" do      old_user = insert(:user)      new_user = insert(:user, also_known_as: [old_user.ap_id])      follower = insert(:user) +    old_user_url = old_user.ap_id + +    body = +      File.read!("test/fixtures/users_mock/localhost.json") +      |> String.replace("{{nickname}}", old_user.nickname) +      |> Jason.encode!() + +    Tesla.Mock.mock(fn +      %{method: :get, url: ^old_user_url} -> +        %Tesla.Env{status: 200, body: body} +    end) +      User.follow(follower, old_user)      Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)      Pleroma.Tests.ObanHelpers.perform_all() @@ -120,27 +167,26 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do      old_user = refresh_record(old_user)      new_user = refresh_record(new_user) -    [notification] = Notification.for_user(follower, %{with_move: true}) +    [notification] = Notification.for_user(follower)      expected = %{        id: to_string(notification.id), -      pleroma: %{is_seen: false}, +      pleroma: %{is_seen: false, is_muted: false},        type: "move",        account: AccountView.render("show.json", %{user: old_user, for: follower}),        target: AccountView.render("show.json", %{user: new_user, for: follower}),        created_at: Utils.to_masto_date(notification.inserted_at)      } -    assert [expected] == -             NotificationView.render("index.json", %{notifications: [notification], for: follower}) +    test_notifications_rendering([notification], follower, [expected])    end    test "EmojiReact notification" do      user = insert(:user)      other_user = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => "#cofe"}) -    {:ok, _activity, _} = CommonAPI.react_with_emoji(activity.id, other_user, "☕") +    {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"}) +    {:ok, _activity} = CommonAPI.react_with_emoji(activity.id, other_user, "☕")      activity = Repo.get(Activity, activity.id) @@ -150,7 +196,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do      expected = %{        id: to_string(notification.id), -      pleroma: %{is_seen: false}, +      pleroma: %{is_seen: false, is_muted: false},        type: "pleroma:emoji_reaction",        emoji: "☕",        account: AccountView.render("show.json", %{user: other_user, for: user}), @@ -158,7 +204,28 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do        created_at: Utils.to_masto_date(notification.inserted_at)      } -    assert expected == -             NotificationView.render("show.json", %{notification: notification, for: user}) +    test_notifications_rendering([notification], user, [expected]) +  end + +  test "muted notification" do +    user = insert(:user) +    another_user = insert(:user) + +    {:ok, _} = Pleroma.UserRelationship.create_mute(user, another_user) +    {:ok, create_activity} = CommonAPI.post(user, %{status: "hey"}) +    {:ok, favorite_activity} = CommonAPI.favorite(another_user, create_activity.id) +    {:ok, [notification]} = Notification.create_notifications(favorite_activity) +    create_activity = Activity.get_by_id(create_activity.id) + +    expected = %{ +      id: to_string(notification.id), +      pleroma: %{is_seen: true, is_muted: true}, +      type: "favourite", +      account: AccountView.render("show.json", %{user: another_user, for: user}), +      status: StatusView.render("show.json", %{activity: create_activity, for: user}), +      created_at: Utils.to_masto_date(notification.inserted_at) +    } + +    test_notifications_rendering([notification], user, [expected])    end  end diff --git a/test/web/mastodon_api/views/poll_view_test.exs b/test/web/mastodon_api/views/poll_view_test.exs index 6211fa888..b7e2f17ef 100644 --- a/test/web/mastodon_api/views/poll_view_test.exs +++ b/test/web/mastodon_api/views/poll_view_test.exs @@ -22,10 +22,10 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do      {:ok, activity} =        CommonAPI.post(user, %{ -        "status" => "Is Tenshi eating a corndog cute?", -        "poll" => %{ -          "options" => ["absolutely!", "sure", "yes", "why are you even asking?"], -          "expires_in" => 20 +        status: "Is Tenshi eating a corndog cute?", +        poll: %{ +          options: ["absolutely!", "sure", "yes", "why are you even asking?"], +          expires_in: 20          }        }) @@ -43,7 +43,8 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do          %{title: "why are you even asking?", votes_count: 0}        ],        voted: false, -      votes_count: 0 +      votes_count: 0, +      voters_count: nil      }      result = PollView.render("show.json", %{object: object}) @@ -61,17 +62,28 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do      {:ok, activity} =        CommonAPI.post(user, %{ -        "status" => "Which Mastodon developer is your favourite?", -        "poll" => %{ -          "options" => ["Gargron", "Eugen"], -          "expires_in" => 20, -          "multiple" => true +        status: "Which Mastodon developer is your favourite?", +        poll: %{ +          options: ["Gargron", "Eugen"], +          expires_in: 20, +          multiple: true          }        }) +    voter = insert(:user) +      object = Object.normalize(activity) -    assert %{multiple: true} = PollView.render("show.json", %{object: object}) +    {:ok, _votes, object} = CommonAPI.vote(voter, object, [0, 1]) + +    assert match?( +             %{ +               multiple: true, +               voters_count: 1, +               votes_count: 2 +             }, +             PollView.render("show.json", %{object: object}) +           )    end    test "detects emoji" do @@ -79,10 +91,10 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do      {:ok, activity} =        CommonAPI.post(user, %{ -        "status" => "What's with the smug face?", -        "poll" => %{ -          "options" => [":blank: sip", ":blank::blank: sip", ":blank::blank::blank: sip"], -          "expires_in" => 20 +        status: "What's with the smug face?", +        poll: %{ +          options: [":blank: sip", ":blank::blank: sip", ":blank::blank::blank: sip"], +          expires_in: 20          }        }) @@ -97,11 +109,11 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do      {:ok, activity} =        CommonAPI.post(user, %{ -        "status" => "Which input devices do you use?", -        "poll" => %{ -          "options" => ["mouse", "trackball", "trackpoint"], -          "multiple" => true, -          "expires_in" => 20 +        status: "Which input devices do you use?", +        poll: %{ +          options: ["mouse", "trackball", "trackpoint"], +          multiple: true, +          expires_in: 20          }        }) @@ -123,4 +135,33 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do      assert result[:expires_at] == nil      assert result[:expired] == false    end + +  test "doesn't strips HTML tags" do +    user = insert(:user) + +    {:ok, activity} = +      CommonAPI.post(user, %{ +        status: "What's with the smug face?", +        poll: %{ +          options: [ +            "<input type=\"date\">", +            "<input type=\"date\" >", +            "<input type=\"date\"/>", +            "<input type=\"date\"></input>" +          ], +          expires_in: 20 +        } +      }) + +    object = Object.normalize(activity) + +    assert %{ +             options: [ +               %{title: "<input type=\"date\">", votes_count: 0}, +               %{title: "<input type=\"date\" >", votes_count: 0}, +               %{title: "<input type=\"date\"/>", votes_count: 0}, +               %{title: "<input type=\"date\"></input>", votes_count: 0} +             ] +           } = PollView.render("show.json", %{object: object}) +  end  end diff --git a/test/web/mastodon_api/views/scheduled_activity_view_test.exs b/test/web/mastodon_api/views/scheduled_activity_view_test.exs index 0c0987593..fbfd873ef 100644 --- a/test/web/mastodon_api/views/scheduled_activity_view_test.exs +++ b/test/web/mastodon_api/views/scheduled_activity_view_test.exs @@ -14,7 +14,7 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityViewTest do    test "A scheduled activity with a media attachment" do      user = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => "hi"}) +    {:ok, activity} = CommonAPI.post(user, %{status: "hi"})      scheduled_at =        NaiveDateTime.utc_now() @@ -47,7 +47,7 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityViewTest do      expected = %{        id: to_string(scheduled_activity.id),        media_attachments: -        %{"media_ids" => [upload.id]} +        %{media_ids: [upload.id]}          |> Utils.attachments_from_ids()          |> Enum.map(&StatusView.render("attachment.json", %{attachment: &1})),        params: %{ diff --git a/test/web/mastodon_api/views/status_view_test.exs b/test/web/mastodon_api/views/status_view_test.exs index 3e1812a1f..70d829979 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -12,12 +12,15 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do    alias Pleroma.Object    alias Pleroma.Repo    alias Pleroma.User +  alias Pleroma.UserRelationship    alias Pleroma.Web.CommonAPI    alias Pleroma.Web.CommonAPI.Utils    alias Pleroma.Web.MastodonAPI.AccountView    alias Pleroma.Web.MastodonAPI.StatusView +    import Pleroma.Factory    import Tesla.Mock +  import OpenApiSpex.TestAssertions    setup do      mock(fn env -> apply(HttpRequestMock, :request, [env]) end) @@ -28,14 +31,16 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      user = insert(:user)      other_user = insert(:user)      third_user = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => "dae cofe??"}) +    {:ok, activity} = CommonAPI.post(user, %{status: "dae cofe??"}) -    {:ok, _, _} = CommonAPI.react_with_emoji(activity.id, user, "☕") -    {:ok, _, _} = CommonAPI.react_with_emoji(activity.id, third_user, "🍵") -    {:ok, _, _} = CommonAPI.react_with_emoji(activity.id, other_user, "☕") +    {:ok, _} = CommonAPI.react_with_emoji(activity.id, user, "☕") +    {:ok, _} = CommonAPI.react_with_emoji(activity.id, third_user, "🍵") +    {:ok, _} = CommonAPI.react_with_emoji(activity.id, other_user, "☕")      activity = Repo.get(Activity, activity.id)      status = StatusView.render("show.json", activity: activity) +    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec()) +      assert status[:pleroma][:emoji_reactions] == [               %{name: "☕", count: 2, me: false},               %{name: "🍵", count: 1, me: false} @@ -43,16 +48,35 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      status = StatusView.render("show.json", activity: activity, for: user) +    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec()) +      assert status[:pleroma][:emoji_reactions] == [               %{name: "☕", count: 2, me: true},               %{name: "🍵", count: 1, me: false}             ]    end +  test "works correctly with badly formatted emojis" do +    user = insert(:user) +    {:ok, activity} = CommonAPI.post(user, %{status: "yo"}) + +    activity +    |> Object.normalize(false) +    |> Object.update_data(%{"reactions" => %{"☕" => [user.ap_id], "x" => 1}}) + +    activity = Activity.get_by_id(activity.id) + +    status = StatusView.render("show.json", activity: activity, for: user) + +    assert status[:pleroma][:emoji_reactions] == [ +             %{name: "☕", count: 1, me: true} +           ] +  end +    test "loads and returns the direct conversation id when given the `with_direct_conversation_id` option" do      user = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!", "visibility" => "direct"}) +    {:ok, activity} = CommonAPI.post(user, %{status: "Hey @shp!", visibility: "direct"})      [participation] = Participation.for_user(user)      status = @@ -66,12 +90,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      status = StatusView.render("show.json", activity: activity, for: user)      assert status[:pleroma][:direct_conversation_id] == nil +    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())    end    test "returns the direct conversation id when given the `direct_conversation_id` option" do      user = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!", "visibility" => "direct"}) +    {:ok, activity} = CommonAPI.post(user, %{status: "Hey @shp!", visibility: "direct"})      [participation] = Participation.for_user(user)      status = @@ -82,16 +107,34 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do        )      assert status[:pleroma][:direct_conversation_id] == participation.id +    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())    end    test "returns a temporary ap_id based user for activities missing db users" do      user = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!", "visibility" => "direct"}) +    {:ok, activity} = CommonAPI.post(user, %{status: "Hey @shp!", visibility: "direct"})      Repo.delete(user)      Cachex.clear(:user_cache) +    finger_url = +      "https://localhost/.well-known/webfinger?resource=acct:#{user.nickname}@localhost" + +    Tesla.Mock.mock_global(fn +      %{method: :get, url: "http://localhost/.well-known/host-meta"} -> +        %Tesla.Env{status: 404, body: ""} + +      %{method: :get, url: "https://localhost/.well-known/host-meta"} -> +        %Tesla.Env{status: 404, body: ""} + +      %{ +        method: :get, +        url: ^finger_url +      } -> +        %Tesla.Env{status: 404, body: ""} +    end) +      %{account: ms_user} = StatusView.render("show.json", activity: activity)      assert ms_user.acct == "erroruser@example.com" @@ -100,7 +143,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do    test "tries to get a user by nickname if fetching by ap_id doesn't work" do      user = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!", "visibility" => "direct"}) +    {:ok, activity} = CommonAPI.post(user, %{status: "Hey @shp!", visibility: "direct"})      {:ok, user} =        user @@ -112,6 +155,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      result = StatusView.render("show.json", activity: activity)      assert result[:account][:id] == to_string(user.id) +    assert_schema(result, "Status", Pleroma.Web.ApiSpec.spec())    end    test "a note with null content" do @@ -130,6 +174,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      status = StatusView.render("show.json", %{activity: note})      assert status.content == "" +    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())    end    test "a note activity" do @@ -149,12 +194,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do        id: to_string(note.id),        uri: object_data["id"],        url: Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, note), -      account: AccountView.render("show.json", %{user: user}), +      account: AccountView.render("show.json", %{user: user, skip_visibility_check: true}),        in_reply_to_id: nil,        in_reply_to_account_id: nil,        card: nil,        reblog: nil,        content: HTML.filter_tags(object_data["content"]), +      text: nil,        created_at: created_at,        reblogs_count: 0,        replies_count: 0, @@ -198,11 +244,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do          expires_at: nil,          direct_conversation_id: nil,          thread_muted: false, -        emoji_reactions: [] +        emoji_reactions: [], +        parent_visible: false        }      }      assert status == expected +    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())    end    test "tells if the message is muted for some reason" do @@ -211,14 +259,25 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      {:ok, _user_relationships} = User.mute(user, other_user) -    {:ok, activity} = CommonAPI.post(other_user, %{"status" => "test"}) -    status = StatusView.render("show.json", %{activity: activity}) +    {:ok, activity} = CommonAPI.post(other_user, %{status: "test"}) + +    relationships_opt = UserRelationship.view_relationships_option(user, [other_user]) +    opts = %{activity: activity} +    status = StatusView.render("show.json", opts)      assert status.muted == false +    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec()) -    status = StatusView.render("show.json", %{activity: activity, for: user}) +    status = StatusView.render("show.json", Map.put(opts, :relationships, relationships_opt)) +    assert status.muted == false +    for_opts = %{activity: activity, for: user} +    status = StatusView.render("show.json", for_opts)      assert status.muted == true + +    status = StatusView.render("show.json", Map.put(for_opts, :relationships, relationships_opt)) +    assert status.muted == true +    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())    end    test "tells if the message is thread muted" do @@ -227,7 +286,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      {:ok, _user_relationships} = User.mute(user, other_user) -    {:ok, activity} = CommonAPI.post(other_user, %{"status" => "test"}) +    {:ok, activity} = CommonAPI.post(other_user, %{status: "test"})      status = StatusView.render("show.json", %{activity: activity, for: user})      assert status.pleroma.thread_muted == false @@ -242,7 +301,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do    test "tells if the status is bookmarked" do      user = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => "Cute girls doing cute things"}) +    {:ok, activity} = CommonAPI.post(user, %{status: "Cute girls doing cute things"})      status = StatusView.render("show.json", %{activity: activity})      assert status.bookmarked == false @@ -264,8 +323,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      note = insert(:note_activity)      user = insert(:user) -    {:ok, activity} = -      CommonAPI.post(user, %{"status" => "he", "in_reply_to_status_id" => note.id}) +    {:ok, activity} = CommonAPI.post(user, %{status: "he", in_reply_to_status_id: note.id})      status = StatusView.render("show.json", %{activity: activity}) @@ -280,12 +338,14 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      user = insert(:user)      mentioned = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => "hi @#{mentioned.nickname}"}) +    {:ok, activity} = CommonAPI.post(user, %{status: "hi @#{mentioned.nickname}"})      status = StatusView.render("show.json", %{activity: activity})      assert status.mentions ==               Enum.map([mentioned], fn u -> AccountView.render("mention.json", %{user: u}) end) + +    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())    end    test "create mentions from the 'to' field" do @@ -374,11 +434,17 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do        pleroma: %{mime_type: "image/png"}      } +    api_spec = Pleroma.Web.ApiSpec.spec() +      assert expected == StatusView.render("attachment.json", %{attachment: object}) +    assert_schema(expected, "Attachment", api_spec)      # If theres a "id", use that instead of the generated one      object = Map.put(object, "id", 2) -    assert %{id: "2"} = StatusView.render("attachment.json", %{attachment: object}) +    result = StatusView.render("attachment.json", %{attachment: object}) + +    assert %{id: "2"} = result +    assert_schema(result, "Attachment", api_spec)    end    test "put the url advertised in the Activity in to the url attribute" do @@ -395,13 +461,14 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      user = insert(:user)      activity = insert(:note_activity) -    {:ok, reblog, _} = CommonAPI.repeat(activity.id, user) +    {:ok, reblog} = CommonAPI.repeat(activity.id, user)      represented = StatusView.render("show.json", %{for: user, activity: reblog})      assert represented[:id] == to_string(reblog.id)      assert represented[:reblog][:id] == to_string(activity.id)      assert represented[:emojis] == [] +    assert_schema(represented, "Status", Pleroma.Web.ApiSpec.spec())    end    test "a peertube video" do @@ -418,6 +485,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      assert represented[:id] == to_string(activity.id)      assert length(represented[:media_attachments]) == 1 +    assert_schema(represented, "Status", Pleroma.Web.ApiSpec.spec())    end    test "funkwhale audio" do @@ -449,6 +517,12 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      represented = StatusView.render("show.json", %{for: user, activity: activity})      assert represented[:id] == to_string(activity.id) + +    assert represented[:url] == +             "https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39" + +    assert represented[:content] == +             "<p><a href=\"https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39\">Mobilizon Launching Party</a></p><p>Mobilizon is now federated! 🎉</p><p></p><p>You can view this event from other instances if they are subscribed to mobilizon.org, and soon directly from Mastodon and Pleroma. It is possible that you may see some comments from other instances, including Mastodon ones, just below.</p><p></p><p>With a Mobilizon account on an instance, you may <strong>participate</strong> at events from other instances and <strong>add comments</strong> on events.</p><p></p><p>Of course, it's still <u>a work in progress</u>: if reports made from an instance on events and comments can be federated, you can't block people right now, and moderators actions are rather limited, but this <strong>will definitely get fixed over time</strong> until first stable version next year.</p><p></p><p>Anyway, if you want to come up with some feedback, head over to our forum or - if you feel you have technical skills and are familiar with it - on our Gitlab repository.</p><p></p><p>Also, to people that want to set Mobilizon themselves even though we really don't advise to do that for now, we have a little documentation but it's quite the early days and you'll probably need some help. No worries, you can chat with us on our Forum or though our Matrix channel.</p><p></p><p>Check our website for more informations and follow us on Twitter or Mastodon.</p>"    end    describe "build_tags/1" do @@ -527,39 +601,37 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      end    end -  test "embeds a relationship in the account" do +  test "does not embed a relationship in the account" do      user = insert(:user)      other_user = insert(:user)      {:ok, activity} =        CommonAPI.post(user, %{ -        "status" => "drink more water" +        status: "drink more water"        })      result = StatusView.render("show.json", %{activity: activity, for: other_user}) -    assert result[:account][:pleroma][:relationship] == -             AccountView.render("relationship.json", %{user: other_user, target: user}) +    assert result[:account][:pleroma][:relationship] == %{} +    assert_schema(result, "Status", Pleroma.Web.ApiSpec.spec())    end -  test "embeds a relationship in the account in reposts" do +  test "does not embed a relationship in the account in reposts" do      user = insert(:user)      other_user = insert(:user)      {:ok, activity} =        CommonAPI.post(user, %{ -        "status" => "˙˙ɐʎns" +        status: "˙˙ɐʎns"        }) -    {:ok, activity, _object} = CommonAPI.repeat(activity.id, other_user) +    {:ok, activity} = CommonAPI.repeat(activity.id, other_user)      result = StatusView.render("show.json", %{activity: activity, for: user}) -    assert result[:account][:pleroma][:relationship] == -             AccountView.render("relationship.json", %{user: user, target: other_user}) - -    assert result[:reblog][:account][:pleroma][:relationship] == -             AccountView.render("relationship.json", %{user: user, target: user}) +    assert result[:account][:pleroma][:relationship] == %{} +    assert result[:reblog][:account][:pleroma][:relationship] == %{} +    assert_schema(result, "Status", Pleroma.Web.ApiSpec.spec())    end    test "visibility/list" do @@ -567,20 +639,26 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      {:ok, list} = Pleroma.List.create("foo", user) -    {:ok, activity} = -      CommonAPI.post(user, %{"status" => "foobar", "visibility" => "list:#{list.id}"}) +    {:ok, activity} = CommonAPI.post(user, %{status: "foobar", visibility: "list:#{list.id}"})      status = StatusView.render("show.json", activity: activity)      assert status.visibility == "list"    end -  test "successfully renders a Listen activity (pleroma extension)" do -    listen_activity = insert(:listen) +  test "has a field for parent visibility" do +    user = insert(:user) +    poster = insert(:user) + +    {:ok, invisible} = CommonAPI.post(poster, %{status: "hey", visibility: "private"}) + +    {:ok, visible} = +      CommonAPI.post(poster, %{status: "hey", visibility: "private", in_reply_to_id: invisible.id}) -    status = StatusView.render("listen.json", activity: listen_activity) +    status = StatusView.render("show.json", activity: visible, for: user) +    refute status.pleroma.parent_visible -    assert status.length == listen_activity.data["object"]["length"] -    assert status.title == listen_activity.data["object"]["title"] +    status = StatusView.render("show.json", activity: visible, for: poster) +    assert status.pleroma.parent_visible    end  end diff --git a/test/web/mastodon_api/views/push_subscription_view_test.exs b/test/web/mastodon_api/views/subscription_view_test.exs index 10c6082a5..981524c0e 100644 --- a/test/web/mastodon_api/views/push_subscription_view_test.exs +++ b/test/web/mastodon_api/views/subscription_view_test.exs @@ -2,10 +2,10 @@  # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>  # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.MastodonAPI.PushSubscriptionViewTest do +defmodule Pleroma.Web.MastodonAPI.SubscriptionViewTest do    use Pleroma.DataCase    import Pleroma.Factory -  alias Pleroma.Web.MastodonAPI.PushSubscriptionView, as: View +  alias Pleroma.Web.MastodonAPI.SubscriptionView, as: View    alias Pleroma.Web.Push    test "Represent a subscription" do @@ -18,6 +18,6 @@ defmodule Pleroma.Web.MastodonAPI.PushSubscriptionViewTest do        server_key: Keyword.get(Push.vapid_config(), :public_key)      } -    assert expected == View.render("push_subscription.json", %{subscription: subscription}) +    assert expected == View.render("show.json", %{subscription: subscription})    end  end  | 
