diff options
| author | lain <lain@soykaf.club> | 2019-10-06 08:11:47 +0000 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2019-10-06 08:11:47 +0000 | 
| commit | 61097ba6ab1f40f8a885f1adc96455b3c82cfd9b (patch) | |
| tree | 4ead08dab6a485b3020fb9f30663e4b4466698ae /test/web | |
| parent | 1ed8fbc4d96c1d44ab968d6aa1b0069c55e44626 (diff) | |
| parent | 9e34919dcdbeedf8eb623dc86b05f63ef44d8859 (diff) | |
| download | pleroma-61097ba6ab1f40f8a885f1adc96455b3c82cfd9b.tar.gz pleroma-61097ba6ab1f40f8a885f1adc96455b3c82cfd9b.zip  | |
Merge branch 'develop' into 'reactions'
# Conflicts:
#   CHANGELOG.md
Diffstat (limited to 'test/web')
9 files changed, 273 insertions, 93 deletions
diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index a9544caf2..c8e205afc 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -479,6 +479,33 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        assert Activity.get_create_by_object_ap_id(data["object"]).id == activity.id      end +    test "it works for incoming announces with an inlined activity" do +      data = +        File.read!("test/fixtures/mastodon-announce-private.json") +        |> Poison.decode!() + +      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + +      assert data["actor"] == "http://mastodon.example.org/users/admin" +      assert data["type"] == "Announce" + +      assert data["id"] == +               "http://mastodon.example.org/users/admin/statuses/99542391527669785/activity" + +      object = Object.normalize(data["object"]) + +      assert object.data["id"] == "http://mastodon.example.org/@admin/99541947525187368" +      assert object.data["content"] == "this is a private toot" +    end + +    test "it rejects incoming announces with an inlined activity from another origin" do +      data = +        File.read!("test/fixtures/bogus-mastodon-announce.json") +        |> Poison.decode!() + +      assert :error = Transmogrifier.handle_incoming(data) +    end +      test "it does not clobber the addressing on announce activities" do        user = insert(:user)        {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"}) @@ -597,6 +624,8 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(update_data) +      assert data["id"] == update_data["id"] +        user = User.get_cached_by_ap_id(data["actor"])        assert user.name == "gargle" diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index b9e785885..cc1d122d9 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -14,6 +14,8 @@ defmodule Pleroma.Web.CommonAPITest do    import Pleroma.Factory +  require Pleroma.Constants +    clear_config([:instance, :safe_dm_mentions])    clear_config([:instance, :limit])    clear_config([:instance, :max_pinned_statuses]) @@ -96,11 +98,13 @@ defmodule Pleroma.Web.CommonAPITest do    test "it adds emoji when updating profiles" do      user = insert(:user, %{name: ":firefox:"}) -    CommonAPI.update(user) +    {:ok, activity} = CommonAPI.update(user)      user = User.get_cached_by_ap_id(user.ap_id)      [firefox] = user.info.source_data["tag"]      assert firefox["name"] == ":firefox:" + +    assert Pleroma.Constants.as_public() in activity.recipients    end    describe "posting" do diff --git a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs index 560f55137..599cd61c8 100644 --- a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs +++ b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs @@ -328,7 +328,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        account =          conn          |> assign(:user, user) -        |> patch("/api/v1/accounts/update_credentials", %{"fields" => fields}) +        |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields})          |> json_response(200)        assert account["fields"] == [ @@ -344,6 +344,35 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do                 %{"name" => "link", "value" => "cofe.io"}               ] +      fields = +        [ +          "fields_attributes[1][name]=link", +          "fields_attributes[1][value]=cofe.io", +          "fields_attributes[0][name]=<a href=\"http://google.com\">foo</a>", +          "fields_attributes[0][value]=bar" +        ] +        |> Enum.join("&") + +      account = +        conn +        |> put_req_header("content-type", "application/x-www-form-urlencoded") +        |> assign(:user, user) +        |> patch("/api/v1/accounts/update_credentials", fields) +        |> json_response(200) + +      assert account["fields"] == [ +               %{"name" => "foo", "value" => "bar"}, +               %{"name" => "link", "value" => ~S(<a href="http://cofe.io" rel="ugc">cofe.io</a>)} +             ] + +      assert account["source"]["fields"] == [ +               %{ +                 "name" => "<a href=\"http://google.com\">foo</a>", +                 "value" => "bar" +               }, +               %{"name" => "link", "value" => "cofe.io"} +             ] +        name_limit = Pleroma.Config.get([:instance, :account_field_name_length])        value_limit = Pleroma.Config.get([:instance, :account_field_value_length]) @@ -354,7 +383,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        assert %{"error" => "Invalid request"} ==                 conn                 |> assign(:user, user) -               |> patch("/api/v1/accounts/update_credentials", %{"fields" => fields}) +               |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields})                 |> json_response(403)        long_name = Enum.map(0..name_limit, fn _ -> "x" end) |> Enum.join() @@ -364,7 +393,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        assert %{"error" => "Invalid request"} ==                 conn                 |> assign(:user, user) -               |> patch("/api/v1/accounts/update_credentials", %{"fields" => fields}) +               |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields})                 |> json_response(403)        Pleroma.Config.put([:instance, :max_account_fields], 1) @@ -377,8 +406,23 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        assert %{"error" => "Invalid request"} ==                 conn                 |> assign(:user, user) -               |> patch("/api/v1/accounts/update_credentials", %{"fields" => fields}) +               |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields})                 |> json_response(403) + +      fields = [ +        %{"name" => "foo", "value" => ""}, +        %{"name" => "", "value" => "bar"} +      ] + +      account = +        conn +        |> assign(:user, user) +        |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) +        |> json_response(200) + +      assert account["fields"] == [ +               %{"name" => "foo", "value" => ""} +             ]      end    end  end diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 8c8017838..6a59c3d94 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -849,4 +849,34 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        assert [] = json_response(conn, 200)      end    end + +  test "getting a list of mutes", %{conn: conn} do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, user} = User.mute(user, other_user) + +    conn = +      conn +      |> assign(:user, user) +      |> get("/api/v1/mutes") + +    other_user_id = to_string(other_user.id) +    assert [%{"id" => ^other_user_id}] = json_response(conn, 200) +  end + +  test "getting a list of blocks", %{conn: conn} do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, user} = User.block(user, other_user) + +    conn = +      conn +      |> assign(:user, user) +      |> get("/api/v1/blocks") + +    other_user_id = to_string(other_user.id) +    assert [%{"id" => ^other_user_id}] = json_response(conn, 200) +  end  end diff --git a/test/web/mastodon_api/controllers/conversation_controller_test.exs b/test/web/mastodon_api/controllers/conversation_controller_test.exs index 7117fc76a..a308a7620 100644 --- a/test/web/mastodon_api/controllers/conversation_controller_test.exs +++ b/test/web/mastodon_api/controllers/conversation_controller_test.exs @@ -10,19 +10,23 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do    import Pleroma.Factory -  test "Conversations", %{conn: conn} do +  test "returns a list of conversations", %{conn: conn} do      user_one = insert(:user)      user_two = insert(:user)      user_three = insert(:user)      {:ok, user_two} = User.follow(user_two, user_one) +    assert User.get_cached_by_id(user_two.id).info.unread_conversation_count == 0 +      {:ok, direct} =        CommonAPI.post(user_one, %{          "status" => "Hi @#{user_two.nickname}, @#{user_three.nickname}!",          "visibility" => "direct"        }) +    assert User.get_cached_by_id(user_two.id).info.unread_conversation_count == 1 +      {:ok, _follower_only} =        CommonAPI.post(user_one, %{          "status" => "Hi @#{user_two.nickname}!", @@ -52,23 +56,100 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do      assert is_binary(res_id)      assert unread == true      assert res_last_status["id"] == direct.id +    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 1 +  end -    # Apparently undocumented API endpoint -    res_conn = +  test "updates the last_status on reply", %{conn: conn} do +    user_one = insert(:user) +    user_two = insert(:user) + +    {:ok, direct} = +      CommonAPI.post(user_one, %{ +        "status" => "Hi @#{user_two.nickname}", +        "visibility" => "direct" +      }) + +    {:ok, direct_reply} = +      CommonAPI.post(user_two, %{ +        "status" => "reply", +        "visibility" => "direct", +        "in_reply_to_status_id" => direct.id +      }) + +    [%{"last_status" => res_last_status}] =        conn        |> assign(:user, user_one) -      |> post("/api/v1/conversations/#{res_id}/read") +      |> get("/api/v1/conversations") +      |> json_response(200) -    assert response = json_response(res_conn, 200) -    assert length(response["accounts"]) == 2 -    assert response["last_status"]["id"] == direct.id -    assert response["unread"] == false +    assert res_last_status["id"] == direct_reply.id +  end + +  test "the user marks a conversation as read", %{conn: conn} do +    user_one = insert(:user) +    user_two = insert(:user) + +    {:ok, direct} = +      CommonAPI.post(user_one, %{ +        "status" => "Hi @#{user_two.nickname}", +        "visibility" => "direct" +      }) + +    [%{"id" => direct_conversation_id, "unread" => true}] = +      conn +      |> assign(:user, user_one) +      |> get("/api/v1/conversations") +      |> json_response(200) + +    %{"unread" => false} = +      conn +      |> assign(:user, user_one) +      |> post("/api/v1/conversations/#{direct_conversation_id}/read") +      |> json_response(200) + +    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 0 + +    # The conversation is marked as unread on reply +    {:ok, _} = +      CommonAPI.post(user_two, %{ +        "status" => "reply", +        "visibility" => "direct", +        "in_reply_to_status_id" => direct.id +      }) + +    [%{"unread" => true}] = +      conn +      |> assign(:user, user_one) +      |> get("/api/v1/conversations") +      |> json_response(200) + +    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 1 + +    # A reply doesn't increment the user's unread_conversation_count if the conversation is unread +    {:ok, _} = +      CommonAPI.post(user_two, %{ +        "status" => "reply", +        "visibility" => "direct", +        "in_reply_to_status_id" => direct.id +      }) + +    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 1 +  end + +  test "(vanilla) Mastodon frontend behaviour", %{conn: conn} do +    user_one = insert(:user) +    user_two = insert(:user) + +    {:ok, direct} = +      CommonAPI.post(user_one, %{ +        "status" => "Hi @#{user_two.nickname}!", +        "visibility" => "direct" +      }) -    # (vanilla) Mastodon frontend behaviour      res_conn =        conn        |> assign(:user, user_one) -      |> get("/api/v1/statuses/#{res_last_status["id"]}/context") +      |> get("/api/v1/statuses/#{direct.id}/context")      assert %{"ancestors" => [], "descendants" => []} == json_response(res_conn, 200)    end diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index b648ad6ff..a4bbfe055 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -1242,4 +1242,51 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do               "descendants" => [%{"id" => ^id4}, %{"id" => ^id5}]             } = response    end + +  test "returns the favorites of a user", %{conn: conn} do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, _} = CommonAPI.post(other_user, %{"status" => "bla"}) +    {:ok, activity} = CommonAPI.post(other_user, %{"status" => "traps are happy"}) + +    {:ok, _, _} = CommonAPI.favorite(activity.id, user) + +    first_conn = +      conn +      |> assign(:user, user) +      |> get("/api/v1/favourites") + +    assert [status] = json_response(first_conn, 200) +    assert status["id"] == to_string(activity.id) + +    assert [{"link", _link_header}] = +             Enum.filter(first_conn.resp_headers, fn element -> match?({"link", _}, element) end) + +    # Honours query params +    {:ok, second_activity} = +      CommonAPI.post(other_user, %{ +        "status" => +          "Trees Are Never Sad Look At Them Every Once In Awhile They're Quite Beautiful." +      }) + +    {:ok, _, _} = CommonAPI.favorite(second_activity.id, user) + +    last_like = status["id"] + +    second_conn = +      conn +      |> assign(:user, user) +      |> get("/api/v1/favourites?since_id=#{last_like}") + +    assert [second_status] = json_response(second_conn, 200) +    assert second_status["id"] == to_string(second_activity.id) + +    third_conn = +      conn +      |> assign(:user, user) +      |> get("/api/v1/favourites?limit=0") + +    assert [] = json_response(third_conn, 200) +  end  end diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index c03003dac..42a8779c0 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -7,7 +7,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do    alias Pleroma.Notification    alias Pleroma.Repo -  alias Pleroma.User    alias Pleroma.Web.CommonAPI    import Pleroma.Factory @@ -20,36 +19,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do    clear_config([:rich_media, :enabled]) -  test "getting a list of mutes", %{conn: conn} do -    user = insert(:user) -    other_user = insert(:user) - -    {:ok, user} = User.mute(user, other_user) - -    conn = -      conn -      |> assign(:user, user) -      |> get("/api/v1/mutes") - -    other_user_id = to_string(other_user.id) -    assert [%{"id" => ^other_user_id}] = json_response(conn, 200) -  end - -  test "getting a list of blocks", %{conn: conn} do -    user = insert(:user) -    other_user = insert(:user) - -    {:ok, user} = User.block(user, other_user) - -    conn = -      conn -      |> assign(:user, user) -      |> get("/api/v1/blocks") - -    other_user_id = to_string(other_user.id) -    assert [%{"id" => ^other_user_id}] = json_response(conn, 200) -  end -    test "unimplemented follow_requests, blocks, domain blocks" do      user = insert(:user) @@ -64,53 +33,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do      end)    end -  test "returns the favorites of a user", %{conn: conn} do -    user = insert(:user) -    other_user = insert(:user) - -    {:ok, _} = CommonAPI.post(other_user, %{"status" => "bla"}) -    {:ok, activity} = CommonAPI.post(other_user, %{"status" => "traps are happy"}) - -    {:ok, _, _} = CommonAPI.favorite(activity.id, user) - -    first_conn = -      conn -      |> assign(:user, user) -      |> get("/api/v1/favourites") - -    assert [status] = json_response(first_conn, 200) -    assert status["id"] == to_string(activity.id) - -    assert [{"link", _link_header}] = -             Enum.filter(first_conn.resp_headers, fn element -> match?({"link", _}, element) end) - -    # Honours query params -    {:ok, second_activity} = -      CommonAPI.post(other_user, %{ -        "status" => -          "Trees Are Never Sad Look At Them Every Once In Awhile They're Quite Beautiful." -      }) - -    {:ok, _, _} = CommonAPI.favorite(second_activity.id, user) - -    last_like = status["id"] - -    second_conn = -      conn -      |> assign(:user, user) -      |> get("/api/v1/favourites?since_id=#{last_like}") - -    assert [second_status] = json_response(second_conn, 200) -    assert second_status["id"] == to_string(second_activity.id) - -    third_conn = -      conn -      |> assign(:user, user) -      |> get("/api/v1/favourites?limit=0") - -    assert [] = json_response(third_conn, 200) -  end -    describe "link headers" do      test "preserves parameters in link headers", %{conn: conn} do        user = insert(:user) diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 62b2ab7e3..b7a4938a6 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -418,6 +418,27 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do                 following_count: 1               } = AccountView.render("show.json", %{user: user, for: user})      end + +    test "shows unread_conversation_count only to the account owner" do +      user = insert(:user) +      other_user = insert(:user) + +      {:ok, _activity} = +        CommonAPI.post(user, %{ +          "status" => "Hey @#{other_user.nickname}.", +          "visibility" => "direct" +        }) + +      user = User.get_cached_by_ap_id(user.ap_id) + +      assert AccountView.render("show.json", %{user: user, for: other_user})[:pleroma][ +               :unread_conversation_count +             ] == nil + +      assert AccountView.render("show.json", %{user: user, for: user})[:pleroma][ +               :unread_conversation_count +             ] == 1 +    end    end    describe "follow requests counter" do diff --git a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs index 3a5dbdeea..44ea85b45 100644 --- a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs @@ -9,6 +9,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do    alias Pleroma.Notification    alias Pleroma.Object    alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.Web.CommonAPI    import Pleroma.Factory @@ -133,6 +134,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do      participation = Repo.preload(participation, :recipients) +    user = User.get_cached_by_id(user.id)      assert [user] == participation.recipients      assert other_user not in participation.recipients  | 
