diff options
| author | Alex S <alex.strizhakov@gmail.com> | 2019-05-01 12:29:33 +0700 | 
|---|---|---|
| committer | Alex S <alex.strizhakov@gmail.com> | 2019-05-01 12:29:33 +0700 | 
| commit | bdfa3a6fa87f95e93aa853ec4961645215f31221 (patch) | |
| tree | 467b9dd762c9878541e34f2b38a1c58e387c8f2c /test/web/twitter_api | |
| parent | 97b35e00b049c8f908484163b5ffdbcb55db7867 (diff) | |
| parent | 77690b9d03facf74483e3379f72b5b51c9f1bd4e (diff) | |
| download | pleroma-bdfa3a6fa87f95e93aa853ec4961645215f31221.tar.gz pleroma-bdfa3a6fa87f95e93aa853ec4961645215f31221.zip  | |
Merging with develop
Conflicts:
lib/pleroma/web/activity_pub/transmogrifier.ex
lib/pleroma/user.ex
Diffstat (limited to 'test/web/twitter_api')
| -rw-r--r-- | test/web/twitter_api/representers/activity_representer_test.exs | 170 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_controller_test.exs | 130 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_test.exs | 417 | ||||
| -rw-r--r-- | test/web/twitter_api/util_controller_test.exs | 132 | ||||
| -rw-r--r-- | test/web/twitter_api/views/activity_view_test.exs | 36 | ||||
| -rw-r--r-- | test/web/twitter_api/views/user_view_test.exs | 51 | 
6 files changed, 590 insertions, 346 deletions
diff --git a/test/web/twitter_api/representers/activity_representer_test.exs b/test/web/twitter_api/representers/activity_representer_test.exs deleted file mode 100644 index d154385a0..000000000 --- a/test/web/twitter_api/representers/activity_representer_test.exs +++ /dev/null @@ -1,170 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenterTest do -  use Pleroma.DataCase -  alias Pleroma.Activity -  alias Pleroma.Object -  alias Pleroma.User -  alias Pleroma.Web.ActivityPub.ActivityPub -  alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter -  alias Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter -  alias Pleroma.Web.TwitterAPI.UserView -  import Pleroma.Factory - -  test "a like activity" do -    user = insert(:user) -    note_activity = insert(:note_activity) -    object = Object.get_by_ap_id(note_activity.data["object"]["id"]) - -    {:ok, like_activity, _object} = ActivityPub.like(user, object) - -    status = -      ActivityRepresenter.to_map(like_activity, %{user: user, liked_activity: note_activity}) - -    assert status["id"] == like_activity.id -    assert status["in_reply_to_status_id"] == note_activity.id - -    note_activity = Activity.get_by_ap_id(note_activity.data["id"]) -    activity_actor = Repo.get_by(User, ap_id: note_activity.data["actor"]) -    liked_status = ActivityRepresenter.to_map(note_activity, %{user: activity_actor, for: user}) -    assert liked_status["favorited"] == true -    assert status["activity_type"] == "like" -  end - -  test "an activity" do -    user = insert(:user) -    #   {:ok, mentioned_user } = UserBuilder.insert(%{nickname: "shp", ap_id: "shp"}) -    mentioned_user = insert(:user, %{nickname: "shp"}) - -    # {:ok, follower} = UserBuilder.insert(%{following: [User.ap_followers(user)]}) -    follower = insert(:user, %{following: [User.ap_followers(user)]}) - -    object = %Object{ -      data: %{ -        "type" => "Image", -        "url" => [ -          %{ -            "type" => "Link", -            "mediaType" => "image/jpg", -            "href" => "http://example.org/image.jpg" -          } -        ], -        "uuid" => 1 -      } -    } - -    content_html = -      "<script>alert('YAY')</script>Some :2hu: content mentioning <a href='#{mentioned_user.ap_id}'>@shp</shp>" - -    content = HtmlSanitizeEx.strip_tags(content_html) -    date = DateTime.from_naive!(~N[2016-05-24 13:26:08.003], "Etc/UTC") |> DateTime.to_iso8601() - -    {:ok, convo_object} = Object.context_mapping("2hu") |> Repo.insert() - -    to = [ -      User.ap_followers(user), -      "https://www.w3.org/ns/activitystreams#Public", -      mentioned_user.ap_id -    ] - -    activity = %Activity{ -      id: 1, -      data: %{ -        "type" => "Create", -        "id" => "id", -        "to" => to, -        "actor" => User.ap_id(user), -        "object" => %{ -          "published" => date, -          "type" => "Note", -          "content" => content_html, -          "summary" => "2hu :2hu:", -          "inReplyToStatusId" => 213_123, -          "attachment" => [ -            object -          ], -          "external_url" => "some url", -          "like_count" => 5, -          "announcement_count" => 3, -          "context" => "2hu", -          "tag" => ["content", "mentioning", "nsfw"], -          "emoji" => %{ -            "2hu" => "corndog.png" -          } -        }, -        "published" => date, -        "context" => "2hu" -      }, -      local: false, -      recipients: to -    } - -    corndog_emojo = ~s(<img height="32px" width="32px" alt="2hu" title="2hu" src="corndog.png" />) - -    expected_html = -      ~s(<p>2hu ) <> -        corndog_emojo <> -        ~s(</p>alert\('YAY'\)Some ) <> -        corndog_emojo <> -        ~s( content mentioning <a href=") <> mentioned_user.ap_id <> ~s(">@shp</a>) - -    expected_status = %{ -      "id" => activity.id, -      "user" => UserView.render("show.json", %{user: user, for: follower}), -      "is_local" => false, -      "statusnet_html" => expected_html, -      "text" => "2hu :2hu:" <> content, -      "is_post_verb" => true, -      "created_at" => "Tue May 24 13:26:08 +0000 2016", -      "in_reply_to_status_id" => 213_123, -      "in_reply_to_screen_name" => nil, -      "in_reply_to_user_id" => nil, -      "in_reply_to_profileurl" => nil, -      "in_reply_to_ostatus_uri" => nil, -      "statusnet_conversation_id" => convo_object.id, -      "attachments" => [ -        ObjectRepresenter.to_map(object) -      ], -      "attentions" => [ -        UserView.render("show.json", %{user: mentioned_user, for: follower}) -      ], -      "fave_num" => 5, -      "repeat_num" => 3, -      "favorited" => false, -      "repeated" => false, -      "pinned" => false, -      "external_url" => "some url", -      "tags" => ["nsfw", "content", "mentioning"], -      "activity_type" => "post", -      "possibly_sensitive" => true, -      "uri" => activity.data["object"]["id"], -      "visibility" => "direct", -      "card" => nil, -      "muted" => false, -      "summary" => "2hu :2hu:", -      "summary_html" => -        "2hu <img height=\"32px\" width=\"32px\" alt=\"2hu\" title=\"2hu\" src=\"corndog.png\" />" -    } - -    assert ActivityRepresenter.to_map(activity, %{ -             user: user, -             for: follower, -             mentioned: [mentioned_user] -           }) == expected_status -  end - -  test "a delete activity" do -    object = insert(:note) -    user = User.get_by_ap_id(object.data["actor"]) - -    {:ok, delete} = ActivityPub.delete(object) - -    map = ActivityRepresenter.to_map(delete, %{user: user}) - -    assert map["is_post_verb"] == false -    assert map["activity_type"] == "delete" -    assert map["uri"] == object.data["id"] -  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 1b810c9a0..43ad71a16 100644 --- a/test/web/twitter_api/twitter_api_controller_test.exs +++ b/test/web/twitter_api/twitter_api_controller_test.exs @@ -16,14 +16,15 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.CommonAPI    alias Pleroma.Web.OAuth.Token +  alias Pleroma.Web.TwitterAPI.ActivityView    alias Pleroma.Web.TwitterAPI.Controller    alias Pleroma.Web.TwitterAPI.NotificationView -  alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter    alias Pleroma.Web.TwitterAPI.TwitterAPI    alias Pleroma.Web.TwitterAPI.UserView -  import Pleroma.Factory    import Mock +  import Pleroma.Factory +  import Swoosh.TestAssertions    @banner "data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" @@ -116,7 +117,11 @@ 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, for: user}) +               ActivityView.render("activity.json", %{ +                 activity: Repo.one(Activity), +                 user: user, +                 for: user +               })      end    end @@ -265,7 +270,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do      test "returns one status", %{conn: conn} do        user = insert(:user)        {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey!"}) -      actor = Repo.get_by!(User, ap_id: activity.data["actor"]) +      actor = User.get_cached_by_ap_id(activity.data["actor"])        conn =          conn @@ -273,7 +278,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        response = json_response(conn, 200) -      assert response == ActivityRepresenter.to_map(activity, %{user: actor}) +      assert response == ActivityView.render("activity.json", %{activity: activity, user: actor})      end    end @@ -372,7 +377,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        assert response ==                 Enum.map(returned_activities, fn activity -> -                 ActivityRepresenter.to_map(activity, %{ +                 ActivityView.render("activity.json", %{ +                   activity: activity,                     user: User.get_cached_by_ap_id(activity.data["actor"]),                     for: current_user                   }) @@ -469,10 +475,10 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        assert length(response) == 1        assert Enum.at(response, 0) == -               ActivityRepresenter.to_map(activity, %{ +               ActivityView.render("activity.json", %{                   user: current_user,                   for: current_user, -                 mentioned: [current_user] +                 activity: activity                 })      end @@ -594,7 +600,9 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        conn = get(conn, "/api/statuses/user_timeline.json", %{"user_id" => user.id})        response = json_response(conn, 200)        assert length(response) == 1 -      assert Enum.at(response, 0) == ActivityRepresenter.to_map(activity, %{user: user}) + +      assert Enum.at(response, 0) == +               ActivityView.render("activity.json", %{user: user, activity: activity})      end      test "with screen_name", %{conn: conn} do @@ -604,7 +612,9 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        conn = get(conn, "/api/statuses/user_timeline.json", %{"screen_name" => user.nickname})        response = json_response(conn, 200)        assert length(response) == 1 -      assert Enum.at(response, 0) == ActivityRepresenter.to_map(activity, %{user: user}) + +      assert Enum.at(response, 0) == +               ActivityView.render("activity.json", %{user: user, activity: activity})      end      test "with credentials", %{conn: conn, user: current_user} do @@ -620,7 +630,11 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        assert length(response) == 1        assert Enum.at(response, 0) == -               ActivityRepresenter.to_map(activity, %{user: current_user, for: current_user}) +               ActivityView.render("activity.json", %{ +                 user: current_user, +                 for: current_user, +                 activity: activity +               })      end      test "with credentials with user_id", %{conn: conn, user: current_user} do @@ -635,7 +649,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: user}) + +      assert Enum.at(response, 0) == +               ActivityView.render("activity.json", %{user: user, activity: activity})      end      test "with credentials screen_name", %{conn: conn, user: current_user} do @@ -650,7 +666,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: user}) + +      assert Enum.at(response, 0) == +               ActivityView.render("activity.json", %{user: user, activity: activity})      end      test "with credentials with user_id, excluding RTs", %{conn: conn, user: current_user} do @@ -669,7 +687,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: user}) + +      assert Enum.at(response, 0) == +               ActivityView.render("activity.json", %{user: user, activity: activity})        conn =          conn @@ -678,7 +698,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: user}) + +      assert Enum.at(response, 0) == +               ActivityView.render("activity.json", %{user: user, activity: activity})      end    end @@ -698,7 +720,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do          |> with_credentials(current_user.nickname, "test")          |> post("/api/friendships/create.json", %{user_id: followed.id}) -      current_user = Repo.get(User, current_user.id) +      current_user = User.get_cached_by_id(current_user.id)        assert User.ap_followers(followed) in current_user.following        assert json_response(conn, 200) == @@ -713,8 +735,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do          |> with_credentials(current_user.nickname, "test")          |> post("/api/friendships/create.json", %{user_id: followed.id}) -      current_user = Repo.get(User, current_user.id) -      followed = Repo.get(User, followed.id) +      current_user = User.get_cached_by_id(current_user.id) +      followed = User.get_cached_by_id(followed.id)        refute User.ap_followers(followed) in current_user.following @@ -743,7 +765,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do          |> with_credentials(current_user.nickname, "test")          |> post("/api/friendships/destroy.json", %{user_id: followed.id}) -      current_user = Repo.get(User, current_user.id) +      current_user = User.get_cached_by_id(current_user.id)        assert current_user.following == [current_user.ap_id]        assert json_response(conn, 200) == @@ -767,7 +789,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do          |> with_credentials(current_user.nickname, "test")          |> post("/api/blocks/create.json", %{user_id: blocked.id}) -      current_user = Repo.get(User, current_user.id) +      current_user = User.get_cached_by_id(current_user.id)        assert User.blocks?(current_user, blocked)        assert json_response(conn, 200) == @@ -794,7 +816,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do          |> with_credentials(current_user.nickname, "test")          |> post("/api/blocks/destroy.json", %{user_id: blocked.id}) -      current_user = Repo.get(User, current_user.id) +      current_user = User.get_cached_by_id(current_user.id)        assert current_user.info.blocks == []        assert json_response(conn, 200) == @@ -825,7 +847,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do          |> with_credentials(current_user.nickname, "test")          |> post("/api/qvitter/update_avatar.json", %{img: avatar_image}) -      current_user = Repo.get(User, current_user.id) +      current_user = User.get_cached_by_id(current_user.id)        assert is_map(current_user.avatar)        assert json_response(conn, 200) == @@ -933,11 +955,15 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do          |> with_credentials(current_user.nickname, "test")          |> post(request_path) -      activity = Repo.get(Activity, note_activity.id) -      activity_user = Repo.get_by(User, ap_id: note_activity.data["actor"]) +      activity = Activity.get_by_id(note_activity.id) +      activity_user = User.get_cached_by_ap_id(note_activity.data["actor"])        assert json_response(response, 200) == -               ActivityRepresenter.to_map(activity, %{user: activity_user, for: current_user}) +               ActivityView.render("activity.json", %{ +                 user: activity_user, +                 for: current_user, +                 activity: activity +               })      end    end @@ -967,11 +993,15 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do          |> with_credentials(current_user.nickname, "test")          |> post(request_path) -      activity = Repo.get(Activity, note_activity.id) -      activity_user = Repo.get_by(User, ap_id: note_activity.data["actor"]) +      activity = Activity.get_by_id(note_activity.id) +      activity_user = User.get_cached_by_ap_id(note_activity.data["actor"])        assert json_response(response, 200) == -               ActivityRepresenter.to_map(activity, %{user: activity_user, for: current_user}) +               ActivityView.render("activity.json", %{ +                 user: activity_user, +                 for: current_user, +                 activity: activity +               })      end    end @@ -992,7 +1022,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        user = json_response(conn, 200) -      fetched_user = Repo.get_by(User, nickname: "lain") +      fetched_user = User.get_cached_by_nickname("lain")        assert user == UserView.render("show.json", %{user: fetched_user})      end @@ -1034,8 +1064,14 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do      test "it sends an email to user", %{user: user} do        token_record = Repo.get_by(Pleroma.PasswordResetToken, user_id: user.id) -      Swoosh.TestAssertions.assert_email_sent( -        Pleroma.UserEmail.password_reset_email(user, token_record.token) +      email = Pleroma.Emails.UserEmail.password_reset_email(user, token_record.token) +      notify_email = Pleroma.Config.get([:instance, :notify_email]) +      instance_name = Pleroma.Config.get([:instance, :name]) + +      assert_email_sent( +        from: {instance_name, notify_email}, +        to: {user.name, user.email}, +        html_body: email.html_body        )      end    end @@ -1080,7 +1116,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do      test "it confirms the user account", %{conn: conn, user: user} do        get(conn, "/api/account/confirm_email/#{user.id}/#{user.info.confirmation_token}") -      user = Repo.get(User, user.id) +      user = User.get_cached_by_id(user.id)        refute user.info.confirmation_pending        refute user.info.confirmation_token @@ -1134,7 +1170,15 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        |> assign(:user, user)        |> post("/api/account/resend_confirmation_email?email=#{user.email}") -      Swoosh.TestAssertions.assert_email_sent(Pleroma.UserEmail.account_confirmation_email(user)) +      email = Pleroma.Emails.UserEmail.account_confirmation_email(user) +      notify_email = Pleroma.Config.get([:instance, :notify_email]) +      instance_name = Pleroma.Config.get([:instance, :name]) + +      assert_email_sent( +        from: {instance_name, notify_email}, +        to: {user.name, user.email}, +        html_body: email.html_body +      )      end    end @@ -1698,7 +1742,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do          })        assert json_response(conn, 200) == %{"status" => "success"} -      fetched_user = Repo.get(User, current_user.id) +      fetched_user = User.get_cached_by_id(current_user.id)        assert Pbkdf2.checkpw("newpass", fetched_user.password_hash) == true      end    end @@ -1739,8 +1783,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        {:ok, _activity} = ActivityPub.follow(other_user, user) -      user = Repo.get(User, user.id) -      other_user = Repo.get(User, other_user.id) +      user = User.get_cached_by_id(user.id) +      other_user = User.get_cached_by_id(other_user.id)        assert User.following?(other_user, user) == false @@ -1779,8 +1823,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        {:ok, _activity} = ActivityPub.follow(other_user, user) -      user = Repo.get(User, user.id) -      other_user = Repo.get(User, other_user.id) +      user = User.get_cached_by_id(user.id) +      other_user = User.get_cached_by_id(other_user.id)        assert User.following?(other_user, user) == false @@ -1802,8 +1846,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        {:ok, _activity} = ActivityPub.follow(other_user, user) -      user = Repo.get(User, user.id) -      other_user = Repo.get(User, other_user.id) +      user = User.get_cached_by_id(user.id) +      other_user = User.get_cached_by_id(other_user.id)        assert User.following?(other_user, user) == false @@ -1872,7 +1916,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do    describe "POST /api/media/metadata/create" do      setup do        object = insert(:note) -      user = User.get_by_ap_id(object.data["actor"]) +      user = User.get_cached_by_ap_id(object.data["actor"])        %{object: object, user: user}      end @@ -1955,7 +1999,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        user = refresh_record(user)        assert json_response(response, 200) == -               ActivityRepresenter.to_map(activity, %{user: user, for: user}) +               ActivityView.render("activity.json", %{user: user, for: user, activity: activity})      end    end @@ -1985,7 +2029,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        user = refresh_record(user)        assert json_response(response, 200) == -               ActivityRepresenter.to_map(activity, %{user: user, for: user}) +               ActivityView.render("activity.json", %{user: user, for: user, activity: activity})      end    end diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index c8dd3fd7a..d601c8f1f 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -16,6 +16,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do    import Pleroma.Factory +  setup_all do +    Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) +    :ok +  end +    test "create a status" do      user = insert(:user)      mentioned_user = insert(:user, %{nickname: "shp", ap_id: "shp"}) @@ -36,18 +41,19 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      input = %{        "status" => -        "Hello again, @shp.<script></script>\nThis is on another :moominmamma: line. #2hu #epic #phantasmagoric", +        "Hello again, @shp.<script></script>\nThis is on another :firefox: line. #2hu #epic #phantasmagoric",        "media_ids" => [object.id]      }      {:ok, activity = %Activity{}} = TwitterAPI.create_status(user, input) +    object = Object.normalize(activity.data["object"])      expected_text = -      "Hello again, <span class='h-card'><a data-user='#{mentioned_user.id}' class='u-url mention' href='shp'>@<span>shp</span></a></span>.<script></script><br>This is on another :moominmamma: line. <a class='hashtag' data-tag='2hu' href='http://localhost:4001/tag/2hu' rel='tag'>#2hu</a> <a class='hashtag' data-tag='epic' href='http://localhost:4001/tag/epic' rel='tag'>#epic</a> <a class='hashtag' data-tag='phantasmagoric' href='http://localhost:4001/tag/phantasmagoric' rel='tag'>#phantasmagoric</a><br><a href=\"http://example.org/image.jpg\" class='attachment'>image.jpg</a>" +      "Hello again, <span class='h-card'><a data-user='#{mentioned_user.id}' class='u-url mention' href='shp'>@<span>shp</span></a></span>.<script></script><br>This is on another :firefox: line. <a class='hashtag' data-tag='2hu' href='http://localhost:4001/tag/2hu' rel='tag'>#2hu</a> <a class='hashtag' data-tag='epic' href='http://localhost:4001/tag/epic' rel='tag'>#epic</a> <a class='hashtag' data-tag='phantasmagoric' href='http://localhost:4001/tag/phantasmagoric' rel='tag'>#phantasmagoric</a><br><a href=\"http://example.org/image.jpg\" class='attachment'>image.jpg</a>" -    assert get_in(activity.data, ["object", "content"]) == expected_text -    assert get_in(activity.data, ["object", "type"]) == "Note" -    assert get_in(activity.data, ["object", "actor"]) == user.ap_id +    assert get_in(object.data, ["content"]) == expected_text +    assert get_in(object.data, ["type"]) == "Note" +    assert get_in(object.data, ["actor"]) == user.ap_id      assert get_in(activity.data, ["actor"]) == user.ap_id      assert Enum.member?(get_in(activity.data, ["cc"]), User.ap_followers(user)) @@ -59,21 +65,20 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      assert Enum.member?(get_in(activity.data, ["to"]), "shp")      assert activity.local == true -    assert %{"moominmamma" => "http://localhost:4001/finmoji/128px/moominmamma-128.png"} = -             activity.data["object"]["emoji"] +    assert %{"firefox" => "http://localhost:4001/emoji/Firefox.gif"} = object.data["emoji"]      # hashtags -    assert activity.data["object"]["tag"] == ["2hu", "epic", "phantasmagoric"] +    assert object.data["tag"] == ["2hu", "epic", "phantasmagoric"]      # Add a context      assert is_binary(get_in(activity.data, ["context"])) -    assert is_binary(get_in(activity.data, ["object", "context"])) +    assert is_binary(get_in(object.data, ["context"])) -    assert is_list(activity.data["object"]["attachment"]) +    assert is_list(object.data["attachment"]) -    assert activity.data["object"] == Object.get_by_ap_id(activity.data["object"]["id"]).data +    assert activity.data["object"] == object.data["id"] -    user = User.get_by_ap_id(user.ap_id) +    user = User.get_cached_by_ap_id(user.ap_id)      assert user.info.note_count == 1    end @@ -86,6 +91,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      }      {:ok, activity = %Activity{}} = TwitterAPI.create_status(user, input) +    object = Object.normalize(activity.data["object"])      input = %{        "status" => "Here's your (you).", @@ -93,14 +99,14 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      }      {:ok, reply = %Activity{}} = TwitterAPI.create_status(user, input) +    reply_object = Object.normalize(reply.data["object"])      assert get_in(reply.data, ["context"]) == get_in(activity.data, ["context"]) -    assert get_in(reply.data, ["object", "context"]) == -             get_in(activity.data, ["object", "context"]) +    assert get_in(reply_object.data, ["context"]) == get_in(object.data, ["context"]) -    assert get_in(reply.data, ["object", "inReplyTo"]) == get_in(activity.data, ["object", "id"]) -    assert get_in(reply.data, ["object", "inReplyToStatusId"]) == activity.id +    assert get_in(reply_object.data, ["inReplyTo"]) == get_in(activity.data, ["object"]) +    assert Activity.get_in_reply_to_activity(reply).id == activity.id    end    test "Follow another user using user_id" do @@ -123,7 +129,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      assert User.ap_followers(followed) in user.following -    followed = User.get_by_ap_id(followed.ap_id) +    followed = User.get_cached_by_ap_id(followed.ap_id)      assert followed.info.follower_count == 1      {:error, msg} = TwitterAPI.follow(user, %{"screen_name" => followed.nickname}) @@ -275,7 +281,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      {:ok, user} = TwitterAPI.register_user(data) -    fetched_user = Repo.get_by(User, nickname: "lain") +    fetched_user = User.get_cached_by_nickname("lain")      assert UserView.render("show.json", %{user: user}) ==               UserView.render("show.json", %{user: fetched_user}) @@ -293,13 +299,12 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      {:ok, user} = TwitterAPI.register_user(data) -    fetched_user = Repo.get_by(User, nickname: "lain") +    fetched_user = User.get_cached_by_nickname("lain")      assert UserView.render("show.json", %{user: user}) ==               UserView.render("show.json", %{user: fetched_user})    end -  @moduletag skip: "needs 'account_activation_required: true' in config"    test "it sends confirmation email if :account_activation_required is specified in instance config" do      setting = Pleroma.Config.get([:instance, :account_activation_required]) @@ -321,7 +326,16 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      assert user.info.confirmation_pending -    Swoosh.TestAssertions.assert_email_sent(Pleroma.UserEmail.account_confirmation_email(user)) +    email = Pleroma.Emails.UserEmail.account_confirmation_email(user) + +    notify_email = Pleroma.Config.get([:instance, :notify_email]) +    instance_name = Pleroma.Config.get([:instance, :name]) + +    Swoosh.TestAssertions.assert_email_sent( +      from: {instance_name, notify_email}, +      to: {user.name, user.email}, +      html_body: email.html_body +    )    end    test "it registers a new user and parses mentions in the bio" do @@ -353,68 +367,313 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      assert user2.bio == expected_text    end -  @moduletag skip: "needs 'registrations_open: false' in config" -  test "it registers a new user via invite token and returns the user." do -    {:ok, token} = UserInviteToken.create_token() +  describe "register with one time token" do +    setup do +      setting = Pleroma.Config.get([:instance, :registrations_open]) -    data = %{ -      "nickname" => "vinny", -      "email" => "pasta@pizza.vs", -      "fullname" => "Vinny Vinesauce", -      "bio" => "streamer", -      "password" => "hiptofbees", -      "confirm" => "hiptofbees", -      "token" => token.token -    } +      if setting do +        Pleroma.Config.put([:instance, :registrations_open], false) +        on_exit(fn -> Pleroma.Config.put([:instance, :registrations_open], setting) end) +      end -    {:ok, user} = TwitterAPI.register_user(data) +      :ok +    end -    fetched_user = Repo.get_by(User, nickname: "vinny") -    token = Repo.get_by(UserInviteToken, token: token.token) +    test "returns user on success" do +      {:ok, invite} = UserInviteToken.create_invite() -    assert token.used == true +      data = %{ +        "nickname" => "vinny", +        "email" => "pasta@pizza.vs", +        "fullname" => "Vinny Vinesauce", +        "bio" => "streamer", +        "password" => "hiptofbees", +        "confirm" => "hiptofbees", +        "token" => invite.token +      } -    assert UserView.render("show.json", %{user: user}) == -             UserView.render("show.json", %{user: fetched_user}) +      {:ok, user} = TwitterAPI.register_user(data) + +      fetched_user = User.get_cached_by_nickname("vinny") +      invite = Repo.get_by(UserInviteToken, token: invite.token) + +      assert invite.used == true + +      assert UserView.render("show.json", %{user: user}) == +               UserView.render("show.json", %{user: fetched_user}) +    end + +    test "returns error on invalid token" do +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => "DudeLetMeInImAFairy" +      } + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Invalid token" +      refute User.get_cached_by_nickname("GrimReaper") +    end + +    test "returns error on expired token" do +      {:ok, invite} = UserInviteToken.create_invite() +      UserInviteToken.update_invite!(invite, used: true) + +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => invite.token +      } + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Expired token" +      refute User.get_cached_by_nickname("GrimReaper") +    end    end -  @moduletag skip: "needs 'registrations_open: false' in config" -  test "it returns an error if invalid token submitted" do -    data = %{ -      "nickname" => "GrimReaper", -      "email" => "death@reapers.afterlife", -      "fullname" => "Reaper Grim", -      "bio" => "Your time has come", -      "password" => "scythe", -      "confirm" => "scythe", -      "token" => "DudeLetMeInImAFairy" -    } +  describe "registers with date limited token" do +    setup do +      setting = Pleroma.Config.get([:instance, :registrations_open]) + +      if setting do +        Pleroma.Config.put([:instance, :registrations_open], false) +        on_exit(fn -> Pleroma.Config.put([:instance, :registrations_open], setting) end) +      end + +      data = %{ +        "nickname" => "vinny", +        "email" => "pasta@pizza.vs", +        "fullname" => "Vinny Vinesauce", +        "bio" => "streamer", +        "password" => "hiptofbees", +        "confirm" => "hiptofbees" +      } + +      check_fn = fn invite -> +        data = Map.put(data, "token", invite.token) +        {:ok, user} = TwitterAPI.register_user(data) +        fetched_user = User.get_cached_by_nickname("vinny") + +        assert UserView.render("show.json", %{user: user}) == +                 UserView.render("show.json", %{user: fetched_user}) +      end + +      {:ok, data: data, check_fn: check_fn} +    end + +    test "returns user on success", %{check_fn: check_fn} do +      {:ok, invite} = UserInviteToken.create_invite(%{expires_at: Date.utc_today()}) + +      check_fn.(invite) + +      invite = Repo.get_by(UserInviteToken, token: invite.token) + +      refute invite.used +    end + +    test "returns user on token which expired tomorrow", %{check_fn: check_fn} do +      {:ok, invite} = UserInviteToken.create_invite(%{expires_at: Date.add(Date.utc_today(), 1)}) -    {:error, msg} = TwitterAPI.register_user(data) +      check_fn.(invite) -    assert msg == "Invalid token" -    refute Repo.get_by(User, nickname: "GrimReaper") +      invite = Repo.get_by(UserInviteToken, token: invite.token) + +      refute invite.used +    end + +    test "returns an error on overdue date", %{data: data} do +      {:ok, invite} = UserInviteToken.create_invite(%{expires_at: Date.add(Date.utc_today(), -1)}) + +      data = Map.put(data, "token", invite.token) + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Expired token" +      refute User.get_cached_by_nickname("vinny") +      invite = Repo.get_by(UserInviteToken, token: invite.token) + +      refute invite.used +    end    end -  @moduletag skip: "needs 'registrations_open: false' in config" -  test "it returns an error if expired token submitted" do -    {:ok, token} = UserInviteToken.create_token() -    UserInviteToken.mark_as_used(token.token) +  describe "registers with reusable token" do +    setup do +      setting = Pleroma.Config.get([:instance, :registrations_open]) -    data = %{ -      "nickname" => "GrimReaper", -      "email" => "death@reapers.afterlife", -      "fullname" => "Reaper Grim", -      "bio" => "Your time has come", -      "password" => "scythe", -      "confirm" => "scythe", -      "token" => token.token -    } +      if setting do +        Pleroma.Config.put([:instance, :registrations_open], false) +        on_exit(fn -> Pleroma.Config.put([:instance, :registrations_open], setting) end) +      end -    {:error, msg} = TwitterAPI.register_user(data) +      :ok +    end + +    test "returns user on success, after him registration fails" do +      {:ok, invite} = UserInviteToken.create_invite(%{max_use: 100}) + +      UserInviteToken.update_invite!(invite, uses: 99) + +      data = %{ +        "nickname" => "vinny", +        "email" => "pasta@pizza.vs", +        "fullname" => "Vinny Vinesauce", +        "bio" => "streamer", +        "password" => "hiptofbees", +        "confirm" => "hiptofbees", +        "token" => invite.token +      } + +      {:ok, user} = TwitterAPI.register_user(data) +      fetched_user = User.get_cached_by_nickname("vinny") +      invite = Repo.get_by(UserInviteToken, token: invite.token) + +      assert invite.used == true -    assert msg == "Expired token" -    refute Repo.get_by(User, nickname: "GrimReaper") +      assert UserView.render("show.json", %{user: user}) == +               UserView.render("show.json", %{user: fetched_user}) + +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => invite.token +      } + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Expired token" +      refute User.get_cached_by_nickname("GrimReaper") +    end +  end + +  describe "registers with reusable date limited token" do +    setup do +      setting = Pleroma.Config.get([:instance, :registrations_open]) + +      if setting do +        Pleroma.Config.put([:instance, :registrations_open], false) +        on_exit(fn -> Pleroma.Config.put([:instance, :registrations_open], setting) end) +      end + +      :ok +    end + +    test "returns user on success" do +      {:ok, invite} = UserInviteToken.create_invite(%{expires_at: Date.utc_today(), max_use: 100}) + +      data = %{ +        "nickname" => "vinny", +        "email" => "pasta@pizza.vs", +        "fullname" => "Vinny Vinesauce", +        "bio" => "streamer", +        "password" => "hiptofbees", +        "confirm" => "hiptofbees", +        "token" => invite.token +      } + +      {:ok, user} = TwitterAPI.register_user(data) +      fetched_user = User.get_cached_by_nickname("vinny") +      invite = Repo.get_by(UserInviteToken, token: invite.token) + +      refute invite.used + +      assert UserView.render("show.json", %{user: user}) == +               UserView.render("show.json", %{user: fetched_user}) +    end + +    test "error after max uses" do +      {:ok, invite} = UserInviteToken.create_invite(%{expires_at: Date.utc_today(), max_use: 100}) + +      UserInviteToken.update_invite!(invite, uses: 99) + +      data = %{ +        "nickname" => "vinny", +        "email" => "pasta@pizza.vs", +        "fullname" => "Vinny Vinesauce", +        "bio" => "streamer", +        "password" => "hiptofbees", +        "confirm" => "hiptofbees", +        "token" => invite.token +      } + +      {:ok, user} = TwitterAPI.register_user(data) +      fetched_user = User.get_cached_by_nickname("vinny") +      invite = Repo.get_by(UserInviteToken, token: invite.token) +      assert invite.used == true + +      assert UserView.render("show.json", %{user: user}) == +               UserView.render("show.json", %{user: fetched_user}) + +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => invite.token +      } + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Expired token" +      refute User.get_cached_by_nickname("GrimReaper") +    end + +    test "returns error on overdue date" do +      {:ok, invite} = +        UserInviteToken.create_invite(%{expires_at: Date.add(Date.utc_today(), -1), max_use: 100}) + +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => invite.token +      } + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Expired token" +      refute User.get_cached_by_nickname("GrimReaper") +    end + +    test "returns error on with overdue date and after max" do +      {:ok, invite} = +        UserInviteToken.create_invite(%{expires_at: Date.add(Date.utc_today(), -1), max_use: 100}) + +      UserInviteToken.update_invite!(invite, uses: 100) + +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => invite.token +      } + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Expired token" +      refute User.get_cached_by_nickname("GrimReaper") +    end    end    test "it returns the error on registration problems" do @@ -429,7 +688,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      {:error, error_object} = TwitterAPI.register_user(data)      assert is_binary(error_object[:error]) -    refute Repo.get_by(User, nickname: "lain") +    refute User.get_cached_by_nickname("lain")    end    test "it assigns an integer conversation_id" do @@ -445,28 +704,12 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      :ok    end -  describe "context_to_conversation_id" do -    test "creates a mapping object" do -      conversation_id = TwitterAPI.context_to_conversation_id("random context") -      object = Object.get_by_ap_id("random context") - -      assert conversation_id == object.id -    end - -    test "returns an existing mapping for an existing object" do -      {:ok, object} = Object.context_mapping("random context") |> Repo.insert() -      conversation_id = TwitterAPI.context_to_conversation_id("random context") - -      assert conversation_id == object.id -    end -  end -    describe "fetching a user by uri" do      test "fetches a user by uri" do        id = "https://mastodon.social/users/lambadalambda"        user = insert(:user)        {:ok, represented} = TwitterAPI.get_external_profile(user, id) -      remote = User.get_by_ap_id(id) +      remote = User.get_cached_by_ap_id(id)        assert represented["id"] == UserView.render("show.json", %{user: remote, for: user})["id"] diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index fc762ab18..56474447b 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -1,8 +1,17 @@  defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do    use Pleroma.Web.ConnCase +  alias Pleroma.Notification +  alias Pleroma.Repo +  alias Pleroma.User +  alias Pleroma.Web.CommonAPI    import Pleroma.Factory +  setup do +    Tesla.Mock.mock(fn env -> apply(HttpRequestMock, :request, [env]) end) +    :ok +  end +    describe "POST /api/pleroma/follow_import" do      test "it returns HTTP 200", %{conn: conn} do        user1 = insert(:user) @@ -17,6 +26,21 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do        assert response == "job started"      end +    test "it imports new-style mastodon follow lists", %{conn: conn} do +      user1 = insert(:user) +      user2 = insert(:user) + +      response = +        conn +        |> assign(:user, user1) +        |> post("/api/pleroma/follow_import", %{ +          "list" => "Account address,Show boosts\n#{user2.ap_id},true" +        }) +        |> json_response(:ok) + +      assert response == "job started" +    end +      test "requires 'follow' permission", %{conn: conn} do        token1 = insert(:oauth_token, scopes: ["read", "write"])        token2 = insert(:oauth_token, scopes: ["follow"]) @@ -52,7 +76,69 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do      end    end +  describe "POST /api/pleroma/notifications/read" do +    test "it marks a single notification as read", %{conn: conn} do +      user1 = insert(:user) +      user2 = insert(:user) +      {:ok, activity1} = CommonAPI.post(user2, %{"status" => "hi @#{user1.nickname}"}) +      {:ok, activity2} = CommonAPI.post(user2, %{"status" => "hi @#{user1.nickname}"}) +      {:ok, [notification1]} = Notification.create_notifications(activity1) +      {:ok, [notification2]} = Notification.create_notifications(activity2) + +      conn +      |> assign(:user, user1) +      |> post("/api/pleroma/notifications/read", %{"id" => "#{notification1.id}"}) +      |> json_response(:ok) + +      assert Repo.get(Notification, notification1.id).seen +      refute Repo.get(Notification, notification2.id).seen +    end +  end + +  describe "PUT /api/pleroma/notification_settings" do +    test "it updates notification settings", %{conn: conn} do +      user = insert(:user) + +      conn +      |> assign(:user, user) +      |> put("/api/pleroma/notification_settings", %{ +        "remote" => false, +        "followers" => false, +        "bar" => 1 +      }) +      |> json_response(:ok) + +      user = Repo.get(User, user.id) + +      assert %{"remote" => false, "local" => true, "followers" => false, "follows" => true} == +               user.info.notification_settings +    end +  end +    describe "GET /api/statusnet/config.json" do +    test "returns the state of safe_dm_mentions flag", %{conn: conn} do +      option = Pleroma.Config.get([:instance, :safe_dm_mentions]) +      Pleroma.Config.put([:instance, :safe_dm_mentions], true) + +      response = +        conn +        |> get("/api/statusnet/config.json") +        |> json_response(:ok) + +      assert response["site"]["safeDMMentionsEnabled"] == "1" + +      Pleroma.Config.put([:instance, :safe_dm_mentions], false) + +      response = +        conn +        |> get("/api/statusnet/config.json") +        |> json_response(:ok) + +      assert response["site"]["safeDMMentionsEnabled"] == "0" + +      Pleroma.Config.put([:instance, :safe_dm_mentions], option) +    end +      test "it returns the managed config", %{conn: conn} do        Pleroma.Config.put([:instance, :managed_config], false)        Pleroma.Config.put([:fe], theme: "rei-ayanami-towel") @@ -119,4 +205,50 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do        assert response == Jason.encode!(config |> Enum.into(%{})) |> Jason.decode!()      end    end + +  describe "/api/pleroma/emoji" do +    test "returns json with custom emoji with tags", %{conn: conn} do +      emoji = +        conn +        |> get("/api/pleroma/emoji") +        |> json_response(200) + +      assert Enum.all?(emoji, fn +               {_key, +                %{ +                  "image_url" => url, +                  "tags" => tags +                }} -> +                 is_binary(url) and is_list(tags) +             end) +    end +  end + +  describe "GET /ostatus_subscribe?acct=...." do +    test "adds status to pleroma instance if the `acct` is a status", %{conn: conn} do +      conn = +        get( +          conn, +          "/ostatus_subscribe?acct=https://mastodon.social/users/emelie/statuses/101849165031453009" +        ) + +      assert redirected_to(conn) =~ "/notice/" +    end + +    test "show follow account page if the `acct` is a account link", %{conn: conn} do +      response = +        get( +          conn, +          "/ostatus_subscribe?acct=https://mastodon.social/users/emelie" +        ) + +      assert html_response(response, 200) =~ "Log in to follow" +    end +  end + +  test "GET /api/pleroma/healthcheck", %{conn: conn} do +    conn = get(conn, "/api/pleroma/healthcheck") + +    assert conn.status in [200, 503] +  end  end diff --git a/test/web/twitter_api/views/activity_view_test.exs b/test/web/twitter_api/views/activity_view_test.exs index 6f0786b1c..d84ab7420 100644 --- a/test/web/twitter_api/views/activity_view_test.exs +++ b/test/web/twitter_api/views/activity_view_test.exs @@ -6,13 +6,13 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do    use Pleroma.DataCase    alias Pleroma.Activity +  alias Pleroma.Object    alias Pleroma.Repo    alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.CommonAPI    alias Pleroma.Web.CommonAPI.Utils    alias Pleroma.Web.TwitterAPI.ActivityView -  alias Pleroma.Web.TwitterAPI.TwitterAPI    alias Pleroma.Web.TwitterAPI.UserView    import Pleroma.Factory @@ -82,7 +82,7 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do      result = ActivityView.render("activity.json", activity: activity)      assert result["statusnet_html"] == -             "<a class=\"hashtag\" data-tag=\"bike\" href=\"http://localhost:4001/tag/bike\">#Bike</a> log - Commute Tuesday<br /><a href=\"https://pla.bike/posts/20181211/\">https://pla.bike/posts/20181211/</a><br /><a class=\"hashtag\" data-tag=\"cycling\" href=\"http://localhost:4001/tag/cycling\">#cycling</a> <a class=\"hashtag\" data-tag=\"chscycling\" href=\"http://localhost:4001/tag/chscycling\">#CHScycling</a> <a class=\"hashtag\" data-tag=\"commute\" href=\"http://localhost:4001/tag/commute\">#commute</a><br />MVIMG_20181211_054020.jpg" +             "<a class=\"hashtag\" data-tag=\"bike\" href=\"http://localhost:4001/tag/bike\" rel=\"tag\">#Bike</a> log - Commute Tuesday<br /><a href=\"https://pla.bike/posts/20181211/\">https://pla.bike/posts/20181211/</a><br /><a class=\"hashtag\" data-tag=\"cycling\" href=\"http://localhost:4001/tag/cycling\" rel=\"tag\">#cycling</a> <a class=\"hashtag\" data-tag=\"chscycling\" href=\"http://localhost:4001/tag/chscycling\" rel=\"tag\">#CHScycling</a> <a class=\"hashtag\" data-tag=\"commute\" href=\"http://localhost:4001/tag/commute\" rel=\"tag\">#commute</a><br />MVIMG_20181211_054020.jpg"      assert result["text"] ==               "#Bike log - Commute Tuesday\nhttps://pla.bike/posts/20181211/\n#cycling #CHScycling #commute\nMVIMG_20181211_054020.jpg" @@ -91,16 +91,16 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do    test "a create activity with a summary containing emoji" do      {:ok, activity} =        CommonAPI.post(insert(:user), %{ -        "spoiler_text" => ":woollysocks: meow", +        "spoiler_text" => ":firefox: meow",          "status" => "."        })      result = ActivityView.render("activity.json", activity: activity) -    expected = ":woollysocks: meow" +    expected = ":firefox: meow"      expected_html = -      "<img height=\"32px\" width=\"32px\" alt=\"woollysocks\" title=\"woollysocks\" src=\"http://localhost:4001/finmoji/128px/woollysocks-128.png\" /> meow" +      "<img height=\"32px\" width=\"32px\" alt=\"firefox\" title=\"firefox\" src=\"http://localhost:4001/emoji/Firefox.gif\" /> meow"      assert result["summary"] == expected      assert result["summary_html"] == expected_html @@ -126,10 +126,11 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do      other_user = insert(:user, %{nickname: "shp"})      {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!", "visibility" => "direct"}) +    object = Object.normalize(activity.data["object"])      result = ActivityView.render("activity.json", activity: activity) -    convo_id = TwitterAPI.context_to_conversation_id(activity.data["object"]["context"]) +    convo_id = Utils.context_to_conversation_id(object.data["context"])      expected = %{        "activity_type" => "post", @@ -137,8 +138,8 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do        "attentions" => [          UserView.render("show.json", %{user: other_user})        ], -      "created_at" => activity.data["object"]["published"] |> Utils.date_to_asctime(), -      "external_url" => activity.data["object"]["id"], +      "created_at" => object.data["published"] |> Utils.date_to_asctime(), +      "external_url" => object.data["id"],        "fave_num" => 0,        "favorited" => false,        "id" => activity.id, @@ -162,7 +163,7 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do          }\">@<span>shp</span></a></span>!",        "tags" => [],        "text" => "Hey @shp!", -      "uri" => activity.data["object"]["id"], +      "uri" => object.data["id"],        "user" => UserView.render("show.json", %{user: user}),        "visibility" => "direct",        "card" => nil, @@ -176,13 +177,14 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do      user = insert(:user)      other_user = insert(:user, %{nickname: "shp"})      {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"}) +    object = Object.normalize(activity.data["object"]) -    convo_id = TwitterAPI.context_to_conversation_id(activity.data["object"]["context"]) +    convo_id = Utils.context_to_conversation_id(object.data["context"])      mocks = [        { -        TwitterAPI, -        [], +        Utils, +        [:passthrough],          [context_to_conversation_id: fn _ -> false end]        },        { @@ -197,7 +199,7 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do        assert result["statusnet_conversation_id"] == convo_id        assert result["user"] -      refute called(TwitterAPI.context_to_conversation_id(:_)) +      refute called(Utils.context_to_conversation_id(:_))        refute called(User.get_cached_by_ap_id(user.ap_id))        refute called(User.get_cached_by_ap_id(other_user.ap_id))      end @@ -278,11 +280,11 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do      other_user = insert(:user, %{nickname: "shp"})      {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"}) -    {:ok, announce, _object} = CommonAPI.repeat(activity.id, other_user) +    {:ok, announce, object} = CommonAPI.repeat(activity.id, other_user) -    convo_id = TwitterAPI.context_to_conversation_id(activity.data["object"]["context"]) +    convo_id = Utils.context_to_conversation_id(object.data["context"]) -    activity = Repo.get(Activity, activity.id) +    activity = Activity.get_by_id(activity.id)      result = ActivityView.render("activity.json", activity: announce) @@ -358,7 +360,7 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do    test "a peertube video" do      {:ok, object} = -      ActivityPub.fetch_object_from_id( +      Pleroma.Object.Fetcher.fetch_object_from_id(          "https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3"        ) diff --git a/test/web/twitter_api/views/user_view_test.exs b/test/web/twitter_api/views/user_view_test.exs index 4e7f94795..c99dbddeb 100644 --- a/test/web/twitter_api/views/user_view_test.exs +++ b/test/web/twitter_api/views/user_view_test.exs @@ -89,29 +89,34 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "following" => false,        "follows_you" => false,        "statusnet_blocking" => false, -      "rights" => %{ -        "delete_others_notice" => false, -        "admin" => false -      },        "statusnet_profile_url" => user.ap_id,        "cover_photo" => banner,        "background_image" => nil,        "is_local" => true,        "locked" => false, -      "default_scope" => "public", -      "no_rich_text" => false,        "hide_follows" => false,        "hide_followers" => false,        "fields" => [],        "pleroma" => %{          "confirmation_pending" => false,          "tags" => [] -      } +      }, +      "rights" => %{"admin" => false, "delete_others_notice" => false}, +      "role" => "member"      }      assert represented == UserView.render("show.json", %{user: user})    end +  test "User exposes settings for themselves and only for themselves", %{user: user} do +    as_user = UserView.render("show.json", %{user: user, for: user}) +    assert as_user["default_scope"] == user.info.default_scope +    assert as_user["no_rich_text"] == user.info.no_rich_text +    as_stranger = UserView.render("show.json", %{user: user}) +    refute as_stranger["default_scope"] +    refute as_stranger["no_rich_text"] +  end +    test "A user for a given other follower", %{user: user} do      follower = insert(:user, %{following: [User.ap_followers(user)]})      {:ok, user} = User.update_follower_count(user) @@ -137,24 +142,20 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "following" => true,        "follows_you" => false,        "statusnet_blocking" => false, -      "rights" => %{ -        "delete_others_notice" => false, -        "admin" => false -      },        "statusnet_profile_url" => user.ap_id,        "cover_photo" => banner,        "background_image" => nil,        "is_local" => true,        "locked" => false, -      "default_scope" => "public", -      "no_rich_text" => false,        "hide_follows" => false,        "hide_followers" => false,        "fields" => [],        "pleroma" => %{          "confirmation_pending" => false,          "tags" => [] -      } +      }, +      "rights" => %{"admin" => false, "delete_others_notice" => false}, +      "role" => "member"      }      assert represented == UserView.render("show.json", %{user: user, for: follower}) @@ -186,24 +187,20 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "following" => false,        "follows_you" => true,        "statusnet_blocking" => false, -      "rights" => %{ -        "delete_others_notice" => false, -        "admin" => false -      },        "statusnet_profile_url" => follower.ap_id,        "cover_photo" => banner,        "background_image" => nil,        "is_local" => true,        "locked" => false, -      "default_scope" => "public", -      "no_rich_text" => false,        "hide_follows" => false,        "hide_followers" => false,        "fields" => [],        "pleroma" => %{          "confirmation_pending" => false,          "tags" => [] -      } +      }, +      "rights" => %{"admin" => false, "delete_others_notice" => false}, +      "role" => "member"      }      assert represented == UserView.render("show.json", %{user: follower, for: user}) @@ -272,27 +269,23 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "following" => false,        "follows_you" => false,        "statusnet_blocking" => true, -      "rights" => %{ -        "delete_others_notice" => false, -        "admin" => false -      },        "statusnet_profile_url" => user.ap_id,        "cover_photo" => banner,        "background_image" => nil,        "is_local" => true,        "locked" => false, -      "default_scope" => "public", -      "no_rich_text" => false,        "hide_follows" => false,        "hide_followers" => false,        "fields" => [],        "pleroma" => %{          "confirmation_pending" => false,          "tags" => [] -      } +      }, +      "rights" => %{"admin" => false, "delete_others_notice" => false}, +      "role" => "member"      } -    blocker = Repo.get(User, blocker.id) +    blocker = User.get_cached_by_id(blocker.id)      assert represented == UserView.render("show.json", %{user: user, for: blocker})    end  | 
