diff options
| author | Egor Kislitsyn <egor@kislitsyn.com> | 2019-02-11 13:54:21 +0700 | 
|---|---|---|
| committer | Egor Kislitsyn <egor@kislitsyn.com> | 2019-02-11 13:54:21 +0700 | 
| commit | 305d2194136d4560e02c110d528164034d3727b2 (patch) | |
| tree | 40510e1c4dc0140ff16e2fdc483da64c83b7077c /test | |
| parent | 5b1d7c3c5672af065af503891d156b6e0cf5a8c1 (diff) | |
| parent | 06c4935c11fc58f5ede18706bc46dcc502e64052 (diff) | |
| download | pleroma-305d2194136d4560e02c110d528164034d3727b2.tar.gz pleroma-305d2194136d4560e02c110d528164034d3727b2.zip | |
Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into feature/jobs
# Conflicts:
#	lib/pleroma/web/federator/federator.ex
#	lib/pleroma/web/websub/websub.ex
Diffstat (limited to 'test')
| -rw-r--r-- | test/object_test.exs | 28 | ||||
| -rw-r--r-- | test/user_test.exs | 6 | ||||
| -rw-r--r-- | test/web/activity_pub/activity_pub_controller_test.exs | 4 | ||||
| -rw-r--r-- | test/web/activity_pub/mrf/keyword_policy_test.exs | 111 | ||||
| -rw-r--r-- | test/web/mastodon_api/mastodon_api_controller_test.exs | 8 | ||||
| -rw-r--r-- | test/web/mastodon_api/status_view_test.exs | 55 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_controller_test.exs | 58 | ||||
| -rw-r--r-- | test/web/twitter_api/views/user_view_test.exs | 24 | 
8 files changed, 269 insertions, 25 deletions
| diff --git a/test/object_test.exs b/test/object_test.exs index 72194975d..ab6431012 100644 --- a/test/object_test.exs +++ b/test/object_test.exs @@ -57,4 +57,32 @@ defmodule Pleroma.ObjectTest do        assert cached_object.data["type"] == "Tombstone"      end    end + +  describe "insert_or_get" do +    test "inserting the same object twice (by id) just returns the original object" do +      data = %{data: %{"id" => Ecto.UUID.generate()}} +      cng = Object.change(%Object{}, data) +      {:ok, object} = Object.insert_or_get(cng) +      {:ok, second_object} = Object.insert_or_get(cng) + +      Cachex.clear(:object_cache) +      {:ok, third_object} = Object.insert_or_get(cng) + +      assert object == second_object +      assert object == third_object +    end +  end + +  describe "create" do +    test "inserts an object for a given data set" do +      data = %{"id" => Ecto.UUID.generate()} + +      {:ok, object} = Object.create(data) +      assert object.data["id"] == data["id"] + +      # Works when doing it twice. +      {:ok, object} = Object.create(data) +      assert object.data["id"] == data["id"] +    end +  end  end diff --git a/test/user_test.exs b/test/user_test.exs index 98d3bc464..523ab1ea4 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -53,16 +53,20 @@ defmodule Pleroma.UserTest do      followed_zero = insert(:user)      followed_one = insert(:user)      followed_two = insert(:user) +    blocked = insert(:user)      not_followed = insert(:user) +    {:ok, user} = User.block(user, blocked) +      {:ok, user} = User.follow(user, followed_zero) -    {:ok, user} = User.follow_all(user, [followed_one, followed_two]) +    {:ok, user} = User.follow_all(user, [followed_one, followed_two, blocked])      assert User.following?(user, followed_one)      assert User.following?(user, followed_two)      assert User.following?(user, followed_zero)      refute User.following?(user, not_followed) +    refute User.following?(user, blocked)    end    test "follow_all follows mutliple users without duplicating" do diff --git a/test/web/activity_pub/activity_pub_controller_test.exs b/test/web/activity_pub/activity_pub_controller_test.exs index 0a0103793..570bee6b3 100644 --- a/test/web/activity_pub/activity_pub_controller_test.exs +++ b/test/web/activity_pub/activity_pub_controller_test.exs @@ -441,8 +441,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do        assert result["first"]["orderedItems"] == [user_two.ap_id]      end -    test "it returns returns empty if the user has 'hide_followings' set", %{conn: conn} do -      user = insert(:user, %{info: %{hide_followings: true}}) +    test "it returns returns empty if the user has 'hide_follows' set", %{conn: conn} do +      user = insert(:user, %{info: %{hide_follows: true}})        user_two = insert(:user)        User.follow(user, user_two) diff --git a/test/web/activity_pub/mrf/keyword_policy_test.exs b/test/web/activity_pub/mrf/keyword_policy_test.exs new file mode 100644 index 000000000..67a5858d7 --- /dev/null +++ b/test/web/activity_pub/mrf/keyword_policy_test.exs @@ -0,0 +1,111 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicyTest do +  use Pleroma.DataCase + +  alias Pleroma.Web.ActivityPub.MRF.KeywordPolicy + +  setup do +    Pleroma.Config.put([:mrf_keyword], %{reject: [], federated_timeline_removal: [], replace: []}) +  end + +  describe "rejecting based on keywords" do +    test "rejects if string matches" do +      Pleroma.Config.put([:mrf_keyword, :reject], ["pun"]) + +      message = %{ +        "type" => "Create", +        "object" => %{"content" => "just a daily reminder that compLAINer is a good pun"} +      } + +      assert {:reject, nil} == KeywordPolicy.filter(message) +    end + +    test "rejects if regex matches" do +      Pleroma.Config.put([:mrf_keyword, :reject], [~r/comp[lL][aA][iI][nN]er/]) + +      assert true == +               Enum.all?(["complainer", "compLainer", "compLAiNer", "compLAINer"], fn content -> +                 message = %{ +                   "type" => "Create", +                   "object" => %{ +                     "content" => "just a daily reminder that #{content} is a good pun" +                   } +                 } + +                 {:reject, nil} == KeywordPolicy.filter(message) +               end) +    end +  end + +  describe "delisting from ftl based on keywords" do +    test "delists if string matches" do +      Pleroma.Config.put([:mrf_keyword, :federated_timeline_removal], ["pun"]) + +      message = %{ +        "to" => ["https://www.w3.org/ns/activitystreams#Public"], +        "type" => "Create", +        "object" => %{"content" => "just a daily reminder that compLAINer is a good pun"} +      } + +      {:ok, result} = KeywordPolicy.filter(message) +      assert ["https://www.w3.org/ns/activitystreams#Public"] == result["cc"] +      refute ["https://www.w3.org/ns/activitystreams#Public"] == result["to"] +    end + +    test "delists if regex matches" do +      Pleroma.Config.put([:mrf_keyword, :federated_timeline_removal], [~r/comp[lL][aA][iI][nN]er/]) + +      assert true == +               Enum.all?(["complainer", "compLainer", "compLAiNer", "compLAINer"], fn content -> +                 message = %{ +                   "type" => "Create", +                   "to" => ["https://www.w3.org/ns/activitystreams#Public"], +                   "object" => %{ +                     "content" => "just a daily reminder that #{content} is a good pun" +                   } +                 } + +                 {:ok, result} = KeywordPolicy.filter(message) + +                 ["https://www.w3.org/ns/activitystreams#Public"] == result["cc"] and +                   not (["https://www.w3.org/ns/activitystreams#Public"] == result["to"]) +               end) +    end +  end + +  describe "replacing keywords" do +    test "replaces keyword if string matches" do +      Pleroma.Config.put([:mrf_keyword, :replace], [{"opensource", "free software"}]) + +      message = %{ +        "type" => "Create", +        "to" => ["https://www.w3.org/ns/activitystreams#Public"], +        "object" => %{"content" => "ZFS is opensource"} +      } + +      {:ok, %{"object" => %{"content" => result}}} = KeywordPolicy.filter(message) +      assert result == "ZFS is free software" +    end + +    test "replaces keyword if regex matches" do +      Pleroma.Config.put([:mrf_keyword, :replace], [ +        {~r/open(-|\s)?source\s?(software)?/, "free software"} +      ]) + +      assert true == +               Enum.all?(["opensource", "open-source", "open source"], fn content -> +                 message = %{ +                   "type" => "Create", +                   "to" => ["https://www.w3.org/ns/activitystreams#Public"], +                   "object" => %{"content" => "ZFS is #{content}"} +                 } + +                 {:ok, %{"object" => %{"content" => result}}} = KeywordPolicy.filter(message) +                 result == "ZFS is free software" +               end) +    end +  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 d4e2acae3..f8da86004 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -1139,8 +1139,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do      assert id == to_string(other_user.id)    end -  test "getting following, hide_followings", %{conn: conn} do -    user = insert(:user, %{info: %{hide_followings: true}}) +  test "getting following, hide_follows", %{conn: conn} do +    user = insert(:user, %{info: %{hide_follows: true}})      other_user = insert(:user)      {:ok, user} = User.follow(user, other_user) @@ -1151,8 +1151,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do      assert [] == json_response(conn, 200)    end -  test "getting following, hide_followings, same user requesting", %{conn: conn} do -    user = insert(:user, %{info: %{hide_followings: true}}) +  test "getting following, hide_follows, same user requesting", %{conn: conn} do +    user = insert(:user, %{info: %{hide_follows: true}})      other_user = insert(:user)      {:ok, user} = User.follow(user, other_user) diff --git a/test/web/mastodon_api/status_view_test.exs b/test/web/mastodon_api/status_view_test.exs index c6a5783c6..2106253f2 100644 --- a/test/web/mastodon_api/status_view_test.exs +++ b/test/web/mastodon_api/status_view_test.exs @@ -235,4 +235,59 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do               ]      end    end + +  describe "rich media cards" do +    test "a rich media card without a site name renders correctly" do +      page_url = "http://example.com" + +      card = %{ +        url: page_url, +        image: page_url <> "/example.jpg", +        title: "Example website" +      } + +      %{provider_name: "example.com"} = +        StatusView.render("card.json", %{page_url: page_url, rich_media: card}) +    end + +    test "a rich media card without a site name or image renders correctly" do +      page_url = "http://example.com" + +      card = %{ +        url: page_url, +        title: "Example website" +      } + +      %{provider_name: "example.com"} = +        StatusView.render("card.json", %{page_url: page_url, rich_media: card}) +    end + +    test "a rich media card without an image renders correctly" do +      page_url = "http://example.com" + +      card = %{ +        url: page_url, +        site_name: "Example site name", +        title: "Example website" +      } + +      %{provider_name: "Example site name"} = +        StatusView.render("card.json", %{page_url: page_url, rich_media: card}) +    end + +    test "a rich media card with all relevant data renders correctly" do +      page_url = "http://example.com" + +      card = %{ +        url: page_url, +        site_name: "Example site name", +        title: "Example website", +        image: page_url <> "/example.jpg", +        description: "Example description" +      } + +      %{provider_name: "Example site name"} = +        StatusView.render("card.json", %{page_url: page_url, rich_media: card}) +    end +  end  end diff --git a/test/web/twitter_api/twitter_api_controller_test.exs b/test/web/twitter_api/twitter_api_controller_test.exs index 6777354c3..855ae1526 100644 --- a/test/web/twitter_api/twitter_api_controller_test.exs +++ b/test/web/twitter_api/twitter_api_controller_test.exs @@ -62,7 +62,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do          |> post("/api/account/verify_credentials.json")          |> json_response(200) -      assert response == UserView.render("show.json", %{user: user, token: response["token"]}) +      assert response == +               UserView.render("show.json", %{user: user, token: response["token"], for: user})      end    end @@ -107,7 +108,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do          |> post(request_path, %{status: "Nice meme.", visibility: "private"})        assert json_response(conn, 200) == -               ActivityRepresenter.to_map(Repo.one(Activity), %{user: user}) +               ActivityRepresenter.to_map(Repo.one(Activity), %{user: user, for: user})      end    end @@ -418,6 +419,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        assert Enum.at(response, 0) ==                 ActivityRepresenter.to_map(activity, %{                   user: current_user, +                 for: current_user,                   mentioned: [current_user]                 })      end @@ -547,7 +549,9 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        response = json_response(conn, 200)        assert length(response) == 1 -      assert Enum.at(response, 0) == ActivityRepresenter.to_map(activity, %{user: current_user}) + +      assert Enum.at(response, 0) == +               ActivityRepresenter.to_map(activity, %{user: current_user, for: current_user})      end      test "with credentials with user_id", %{conn: conn, user: current_user} do @@ -1257,8 +1261,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do               )      end -    test "it returns empty when hide_followings is set to true", %{conn: conn} do -      user = insert(:user, %{info: %{hide_followings: true}}) +    test "it returns empty when hide_follows is set to true", %{conn: conn} do +      user = insert(:user, %{info: %{hide_follows: true}})        followed_one = insert(:user)        followed_two = insert(:user)        not_followed = insert(:user) @@ -1274,11 +1278,11 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        assert [] == json_response(conn, 200)      end -    test "it returns friends when hide_followings is set to true if the user themselves request it", +    test "it returns friends when hide_follows is set to true if the user themselves request it",           %{             conn: conn           } do -      user = insert(:user, %{info: %{hide_followings: true}}) +      user = insert(:user, %{info: %{hide_follows: true}})        followed_one = insert(:user)        followed_two = insert(:user)        _not_followed = insert(:user) @@ -1366,27 +1370,27 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user})      end -    test "it sets and un-sets hide_followings", %{conn: conn} do +    test "it sets and un-sets hide_follows", %{conn: conn} do        user = insert(:user)        conn        |> assign(:user, user)        |> post("/api/account/update_profile.json", %{ -        "hide_followings" => "true" +        "hide_follows" => "true"        })        user = Repo.get!(User, user.id) -      assert user.info.hide_followings == true +      assert user.info.hide_follows == true        conn =          conn          |> assign(:user, user)          |> post("/api/account/update_profile.json", %{ -          "hide_followings" => "false" +          "hide_follows" => "false"          })        user = Repo.get!(User, user.id) -      assert user.info.hide_followings == false +      assert user.info.hide_follows == false        assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user})      end @@ -1414,6 +1418,30 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user})      end +    test "it sets and un-sets show_role", %{conn: conn} do +      user = insert(:user) + +      conn +      |> assign(:user, user) +      |> post("/api/account/update_profile.json", %{ +        "show_role" => "true" +      }) + +      user = Repo.get!(User, user.id) +      assert user.info.show_role == true + +      conn = +        conn +        |> assign(:user, user) +        |> post("/api/account/update_profile.json", %{ +          "show_role" => "false" +        }) + +      user = Repo.get!(User, user.id) +      assert user.info.show_role == false +      assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user}) +    end +      test "it locks an account", %{conn: conn} do        user = insert(:user) @@ -1814,7 +1842,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        user = refresh_record(user) -      assert json_response(response, 200) == ActivityRepresenter.to_map(activity, %{user: user}) +      assert json_response(response, 200) == +               ActivityRepresenter.to_map(activity, %{user: user, for: user})      end    end @@ -1843,7 +1872,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        user = refresh_record(user) -      assert json_response(response, 200) == ActivityRepresenter.to_map(activity, %{user: user}) +      assert json_response(response, 200) == +               ActivityRepresenter.to_map(activity, %{user: user, for: user})      end    end  end diff --git a/test/web/twitter_api/views/user_view_test.exs b/test/web/twitter_api/views/user_view_test.exs index 0885afaec..95e52ca46 100644 --- a/test/web/twitter_api/views/user_view_test.exs +++ b/test/web/twitter_api/views/user_view_test.exs @@ -100,7 +100,7 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "locked" => false,        "default_scope" => "public",        "no_rich_text" => false, -      "hide_followings" => false, +      "hide_follows" => false,        "hide_followers" => false,        "fields" => [],        "pleroma" => %{ @@ -148,7 +148,7 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "locked" => false,        "default_scope" => "public",        "no_rich_text" => false, -      "hide_followings" => false, +      "hide_follows" => false,        "hide_followers" => false,        "fields" => [],        "pleroma" => %{ @@ -197,7 +197,7 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "locked" => false,        "default_scope" => "public",        "no_rich_text" => false, -      "hide_followings" => false, +      "hide_follows" => false,        "hide_followers" => false,        "fields" => [],        "pleroma" => %{ @@ -214,6 +214,7 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do      represented = UserView.render("show.json", %{user: user, for: user})      assert represented["rights"]["delete_others_notice"] +    assert represented["role"] == "moderator"    end    test "a user that is a admin" do @@ -221,6 +222,21 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do      represented = UserView.render("show.json", %{user: user, for: user})      assert represented["rights"]["admin"] +    assert represented["role"] == "admin" +  end + +  test "A moderator with hidden role for another user", %{user: user} do +    admin = insert(:user, %{info: %{is_moderator: true, show_role: false}}) +    represented = UserView.render("show.json", %{user: admin, for: user}) + +    assert represented["role"] == nil +  end + +  test "An admin with hidden role for another user", %{user: user} do +    admin = insert(:user, %{info: %{is_admin: true, show_role: false}}) +    represented = UserView.render("show.json", %{user: admin, for: user}) + +    assert represented["role"] == nil    end    test "A blocked user for the blocker" do @@ -260,7 +276,7 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "locked" => false,        "default_scope" => "public",        "no_rich_text" => false, -      "hide_followings" => false, +      "hide_follows" => false,        "hide_followers" => false,        "fields" => [],        "pleroma" => %{ | 
