diff options
| author | lain <lain@soykaf.club> | 2019-11-05 15:21:00 +0100 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2019-11-05 15:21:00 +0100 | 
| commit | 1bd1f62af55e01613e6362661b36a19091c87424 (patch) | |
| tree | 519963a50af82c1a0b251f1405d663ba9ccd4714 /test/web/mastodon_api | |
| parent | faced6236b9e2ce9675cf743068f16098b744562 (diff) | |
| parent | f11eebc18383be7d7b4b037582e4e1e08b74653b (diff) | |
| download | pleroma-1bd1f62af55e01613e6362661b36a19091c87424.tar.gz pleroma-1bd1f62af55e01613e6362661b36a19091c87424.zip | |
Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into remake-remodel
Diffstat (limited to 'test/web/mastodon_api')
15 files changed, 392 insertions, 105 deletions
| diff --git a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs index 618031b40..519b56d6c 100644 --- a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs +++ b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs @@ -153,7 +153,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do          |> json_response(200)        assert response["pleroma"]["skip_thread_containment"] == true -      assert refresh_record(user).info.skip_thread_containment +      assert refresh_record(user).skip_thread_containment      end      test "updates the user's hide_follows status", %{conn: conn} do diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 6a59c3d94..8fc2d9300 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -237,6 +237,20 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        assert [%{"id" => id}] = json_response(conn, 200)        assert id == to_string(post.id)      end + +    test "the user views their own timelines and excludes direct messages", %{conn: conn} do +      user = insert(:user) +      {:ok, public_activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "public"}) +      {:ok, _direct_activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"}) + +      conn = +        conn +        |> assign(:user, user) +        |> get("/api/v1/accounts/#{user.id}/statuses", %{"exclude_visibilities" => ["direct"]}) + +      assert [%{"id" => id}] = json_response(conn, 200) +      assert id == to_string(public_activity.id) +    end    end    describe "followers" do @@ -255,7 +269,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      test "getting followers, hide_followers", %{conn: conn} do        user = insert(:user) -      other_user = insert(:user, %{info: %{hide_followers: true}}) +      other_user = insert(:user, hide_followers: true)        {:ok, _user} = User.follow(user, other_user)        conn = @@ -267,7 +281,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      test "getting followers, hide_followers, same user requesting", %{conn: conn} do        user = insert(:user) -      other_user = insert(:user, %{info: %{hide_followers: true}}) +      other_user = insert(:user, hide_followers: true)        {:ok, _user} = User.follow(user, other_user)        conn = @@ -335,7 +349,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      end      test "getting following, hide_follows", %{conn: conn} do -      user = insert(:user, %{info: %{hide_follows: true}}) +      user = insert(:user, hide_follows: true)        other_user = insert(:user)        {:ok, user} = User.follow(user, other_user) @@ -347,7 +361,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      end      test "getting following, hide_follows, same user requesting", %{conn: conn} do -      user = insert(:user, %{info: %{hide_follows: true}}) +      user = insert(:user, hide_follows: true)        other_user = insert(:user)        {:ok, user} = User.follow(user, other_user) @@ -457,7 +471,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        conn =          build_conn() -        |> assign(:user, follower) +        |> assign(:user, User.get_cached_by_id(follower.id))          |> post("/api/v1/accounts/#{followed.id}/follow?reblogs=true")        assert %{"showing_reblogs" => true} = json_response(conn, 200) @@ -669,7 +683,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        token_from_db = Repo.preload(token_from_db, :user)        assert token_from_db.user -      assert token_from_db.user.info.confirmation_pending +      assert token_from_db.user.confirmation_pending      end      test "returns error when user already registred", %{conn: conn, valid_params: valid_params} do @@ -713,7 +727,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          token_from_db = Repo.preload(token_from_db, :user)          assert token_from_db.user -        assert token_from_db.user.info.confirmation_pending +        assert token_from_db.user.confirmation_pending        end        conn = @@ -798,7 +812,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      end      test "verify_credentials default scope unlisted", %{conn: conn} do -      user = insert(:user, %{info: %User.Info{default_scope: "unlisted"}}) +      user = insert(:user, default_scope: "unlisted")        conn =          conn @@ -810,7 +824,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      end      test "locked accounts", %{conn: conn} do -      user = insert(:user, %{info: %User.Info{default_scope: "private"}}) +      user = insert(:user, default_scope: "private")        conn =          conn diff --git a/test/web/mastodon_api/controllers/conversation_controller_test.exs b/test/web/mastodon_api/controllers/conversation_controller_test.exs index a308a7620..542af4944 100644 --- a/test/web/mastodon_api/controllers/conversation_controller_test.exs +++ b/test/web/mastodon_api/controllers/conversation_controller_test.exs @@ -17,7 +17,7 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do      {:ok, user_two} = User.follow(user_two, user_one) -    assert User.get_cached_by_id(user_two.id).info.unread_conversation_count == 0 +    assert User.get_cached_by_id(user_two.id).unread_conversation_count == 0      {:ok, direct} =        CommonAPI.post(user_one, %{ @@ -25,7 +25,7 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do          "visibility" => "direct"        }) -    assert User.get_cached_by_id(user_two.id).info.unread_conversation_count == 1 +    assert User.get_cached_by_id(user_two.id).unread_conversation_count == 1      {:ok, _follower_only} =        CommonAPI.post(user_one, %{ @@ -54,9 +54,9 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do      assert user_two.id in account_ids      assert user_three.id in account_ids      assert is_binary(res_id) -    assert unread == true +    assert unread == false      assert res_last_status["id"] == direct.id -    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 1 +    assert User.get_cached_by_id(user_one.id).unread_conversation_count == 0    end    test "updates the last_status on reply", %{conn: conn} do @@ -95,19 +95,23 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do          "visibility" => "direct"        }) +    assert User.get_cached_by_id(user_one.id).unread_conversation_count == 0 +    assert User.get_cached_by_id(user_two.id).unread_conversation_count == 1 +      [%{"id" => direct_conversation_id, "unread" => true}] =        conn -      |> assign(:user, user_one) +      |> assign(:user, user_two)        |> get("/api/v1/conversations")        |> json_response(200)      %{"unread" => false} =        conn -      |> assign(:user, user_one) +      |> assign(:user, user_two)        |> post("/api/v1/conversations/#{direct_conversation_id}/read")        |> json_response(200) -    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 0 +    assert User.get_cached_by_id(user_one.id).unread_conversation_count == 0 +    assert User.get_cached_by_id(user_two.id).unread_conversation_count == 0      # The conversation is marked as unread on reply      {:ok, _} = @@ -123,7 +127,8 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do        |> get("/api/v1/conversations")        |> json_response(200) -    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 1 +    assert User.get_cached_by_id(user_one.id).unread_conversation_count == 1 +    assert User.get_cached_by_id(user_two.id).unread_conversation_count == 0      # A reply doesn't increment the user's unread_conversation_count if the conversation is unread      {:ok, _} = @@ -133,7 +138,8 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do          "in_reply_to_status_id" => direct.id        }) -    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 1 +    assert User.get_cached_by_id(user_one.id).unread_conversation_count == 1 +    assert User.get_cached_by_id(user_two.id).unread_conversation_count == 0    end    test "(vanilla) Mastodon frontend behaviour", %{conn: conn} do diff --git a/test/web/mastodon_api/controllers/follow_request_controller_test.exs b/test/web/mastodon_api/controllers/follow_request_controller_test.exs index 4bf292df5..288cd9029 100644 --- a/test/web/mastodon_api/controllers/follow_request_controller_test.exs +++ b/test/web/mastodon_api/controllers/follow_request_controller_test.exs @@ -12,13 +12,11 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestControllerTest do    describe "locked accounts" do      test "/api/v1/follow_requests works" do -      user = insert(:user, %{info: %User.Info{locked: true}}) +      user = insert(:user, locked: true)        other_user = insert(:user)        {:ok, _activity} = ActivityPub.follow(other_user, user) - -      user = User.get_cached_by_id(user.id) -      other_user = User.get_cached_by_id(other_user.id) +      {:ok, other_user} = User.follow(other_user, user, "pending")        assert User.following?(other_user, user) == false @@ -32,10 +30,11 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestControllerTest do      end      test "/api/v1/follow_requests/:id/authorize works" do -      user = insert(:user, %{info: %User.Info{locked: true}}) +      user = insert(:user, locked: true)        other_user = insert(:user)        {:ok, _activity} = ActivityPub.follow(other_user, user) +      {:ok, other_user} = User.follow(other_user, user, "pending")        user = User.get_cached_by_id(user.id)        other_user = User.get_cached_by_id(other_user.id) @@ -57,7 +56,7 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestControllerTest do      end      test "/api/v1/follow_requests/:id/reject works" do -      user = insert(:user, %{info: %User.Info{locked: true}}) +      user = insert(:user, locked: true)        other_user = insert(:user)        {:ok, _activity} = ActivityPub.follow(other_user, user) diff --git a/test/web/mastodon_api/controllers/instance_controller_test.exs b/test/web/mastodon_api/controllers/instance_controller_test.exs index f8049f81f..e00de6b18 100644 --- a/test/web/mastodon_api/controllers/instance_controller_test.exs +++ b/test/web/mastodon_api/controllers/instance_controller_test.exs @@ -41,20 +41,13 @@ defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do      user = insert(:user, %{local: true})      user2 = insert(:user, %{local: true}) -    {:ok, _user2} = User.deactivate(user2, !user2.info.deactivated) +    {:ok, _user2} = User.deactivate(user2, !user2.deactivated)      insert(:user, %{local: false, nickname: "u@peer1.com"})      insert(:user, %{local: false, nickname: "u@peer2.com"})      {:ok, _} = Pleroma.Web.CommonAPI.post(user, %{"status" => "cofe"}) -    # Stats should count users with missing or nil `info.deactivated` value - -    {:ok, _user} = -      user.id -      |> User.get_cached_by_id() -      |> User.update_info(&Ecto.Changeset.change(&1, %{deactivated: nil})) -      Pleroma.Stats.force_update()      conn = get(conn, "/api/v1/instance") diff --git a/test/web/mastodon_api/controllers/marker_controller_test.exs b/test/web/mastodon_api/controllers/marker_controller_test.exs new file mode 100644 index 000000000..1fcad873d --- /dev/null +++ b/test/web/mastodon_api/controllers/marker_controller_test.exs @@ -0,0 +1,124 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.MarkerControllerTest do +  use Pleroma.Web.ConnCase + +  import Pleroma.Factory + +  describe "GET /api/v1/markers" do +    test "gets markers with correct scopes", %{conn: conn} do +      user = insert(:user) +      token = insert(:oauth_token, user: user, scopes: ["read:statuses"]) + +      {:ok, %{"notifications" => marker}} = +        Pleroma.Marker.upsert( +          user, +          %{"notifications" => %{"last_read_id" => "69420"}} +        ) + +      response = +        conn +        |> assign(:user, user) +        |> assign(:token, token) +        |> get("/api/v1/markers", %{timeline: ["notifications"]}) +        |> json_response(200) + +      assert response == %{ +               "notifications" => %{ +                 "last_read_id" => "69420", +                 "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), +                 "version" => 0 +               } +             } +    end + +    test "gets markers with missed scopes", %{conn: conn} do +      user = insert(:user) +      token = insert(:oauth_token, user: user, scopes: []) + +      Pleroma.Marker.upsert(user, %{"notifications" => %{"last_read_id" => "69420"}}) + +      response = +        conn +        |> assign(:user, user) +        |> assign(:token, token) +        |> get("/api/v1/markers", %{timeline: ["notifications"]}) +        |> json_response(403) + +      assert response == %{"error" => "Insufficient permissions: read:statuses."} +    end +  end + +  describe "POST /api/v1/markers" do +    test "creates a marker with correct scopes", %{conn: conn} do +      user = insert(:user) +      token = insert(:oauth_token, user: user, scopes: ["write:statuses"]) + +      response = +        conn +        |> assign(:user, user) +        |> assign(:token, token) +        |> post("/api/v1/markers", %{ +          home: %{last_read_id: "777"}, +          notifications: %{"last_read_id" => "69420"} +        }) +        |> json_response(200) + +      assert %{ +               "notifications" => %{ +                 "last_read_id" => "69420", +                 "updated_at" => _, +                 "version" => 0 +               } +             } = response +    end + +    test "updates exist marker", %{conn: conn} do +      user = insert(:user) +      token = insert(:oauth_token, user: user, scopes: ["write:statuses"]) + +      {:ok, %{"notifications" => marker}} = +        Pleroma.Marker.upsert( +          user, +          %{"notifications" => %{"last_read_id" => "69477"}} +        ) + +      response = +        conn +        |> assign(:user, user) +        |> assign(:token, token) +        |> post("/api/v1/markers", %{ +          home: %{last_read_id: "777"}, +          notifications: %{"last_read_id" => "69888"} +        }) +        |> json_response(200) + +      assert response == %{ +               "notifications" => %{ +                 "last_read_id" => "69888", +                 "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), +                 "version" => 0 +               } +             } +    end + +    test "creates a marker with missed scopes", %{conn: conn} do +      user = insert(:user) +      token = insert(:oauth_token, user: user, scopes: []) + +      response = +        conn +        |> assign(:user, user) +        |> assign(:token, token) +        |> post("/api/v1/markers", %{ +          home: %{last_read_id: "777"}, +          notifications: %{"last_read_id" => "69420"} +        }) +        |> json_response(403) + +      assert response == %{"error" => "Insufficient permissions: write:statuses."} +    end +  end +end diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs index 6eadccb8e..c0b3621de 100644 --- a/test/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/web/mastodon_api/controllers/notification_controller_test.exs @@ -137,6 +137,57 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do      assert [%{"id" => ^notification3_id}, %{"id" => ^notification2_id}] = result    end +  test "filters notifications using exclude_visibilities", %{conn: conn} do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, public_activity} = +      CommonAPI.post(other_user, %{"status" => "@#{user.nickname}", "visibility" => "public"}) + +    {:ok, direct_activity} = +      CommonAPI.post(other_user, %{"status" => "@#{user.nickname}", "visibility" => "direct"}) + +    {:ok, unlisted_activity} = +      CommonAPI.post(other_user, %{"status" => "@#{user.nickname}", "visibility" => "unlisted"}) + +    {:ok, private_activity} = +      CommonAPI.post(other_user, %{"status" => "@#{user.nickname}", "visibility" => "private"}) + +    conn = assign(conn, :user, user) + +    conn_res = +      get(conn, "/api/v1/notifications", %{ +        exclude_visibilities: ["public", "unlisted", "private"] +      }) + +    assert [%{"status" => %{"id" => id}}] = json_response(conn_res, 200) +    assert id == direct_activity.id + +    conn_res = +      get(conn, "/api/v1/notifications", %{ +        exclude_visibilities: ["public", "unlisted", "direct"] +      }) + +    assert [%{"status" => %{"id" => id}}] = json_response(conn_res, 200) +    assert id == private_activity.id + +    conn_res = +      get(conn, "/api/v1/notifications", %{ +        exclude_visibilities: ["public", "private", "direct"] +      }) + +    assert [%{"status" => %{"id" => id}}] = json_response(conn_res, 200) +    assert id == unlisted_activity.id + +    conn_res = +      get(conn, "/api/v1/notifications", %{ +        exclude_visibilities: ["unlisted", "private", "direct"] +      }) + +    assert [%{"status" => %{"id" => id}}] = json_response(conn_res, 200) +    assert id == public_activity.id +  end +    test "filters notifications using exclude_types", %{conn: conn} do      user = insert(:user)      other_user = insert(:user) diff --git a/test/web/mastodon_api/controllers/search_controller_test.exs b/test/web/mastodon_api/controllers/search_controller_test.exs index ee413eef7..7953fad62 100644 --- a/test/web/mastodon_api/controllers/search_controller_test.exs +++ b/test/web/mastodon_api/controllers/search_controller_test.exs @@ -204,17 +204,17 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do        conn =          conn          |> assign(:user, user) -        |> get("/api/v1/search", %{"q" => "shp@social.heldscal.la", "resolve" => "true"}) +        |> get("/api/v1/search", %{"q" => "mike@osada.macgirvin.com", "resolve" => "true"})        assert results = json_response(conn, 200)        [account] = results["accounts"] -      assert account["acct"] == "shp@social.heldscal.la" +      assert account["acct"] == "mike@osada.macgirvin.com"      end      test "search doesn't fetch remote accounts if resolve is false", %{conn: conn} do        conn =          conn -        |> get("/api/v1/search", %{"q" => "shp@social.heldscal.la", "resolve" => "false"}) +        |> get("/api/v1/search", %{"q" => "mike@osada.macgirvin.com", "resolve" => "false"})        assert results = json_response(conn, 200)        assert [] == results["accounts"] diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index 2bbd8a151..2ce201e2e 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -12,6 +12,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do    alias Pleroma.Object    alias Pleroma.Repo    alias Pleroma.ScheduledActivity +  alias Pleroma.Tests.ObanHelpers    alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.CommonAPI @@ -19,6 +20,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do    import Pleroma.Factory    import ExUnit.CaptureLog +  clear_config([:instance, :federating]) +  clear_config([:instance, :allow_relay]) +    describe "posting statuses" do      setup do        user = insert(:user) @@ -30,6 +34,34 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do        [conn: conn]      end +    test "posting a status does not increment reblog_count when relaying", %{conn: conn} do +      Pleroma.Config.put([:instance, :federating], true) +      Pleroma.Config.get([:instance, :allow_relay], true) +      user = insert(:user) + +      response = +        conn +        |> assign(:user, user) +        |> post("api/v1/statuses", %{ +          "content_type" => "text/plain", +          "source" => "Pleroma FE", +          "status" => "Hello world", +          "visibility" => "public" +        }) +        |> json_response(200) + +      assert response["reblogs_count"] == 0 +      ObanHelpers.perform_all() + +      response = +        conn +        |> assign(:user, user) +        |> get("api/v1/statuses/#{response["id"]}", %{}) +        |> json_response(200) + +      assert response["reblogs_count"] == 0 +    end +      test "posting a status", %{conn: conn} do        idempotency_key = "Pikachu rocks!" @@ -527,8 +559,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do      test "when you're an admin or moderator", %{conn: conn} do        activity1 = insert(:note_activity)        activity2 = insert(:note_activity) -      admin = insert(:user, info: %{is_admin: true}) -      moderator = insert(:user, info: %{is_moderator: true}) +      admin = insert(:user, is_admin: true) +      moderator = insert(:user, is_moderator: true)        res_conn =          conn diff --git a/test/web/mastodon_api/controllers/timeline_controller_test.exs b/test/web/mastodon_api/controllers/timeline_controller_test.exs index d3652d964..61b6cea75 100644 --- a/test/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/web/mastodon_api/controllers/timeline_controller_test.exs @@ -11,7 +11,6 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do    alias Pleroma.Config    alias Pleroma.User    alias Pleroma.Web.CommonAPI -  alias Pleroma.Web.OStatus    clear_config([:instance, :public]) @@ -20,27 +19,52 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do      :ok    end -  test "the home timeline", %{conn: conn} do -    user = insert(:user) -    following = insert(:user) +  describe "home" do +    test "the home timeline", %{conn: conn} do +      user = insert(:user) +      following = insert(:user) + +      {:ok, _activity} = CommonAPI.post(following, %{"status" => "test"}) + +      conn = +        conn +        |> assign(:user, user) +        |> get("/api/v1/timelines/home") + +      assert Enum.empty?(json_response(conn, :ok)) + +      {:ok, user} = User.follow(user, following) + +      conn = +        build_conn() +        |> assign(:user, user) +        |> get("/api/v1/timelines/home") -    {:ok, _activity} = CommonAPI.post(following, %{"status" => "test"}) +      assert [%{"content" => "test"}] = json_response(conn, :ok) +    end -    conn = -      conn -      |> assign(:user, user) -      |> get("/api/v1/timelines/home") +    test "the home timeline when the direct messages are excluded", %{conn: conn} do +      user = insert(:user) +      {:ok, public_activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "public"}) +      {:ok, direct_activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"}) -    assert Enum.empty?(json_response(conn, :ok)) +      {:ok, unlisted_activity} = +        CommonAPI.post(user, %{"status" => ".", "visibility" => "unlisted"}) -    {:ok, user} = User.follow(user, following) +      {:ok, private_activity} = +        CommonAPI.post(user, %{"status" => ".", "visibility" => "private"}) -    conn = -      build_conn() -      |> assign(:user, user) -      |> get("/api/v1/timelines/home") +      conn = +        conn +        |> assign(:user, user) +        |> get("/api/v1/timelines/home", %{"exclude_visibilities" => ["direct"]}) -    assert [%{"content" => "test"}] = json_response(conn, :ok) +      assert status_ids = json_response(conn, :ok) |> Enum.map(& &1["id"]) +      assert public_activity.id in status_ids +      assert unlisted_activity.id in status_ids +      assert private_activity.id in status_ids +      refute direct_activity.id in status_ids +    end    end    describe "public" do @@ -50,8 +74,7 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do        {:ok, _activity} = CommonAPI.post(following, %{"status" => "test"}) -      {:ok, [_activity]} = -        OStatus.fetch_activity_from_url("https://shitposter.club/notice/2827873") +      _activity = insert(:note_activity, local: false)        conn = get(conn, "/api/v1/timelines/public", %{"local" => "False"}) @@ -246,9 +269,6 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do        {:ok, activity} = CommonAPI.post(following, %{"status" => "test #2hu"}) -      {:ok, [_activity]} = -        OStatus.fetch_activity_from_url("https://shitposter.club/notice/2827873") -        nconn = get(conn, "/api/v1/timelines/tag/2hu")        assert [%{"id" => id}] = json_response(nconn, :ok) diff --git a/test/web/mastodon_api/mastodon_api_test.exs b/test/web/mastodon_api/mastodon_api_test.exs index 7fcb2bd55..561ef05aa 100644 --- a/test/web/mastodon_api/mastodon_api_test.exs +++ b/test/web/mastodon_api/mastodon_api_test.exs @@ -14,11 +14,11 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPITest do    import Pleroma.Factory    describe "follow/3" do -    test "returns error when user deactivated" do +    test "returns error when followed user is deactivated" do        follower = insert(:user) -      user = insert(:user, local: true, info: %{deactivated: true}) +      user = insert(:user, local: true, deactivated: true)        {:error, error} = MastodonAPI.follow(follower, user) -      assert error == "Could not follow user: You are deactivated." +      assert error == "Could not follow user: #{user.nickname} is deactivated."      end      test "following for user" do diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index b7a4938a6..af88841ed 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -26,12 +26,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      user =        insert(:user, %{ -        info: %{ -          note_count: 5, -          follower_count: 3, -          source_data: source_data, -          background: background_image -        }, +        follower_count: 3, +        note_count: 5, +        source_data: source_data, +        background: background_image,          nickname: "shp@shitposter.club",          name: ":karjalanpiirakka: shp",          bio: "<script src=\"invalid-html\"></script><span>valid html</span>", @@ -101,7 +99,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        "non_followers" => true      } -    privacy = user.info.default_scope +    privacy = user.default_scope      assert %{               pleroma: %{notification_settings: ^notification_settings}, @@ -112,7 +110,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do    test "Represent a Service(bot) account" do      user =        insert(:user, %{ -        info: %{note_count: 5, follower_count: 3, source_data: %{"type" => "Service"}}, +        follower_count: 3, +        note_count: 5, +        source_data: %{"type" => "Service"},          nickname: "shp@shitposter.club",          inserted_at: ~N[2017-08-15 15:47:06.597036]        }) @@ -164,8 +164,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do    end    test "Represent a deactivated user for an admin" do -    admin = insert(:user, %{info: %{is_admin: true}}) -    deactivated_user = insert(:user, %{info: %{deactivated: true}}) +    admin = insert(:user, is_admin: true) +    deactivated_user = insert(:user, deactivated: true)      represented = AccountView.render("show.json", %{user: deactivated_user, for: admin})      assert represented[:pleroma][:deactivated] == true    end @@ -253,7 +253,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      test "represent a relationship for the user with a pending follow request" do        user = insert(:user) -      other_user = insert(:user, %{info: %User.Info{locked: true}}) +      other_user = insert(:user, locked: true)        {:ok, user, other_user, _} = CommonAPI.follow(user, other_user)        user = User.get_cached_by_id(user.id) @@ -282,7 +282,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do    test "represent an embedded relationship" do      user =        insert(:user, %{ -        info: %{note_count: 5, follower_count: 0, source_data: %{"type" => "Service"}}, +        follower_count: 0, +        note_count: 5, +        source_data: %{"type" => "Service"},          nickname: "shp@shitposter.club",          inserted_at: ~N[2017-08-15 15:47:06.597036]        }) @@ -352,7 +354,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do    end    test "returns the settings store if the requesting user is the represented user and it's requested specifically" do -    user = insert(:user, %{info: %User.Info{pleroma_settings_store: %{fe: "test"}}}) +    user = insert(:user, pleroma_settings_store: %{fe: "test"})      result =        AccountView.render("show.json", %{user: user, for: user, with_pleroma_settings: true}) @@ -374,14 +376,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do    describe "hiding follows/following" do      test "shows when follows/followers stats are hidden and sets follow/follower count to 0" do -      info = %{ -        hide_followers: true, -        hide_followers_count: true, -        hide_follows: true, -        hide_follows_count: true -      } - -      user = insert(:user, info: info) +      user = +        insert(:user, %{ +          hide_followers: true, +          hide_followers_count: true, +          hide_follows: true, +          hide_follows_count: true +        })        other_user = insert(:user)        {:ok, user, other_user, _activity} = CommonAPI.follow(user, other_user) @@ -395,7 +396,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      end      test "shows when follows/followers are hidden" do -      user = insert(:user, info: %{hide_followers: true, hide_follows: true}) +      user = insert(:user, hide_followers: true, hide_follows: true)        other_user = insert(:user)        {:ok, user, other_user, _activity} = CommonAPI.follow(user, other_user)        {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user) @@ -408,7 +409,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      end      test "shows actual follower/following count to the account owner" do -      user = insert(:user, info: %{hide_followers: true, hide_follows: true}) +      user = insert(:user, hide_followers: true, hide_follows: true)        other_user = insert(:user)        {:ok, user, other_user, _activity} = CommonAPI.follow(user, other_user)        {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user) @@ -424,8 +425,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        other_user = insert(:user)        {:ok, _activity} = -        CommonAPI.post(user, %{ -          "status" => "Hey @#{other_user.nickname}.", +        CommonAPI.post(other_user, %{ +          "status" => "Hey @#{user.nickname}.",            "visibility" => "direct"          }) @@ -456,7 +457,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      end      test "shows non-zero when follow requests are pending" do -      user = insert(:user, %{info: %{locked: true}}) +      user = insert(:user, locked: true)        assert %{locked: true} = AccountView.render("show.json", %{user: user, for: user}) @@ -468,7 +469,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      end      test "decreases when accepting a follow request" do -      user = insert(:user, %{info: %{locked: true}}) +      user = insert(:user, locked: true)        assert %{locked: true} = AccountView.render("show.json", %{user: user, for: user}) @@ -485,7 +486,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      end      test "decreases when rejecting a follow request" do -      user = insert(:user, %{info: %{locked: true}}) +      user = insert(:user, locked: true)        assert %{locked: true} = AccountView.render("show.json", %{user: user, for: user}) @@ -502,14 +503,14 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do      end      test "shows non-zero when historical unapproved requests are present" do -      user = insert(:user, %{info: %{locked: true}}) +      user = insert(:user, locked: true)        assert %{locked: true} = AccountView.render("show.json", %{user: user, for: user})        other_user = insert(:user)        {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user) -      {:ok, user} = User.update_info(user, &User.Info.user_upgrade(&1, %{locked: false})) +      {:ok, user} = User.update_and_set_cache(user, %{locked: false})        assert %{locked: false, follow_requests_count: 1} =                 AccountView.render("show.json", %{user: user, for: user}) diff --git a/test/web/mastodon_api/views/conversation_view_test.exs b/test/web/mastodon_api/views/conversation_view_test.exs index a2a880705..6ed22597d 100644 --- a/test/web/mastodon_api/views/conversation_view_test.exs +++ b/test/web/mastodon_api/views/conversation_view_test.exs @@ -30,5 +30,6 @@ defmodule Pleroma.Web.MastodonAPI.ConversationViewTest do      assert [account] = conversation.accounts      assert account.id == other_user.id +    assert conversation.last_status.pleroma.direct_conversation_id == participation.id    end  end diff --git a/test/web/mastodon_api/views/marker_view_test.exs b/test/web/mastodon_api/views/marker_view_test.exs new file mode 100644 index 000000000..8a5c89d56 --- /dev/null +++ b/test/web/mastodon_api/views/marker_view_test.exs @@ -0,0 +1,27 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.MarkerViewTest do +  use Pleroma.DataCase +  alias Pleroma.Web.MastodonAPI.MarkerView +  import Pleroma.Factory + +  test "returns markers" do +    marker1 = insert(:marker, timeline: "notifications", last_read_id: "17") +    marker2 = insert(:marker, timeline: "home", last_read_id: "42") + +    assert MarkerView.render("markers.json", %{markers: [marker1, marker2]}) == %{ +             "home" => %{ +               last_read_id: "42", +               updated_at: NaiveDateTime.to_iso8601(marker2.updated_at), +               version: 0 +             }, +             "notifications" => %{ +               last_read_id: "17", +               updated_at: NaiveDateTime.to_iso8601(marker1.updated_at), +               version: 0 +             } +           } +  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 1d5a6e956..d46ecc646 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -7,6 +7,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do    alias Pleroma.Activity    alias Pleroma.Bookmark +  alias Pleroma.Conversation.Participation +  alias Pleroma.HTML    alias Pleroma.Object    alias Pleroma.Repo    alias Pleroma.User @@ -14,7 +16,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do    alias Pleroma.Web.CommonAPI.Utils    alias Pleroma.Web.MastodonAPI.AccountView    alias Pleroma.Web.MastodonAPI.StatusView -  alias Pleroma.Web.OStatus    import Pleroma.Factory    import Tesla.Mock @@ -23,10 +24,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      :ok    end -  test "returns the direct conversation id when given the `with_conversation_id` option" do +  test "loads and returns the direct conversation id when given the `with_direct_conversation_id` option" do      user = insert(:user)      {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!", "visibility" => "direct"}) +    [participation] = Participation.for_user(user)      status =        StatusView.render("show.json", @@ -35,7 +37,26 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do          for: user        ) -    assert status[:pleroma][:direct_conversation_id] +    assert status[:pleroma][:direct_conversation_id] == participation.id + +    status = StatusView.render("show.json", activity: activity, for: user) +    assert status[:pleroma][:direct_conversation_id] == nil +  end + +  test "returns the direct conversation id when given the `direct_conversation_id` option" do +    user = insert(:user) + +    {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!", "visibility" => "direct"}) +    [participation] = Participation.for_user(user) + +    status = +      StatusView.render("show.json", +        activity: activity, +        direct_conversation_id: participation.id, +        for: user +      ) + +    assert status[:pleroma][:direct_conversation_id] == participation.id    end    test "returns a temporary ap_id based user for activities missing db users" do @@ -108,7 +129,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do        in_reply_to_account_id: nil,        card: nil,        reblog: nil, -      content: HtmlSanitizeEx.basic_html(object_data["content"]), +      content: HTML.filter_tags(object_data["content"]),        created_at: created_at,        reblogs_count: 0,        replies_count: 0, @@ -120,7 +141,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do        pinned: false,        sensitive: false,        poll: nil, -      spoiler_text: HtmlSanitizeEx.basic_html(object_data["summary"]), +      spoiler_text: HTML.filter_tags(object_data["summary"]),        visibility: "public",        media_attachments: [],        mentions: [], @@ -147,8 +168,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do          local: true,          conversation_id: convo_id,          in_reply_to_account_acct: nil, -        content: %{"text/plain" => HtmlSanitizeEx.strip_tags(object_data["content"])}, -        spoiler_text: %{"text/plain" => HtmlSanitizeEx.strip_tags(object_data["summary"])}, +        content: %{"text/plain" => HTML.strip_tags(object_data["content"])}, +        spoiler_text: %{"text/plain" => HTML.strip_tags(object_data["summary"])},          expires_at: nil,          direct_conversation_id: nil,          thread_muted: false @@ -230,17 +251,15 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do    end    test "contains mentions" do -    incoming = File.read!("test/fixtures/incoming_reply_mastodon.xml") -    # a user with this ap id might be in the cache. -    recipient = "https://pleroma.soykaf.com/users/lain" -    user = insert(:user, %{ap_id: recipient}) +    user = insert(:user) +    mentioned = insert(:user) -    {:ok, [activity]} = OStatus.handle_incoming(incoming) +    {:ok, activity} = CommonAPI.post(user, %{"status" => "hi @#{mentioned.nickname}"})      status = StatusView.render("show.json", %{activity: activity})      assert status.mentions == -             Enum.map([user], fn u -> AccountView.render("mention.json", %{user: u}) end) +             Enum.map([mentioned], fn u -> AccountView.render("mention.json", %{user: u}) end)    end    test "create mentions from the 'to' field" do | 
