diff options
Diffstat (limited to 'test/web')
| -rw-r--r-- | test/web/activity_pub/utils_test.exs | 13 | ||||
| -rw-r--r-- | test/web/feed/tag_controller_test.exs | 154 | ||||
| -rw-r--r-- | test/web/feed/user_controller_test.exs (renamed from test/web/feed/feed_controller_test.exs) | 8 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/suggestion_controller_test.exs | 46 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/notification_view_test.exs | 27 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/status_view_test.exs | 5 | ||||
| -rw-r--r-- | test/web/oauth/oauth_controller_test.exs | 51 | ||||
| -rw-r--r-- | test/web/pleroma_api/controllers/pleroma_api_controller_test.exs | 2 | ||||
| -rw-r--r-- | test/web/rich_media/parsers/twitter_card_test.exs | 19 | 
9 files changed, 264 insertions, 61 deletions
| diff --git a/test/web/activity_pub/utils_test.exs b/test/web/activity_pub/utils_test.exs index 586eb1d2f..211fa6c95 100644 --- a/test/web/activity_pub/utils_test.exs +++ b/test/web/activity_pub/utils_test.exs @@ -636,4 +636,17 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        assert updated_object.data["announcement_count"] == 1      end    end + +  describe "get_cached_emoji_reactions/1" do +    test "returns the data or an emtpy list" do +      object = insert(:note) +      assert Utils.get_cached_emoji_reactions(object) == [] + +      object = insert(:note, data: %{"reactions" => [["x", ["lain"]]]}) +      assert Utils.get_cached_emoji_reactions(object) == [["x", ["lain"]]] + +      object = insert(:note, data: %{"reactions" => %{}}) +      assert Utils.get_cached_emoji_reactions(object) == [] +    end +  end  end diff --git a/test/web/feed/tag_controller_test.exs b/test/web/feed/tag_controller_test.exs new file mode 100644 index 000000000..2aa1b9587 --- /dev/null +++ b/test/web/feed/tag_controller_test.exs @@ -0,0 +1,154 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.Feed.TagControllerTest do +  use Pleroma.Web.ConnCase + +  import Pleroma.Factory +  import SweetXml + +  alias Pleroma.Web.Feed.FeedView + +  clear_config([:feed]) + +  test "gets a feed (ATOM)", %{conn: conn} do +    Pleroma.Config.put( +      [:feed, :post_title], +      %{max_length: 25, omission: "..."} +    ) + +    user = insert(:user) +    {:ok, activity1} = Pleroma.Web.CommonAPI.post(user, %{"status" => "yeah #PleromaArt"}) + +    object = Pleroma.Object.normalize(activity1) + +    object_data = +      Map.put(object.data, "attachment", [ +        %{ +          "url" => [ +            %{ +              "href" => +                "https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4", +              "mediaType" => "video/mp4", +              "type" => "Link" +            } +          ] +        } +      ]) + +    object +    |> Ecto.Changeset.change(data: object_data) +    |> Pleroma.Repo.update() + +    {:ok, _activity2} = +      Pleroma.Web.CommonAPI.post(user, %{"status" => "42 This is :moominmamma #PleromaArt"}) + +    {:ok, _activity3} = Pleroma.Web.CommonAPI.post(user, %{"status" => "This is :moominmamma"}) + +    response = +      conn +      |> put_req_header("content-type", "application/atom+xml") +      |> get(tag_feed_path(conn, :feed, "pleromaart.atom")) +      |> response(200) + +    xml = parse(response) + +    assert xpath(xml, ~x"//feed/title/text()") == '#pleromaart' + +    assert xpath(xml, ~x"//feed/entry/title/text()"l) == [ +             '42 This is :moominmamm...', +             'yeah #PleromaArt' +           ] + +    assert xpath(xml, ~x"//feed/entry/author/name/text()"ls) == [user.nickname, user.nickname] +    assert xpath(xml, ~x"//feed/entry/author/id/text()"ls) == [user.ap_id, user.ap_id] +  end + +  test "gets a feed (RSS)", %{conn: conn} do +    Pleroma.Config.put( +      [:feed, :post_title], +      %{max_length: 25, omission: "..."} +    ) + +    user = insert(:user) +    {:ok, activity1} = Pleroma.Web.CommonAPI.post(user, %{"status" => "yeah #PleromaArt"}) + +    object = Pleroma.Object.normalize(activity1) + +    object_data = +      Map.put(object.data, "attachment", [ +        %{ +          "url" => [ +            %{ +              "href" => +                "https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4", +              "mediaType" => "video/mp4", +              "type" => "Link" +            } +          ] +        } +      ]) + +    object +    |> Ecto.Changeset.change(data: object_data) +    |> Pleroma.Repo.update() + +    {:ok, activity2} = +      Pleroma.Web.CommonAPI.post(user, %{"status" => "42 This is :moominmamma #PleromaArt"}) + +    {:ok, _activity3} = Pleroma.Web.CommonAPI.post(user, %{"status" => "This is :moominmamma"}) + +    response = +      conn +      |> put_req_header("content-type", "application/rss+xml") +      |> get(tag_feed_path(conn, :feed, "pleromaart.rss")) +      |> response(200) + +    xml = parse(response) +    assert xpath(xml, ~x"//channel/title/text()") == '#pleromaart' + +    assert xpath(xml, ~x"//channel/description/text()"s) == +             "These are public toots tagged with #pleromaart. You can interact with them if you have an account anywhere in the fediverse." + +    assert xpath(xml, ~x"//channel/link/text()") == +             '#{Pleroma.Web.base_url()}/tags/pleromaart.rss' + +    assert xpath(xml, ~x"//channel/webfeeds:logo/text()") == +             '#{Pleroma.Web.base_url()}/static/logo.png' + +    assert xpath(xml, ~x"//channel/item/title/text()"l) == [ +             '42 This is :moominmamm...', +             'yeah #PleromaArt' +           ] + +    assert xpath(xml, ~x"//channel/item/pubDate/text()"sl) == [ +             FeedView.pub_date(activity1.data["published"]), +             FeedView.pub_date(activity2.data["published"]) +           ] + +    assert xpath(xml, ~x"//channel/item/enclosure/@url"sl) == [ +             "https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4" +           ] + +    obj1 = Pleroma.Object.normalize(activity1) +    obj2 = Pleroma.Object.normalize(activity2) + +    assert xpath(xml, ~x"//channel/item/description/text()"sl) == [ +             HtmlEntities.decode(FeedView.activity_content(obj2)), +             HtmlEntities.decode(FeedView.activity_content(obj1)) +           ] + +    response = +      conn +      |> put_req_header("content-type", "application/atom+xml") +      |> get(tag_feed_path(conn, :feed, "pleromaart")) +      |> response(200) + +    xml = parse(response) +    assert xpath(xml, ~x"//channel/title/text()") == '#pleromaart' + +    assert xpath(xml, ~x"//channel/description/text()"s) == +             "These are public toots tagged with #pleromaart. You can interact with them if you have an account anywhere in the fediverse." +  end +end diff --git a/test/web/feed/feed_controller_test.exs b/test/web/feed/user_controller_test.exs index 6f61acf43..41cc9e07e 100644 --- a/test/web/feed/feed_controller_test.exs +++ b/test/web/feed/user_controller_test.exs @@ -2,7 +2,7 @@  # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>  # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.Feed.FeedControllerTest do +defmodule Pleroma.Web.Feed.UserControllerTest do    use Pleroma.Web.ConnCase    import Pleroma.Factory @@ -49,7 +49,7 @@ defmodule Pleroma.Web.Feed.FeedControllerTest do      resp =        conn        |> put_req_header("content-type", "application/atom+xml") -      |> get("/users/#{user.nickname}/feed.atom") +      |> get(user_feed_path(conn, :feed, user.nickname))        |> response(200)      activity_titles = @@ -65,7 +65,7 @@ defmodule Pleroma.Web.Feed.FeedControllerTest do      conn =        conn        |> put_req_header("content-type", "application/atom+xml") -      |> get("/users/nonexisting/feed.atom") +      |> get(user_feed_path(conn, :feed, "nonexisting"))      assert response(conn, 404)    end @@ -91,7 +91,7 @@ defmodule Pleroma.Web.Feed.FeedControllerTest do        response =          conn          |> put_req_header("accept", "application/xml") -        |> get("/users/jimm") +        |> get(user_feed_path(conn, :feed, "jimm"))          |> response(404)        assert response == ~S({"error":"Not found"}) diff --git a/test/web/mastodon_api/controllers/suggestion_controller_test.exs b/test/web/mastodon_api/controllers/suggestion_controller_test.exs index c4118a576..0319d3475 100644 --- a/test/web/mastodon_api/controllers/suggestion_controller_test.exs +++ b/test/web/mastodon_api/controllers/suggestion_controller_test.exs @@ -7,7 +7,6 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do    alias Pleroma.Config -  import ExUnit.CaptureLog    import Pleroma.Factory    import Tesla.Mock @@ -36,11 +35,7 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do      [other_user: other_user]    end -  clear_config(:suggestions) - -  test "returns empty result when suggestions disabled", %{conn: conn} do -    Config.put([:suggestions, :enabled], false) - +  test "returns empty result", %{conn: conn} do      res =        conn        |> get("/api/v1/suggestions") @@ -48,43 +43,4 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do      assert res == []    end - -  test "returns error", %{conn: conn} do -    Config.put([:suggestions, :enabled], true) -    Config.put([:suggestions, :third_party_engine], "http://test500?{{host}}&{{user}}") - -    assert capture_log(fn -> -             res = -               conn -               |> get("/api/v1/suggestions") -               |> json_response(500) - -             assert res == "Something went wrong" -           end) =~ "Could not retrieve suggestions" -  end - -  test "returns suggestions", %{conn: conn, other_user: other_user} do -    Config.put([:suggestions, :enabled], true) -    Config.put([:suggestions, :third_party_engine], "http://test200?{{host}}&{{user}}") - -    res = -      conn -      |> get("/api/v1/suggestions") -      |> json_response(200) - -    assert res == [ -             %{ -               "acct" => "yj455", -               "avatar" => "https://social.heldscal.la/avatar/201.jpeg", -               "avatar_static" => "https://social.heldscal.la/avatar/s/201.jpeg", -               "id" => 0 -             }, -             %{ -               "acct" => other_user.ap_id, -               "avatar" => "https://social.heldscal.la/avatar/202.jpeg", -               "avatar_static" => "https://social.heldscal.la/avatar/s/202.jpeg", -               "id" => other_user.id -             } -           ] -  end  end diff --git a/test/web/mastodon_api/views/notification_view_test.exs b/test/web/mastodon_api/views/notification_view_test.exs index ba1721e06..1fe83cb2c 100644 --- a/test/web/mastodon_api/views/notification_view_test.exs +++ b/test/web/mastodon_api/views/notification_view_test.exs @@ -134,4 +134,31 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do      assert [expected] ==               NotificationView.render("index.json", %{notifications: [notification], for: follower})    end + +  test "EmojiReaction 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, "☕") + +    activity = Repo.get(Activity, activity.id) + +    [notification] = Notification.for_user(user) + +    assert notification + +    expected = %{ +      id: to_string(notification.id), +      pleroma: %{is_seen: false}, +      type: "pleroma:emoji_reaction", +      emoji: "☕", +      account: AccountView.render("show.json", %{user: other_user, for: user}), +      status: StatusView.render("show.json", %{activity: activity, for: user}), +      created_at: Utils.to_masto_date(notification.inserted_at) +    } + +    assert expected == +             NotificationView.render("show.json", %{notification: notification, for: user}) +  end  end diff --git a/test/web/mastodon_api/views/status_view_test.exs b/test/web/mastodon_api/views/status_view_test.exs index 069bb8eac..25777b011 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -36,7 +36,10 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      activity = Repo.get(Activity, activity.id)      status = StatusView.render("show.json", activity: activity) -    assert status[:pleroma][:emoji_reactions] == [["☕", 2], ["🍵", 1]] +    assert status[:pleroma][:emoji_reactions] == [ +             %{emoji: "☕", count: 2}, +             %{emoji: "🍵", count: 1} +           ]    end    test "loads and returns the direct conversation id when given the `with_direct_conversation_id` option" do diff --git a/test/web/oauth/oauth_controller_test.exs b/test/web/oauth/oauth_controller_test.exs index 59f4674eb..adeff8e25 100644 --- a/test/web/oauth/oauth_controller_test.exs +++ b/test/web/oauth/oauth_controller_test.exs @@ -819,7 +819,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do          |> User.confirmation_changeset(need_confirmation: true)          |> User.update_and_set_cache() -      refute Pleroma.User.auth_active?(user) +      refute Pleroma.User.account_status(user) == :active        app = insert(:oauth_app) @@ -849,7 +849,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do        app = insert(:oauth_app) -      conn = +      resp =          build_conn()          |> post("/oauth/token", %{            "grant_type" => "password", @@ -858,10 +858,12 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do            "client_id" => app.client_id,            "client_secret" => app.client_secret          }) +        |> json_response(403) -      assert resp = json_response(conn, 403) -      assert %{"error" => _} = resp -      refute Map.has_key?(resp, "access_token") +      assert resp == %{ +               "error" => "Your account is currently disabled", +               "identifier" => "account_is_disabled" +             }      end      test "rejects token exchange for user with password_reset_pending set to true" do @@ -875,7 +877,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do        app = insert(:oauth_app, scopes: ["read", "write"]) -      conn = +      resp =          build_conn()          |> post("/oauth/token", %{            "grant_type" => "password", @@ -884,12 +886,41 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do            "client_id" => app.client_id,            "client_secret" => app.client_secret          }) +        |> json_response(403) -      assert resp = json_response(conn, 403) +      assert resp == %{ +               "error" => "Password reset is required", +               "identifier" => "password_reset_required" +             } +    end -      assert resp["error"] == "Password reset is required" -      assert resp["identifier"] == "password_reset_required" -      refute Map.has_key?(resp, "access_token") +    test "rejects token exchange for user with confirmation_pending set to true" do +      Pleroma.Config.put([:instance, :account_activation_required], true) +      password = "testpassword" + +      user = +        insert(:user, +          password_hash: Comeonin.Pbkdf2.hashpwsalt(password), +          confirmation_pending: true +        ) + +      app = insert(:oauth_app, scopes: ["read", "write"]) + +      resp = +        build_conn() +        |> post("/oauth/token", %{ +          "grant_type" => "password", +          "username" => user.nickname, +          "password" => password, +          "client_id" => app.client_id, +          "client_secret" => app.client_secret +        }) +        |> json_response(403) + +      assert resp == %{ +               "error" => "Your login is missing a confirmed e-mail address", +               "identifier" => "missing_confirmed_email" +             }      end      test "rejects an invalid authorization code" 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 a79ecd05b..3978c2ec5 100644 --- a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs @@ -71,7 +71,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do        |> get("/api/v1/pleroma/statuses/#{activity.id}/emoji_reactions_by")        |> json_response(200) -    [["🎅", [represented_user]]] = result +    [%{"emoji" => "🎅", "count" => 1, "accounts" => [represented_user]}] = result      assert represented_user["id"] == other_user.id    end diff --git a/test/web/rich_media/parsers/twitter_card_test.exs b/test/web/rich_media/parsers/twitter_card_test.exs index f8e1c9b40..e2610f4c2 100644 --- a/test/web/rich_media/parsers/twitter_card_test.exs +++ b/test/web/rich_media/parsers/twitter_card_test.exs @@ -66,4 +66,23 @@ defmodule Pleroma.Web.RichMedia.Parsers.TwitterCardTest do                    "https://www.nytimes.com/2019/08/01/nyregion/nypd-facial-recognition-children-teenagers.html"                }}    end + +  test "respect only first title tag on the page" do +    image_path = +      "https://assets.atlasobscura.com/media/W1siZiIsInVwbG9hZHMvYXNzZXRzLzkwYzgyMzI4LThlMDUtNGRiNS05MDg3LTUzMGUxZTM5N2RmMmVkOTM5ZDM4MGM4OTIx" <> +        "YTQ5MF9EQVIgZXhodW1hdGlvbiBvZiBNYXJnYXJldCBDb3JiaW4gZ3JhdmUgMTkyNi5qcGciXSxbInAiLCJjb252ZXJ0IiwiIl0sWyJwIiwiY29udmVydCIsIi1xdWFsaXR5IDgxIC1hdXRvLW9" <> +        "yaWVudCJdLFsicCIsInRodW1iIiwiNjAweD4iXV0/DAR%20exhumation%20of%20Margaret%20Corbin%20grave%201926.jpg" + +    html = File.read!("test/fixtures/margaret-corbin-grave-west-point.html") + +    assert TwitterCard.parse(html, %{}) == +             {:ok, +              %{ +                site: "@atlasobscura", +                title: +                  "The Missing Grave of Margaret Corbin, Revolutionary War Veteran - Atlas Obscura", +                card: "summary_large_image", +                image: image_path +              }} +  end  end | 
