diff options
| author | Egor Kislitsyn <egor@kislitsyn.com> | 2020-04-27 20:46:52 +0400 | 
|---|---|---|
| committer | Egor Kislitsyn <egor@kislitsyn.com> | 2020-04-27 20:46:52 +0400 | 
| commit | 2efc00b3cf5413ae7f8e8411ee1372343ee2618a (patch) | |
| tree | a705f5a88014ff0b4665ca6c3a1529b660b70ffc /test/web/mastodon_api/controllers | |
| parent | f1ca917bb0d733445657e0be92440dedc2f8d3c6 (diff) | |
| download | pleroma-2efc00b3cf5413ae7f8e8411ee1372343ee2618a.tar.gz pleroma-2efc00b3cf5413ae7f8e8411ee1372343ee2618a.zip | |
Use `json_response_and_validate_schema/2` in tests to validate OpenAPI schema
Diffstat (limited to 'test/web/mastodon_api/controllers')
| -rw-r--r-- | test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs | 60 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/account_controller_test.exs | 569 | 
2 files changed, 287 insertions, 342 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 a3356c12f..fdb6d4c5d 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 @@ -26,7 +26,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do            }          }) -      assert user_data = json_response(res_conn, 200) +      assert user_data = json_response_and_validate_schema(res_conn, 200)        assert user_data["pleroma"]["settings_store"] == %{"pleroma_fe" => %{"theme" => "bla"}}        user = Repo.get(User, user_data["id"]) @@ -42,7 +42,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do            }          }) -      assert user_data = json_response(res_conn, 200) +      assert user_data = json_response_and_validate_schema(res_conn, 200)        assert user_data["pleroma"]["settings_store"] ==                 %{ @@ -63,7 +63,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do            }          }) -      assert user_data = json_response(res_conn, 200) +      assert user_data = json_response_and_validate_schema(res_conn, 200)        assert user_data["pleroma"]["settings_store"] ==                 %{ @@ -80,7 +80,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do            "note" => "I drink #cofe with @#{user2.nickname}\n\nsuya.."          }) -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["note"] ==                 ~s(I drink <a class="hashtag" data-tag="cofe" href="http://localhost:4001/tag/cofe">#cofe</a> with <span class="h-card"><a class="u-url mention" data-user="#{ @@ -91,7 +91,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do      test "updates the user's locking status", %{conn: conn} do        conn = patch(conn, "/api/v1/accounts/update_credentials", %{locked: "true"}) -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["locked"] == true      end @@ -101,21 +101,21 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        conn = patch(conn, "/api/v1/accounts/update_credentials", %{allow_following_move: "false"})        assert refresh_record(user).allow_following_move == false -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["pleroma"]["allow_following_move"] == false      end      test "updates the user's default scope", %{conn: conn} do        conn = patch(conn, "/api/v1/accounts/update_credentials", %{default_scope: "unlisted"}) -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["source"]["privacy"] == "unlisted"      end      test "updates the user's hide_followers status", %{conn: conn} do        conn = patch(conn, "/api/v1/accounts/update_credentials", %{hide_followers: "true"}) -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["pleroma"]["hide_followers"] == true      end @@ -123,12 +123,12 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        assert %{"source" => %{"pleroma" => %{"discoverable" => true}}} =                 conn                 |> patch("/api/v1/accounts/update_credentials", %{discoverable: "true"}) -               |> json_response(:ok) +               |> json_response_and_validate_schema(:ok)        assert %{"source" => %{"pleroma" => %{"discoverable" => false}}} =                 conn                 |> patch("/api/v1/accounts/update_credentials", %{discoverable: "false"}) -               |> json_response(:ok) +               |> json_response_and_validate_schema(:ok)      end      test "updates the user's hide_followers_count and hide_follows_count", %{conn: conn} do @@ -138,7 +138,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do            hide_follows_count: "true"          }) -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["pleroma"]["hide_followers_count"] == true        assert user_data["pleroma"]["hide_follows_count"] == true      end @@ -147,7 +147,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        response =          conn          |> patch("/api/v1/accounts/update_credentials", %{skip_thread_containment: "true"}) -        |> json_response(200) +        |> json_response_and_validate_schema(200)        assert response["pleroma"]["skip_thread_containment"] == true        assert refresh_record(user).skip_thread_containment @@ -156,28 +156,28 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do      test "updates the user's hide_follows status", %{conn: conn} do        conn = patch(conn, "/api/v1/accounts/update_credentials", %{hide_follows: "true"}) -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["pleroma"]["hide_follows"] == true      end      test "updates the user's hide_favorites status", %{conn: conn} do        conn = patch(conn, "/api/v1/accounts/update_credentials", %{hide_favorites: "true"}) -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["pleroma"]["hide_favorites"] == true      end      test "updates the user's show_role status", %{conn: conn} do        conn = patch(conn, "/api/v1/accounts/update_credentials", %{show_role: "false"}) -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["source"]["pleroma"]["show_role"] == false      end      test "updates the user's no_rich_text status", %{conn: conn} do        conn = patch(conn, "/api/v1/accounts/update_credentials", %{no_rich_text: "true"}) -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["source"]["pleroma"]["no_rich_text"] == true      end @@ -185,7 +185,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        conn =          patch(conn, "/api/v1/accounts/update_credentials", %{"display_name" => "markorepairs"}) -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["display_name"] == "markorepairs"      end @@ -198,7 +198,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        conn = patch(conn, "/api/v1/accounts/update_credentials", %{"avatar" => new_avatar}) -      assert user_response = json_response(conn, 200) +      assert user_response = json_response_and_validate_schema(conn, 200)        assert user_response["avatar"] != User.avatar_url(user)      end @@ -211,7 +211,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        conn = patch(conn, "/api/v1/accounts/update_credentials", %{"header" => new_header}) -      assert user_response = json_response(conn, 200) +      assert user_response = json_response_and_validate_schema(conn, 200)        assert user_response["header"] != User.banner_url(user)      end @@ -227,7 +227,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do            "pleroma_background_image" => new_header          }) -      assert user_response = json_response(conn, 200) +      assert user_response = json_response_and_validate_schema(conn, 200)        assert user_response["pleroma"]["background_image"]      end @@ -244,9 +244,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do          if token == token1 do            assert %{"error" => "Insufficient permissions: write:accounts."} == -                   json_response(conn, 403) +                   json_response_and_validate_schema(conn, 403)          else -          assert json_response(conn, 200) +          assert json_response_and_validate_schema(conn, 200)          end        end      end @@ -261,11 +261,11 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do            "display_name" => name          }) -      assert json_response(ret_conn, 200) +      assert json_response_and_validate_schema(ret_conn, 200)        conn = get(conn, "/api/v1/accounts/#{user.id}") -      assert user_data = json_response(conn, 200) +      assert user_data = json_response_and_validate_schema(conn, 200)        assert user_data["note"] == note        assert user_data["display_name"] == name @@ -281,7 +281,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        account_data =          conn          |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) -        |> json_response(200) +        |> json_response_and_validate_schema(200)        assert account_data["fields"] == [                 %{"name" => "<a href=\"http://google.com\">foo</a>", "value" => "bar"}, @@ -314,7 +314,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do          conn          |> put_req_header("content-type", "application/x-www-form-urlencoded")          |> patch("/api/v1/accounts/update_credentials", fields) -        |> json_response(200) +        |> json_response_and_validate_schema(200)        assert account["fields"] == [                 %{"name" => "foo", "value" => "bar"}, @@ -339,7 +339,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        account =          conn          |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) -        |> json_response(200) +        |> json_response_and_validate_schema(200)        assert account["fields"] == [                 %{"name" => "foo", "value" => ""} @@ -358,14 +358,14 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        assert %{"error" => "Invalid request"} ==                 conn                 |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) -               |> json_response(403) +               |> json_response_and_validate_schema(403)        fields = [%{"name" => long_name, "value" => "bar"}]        assert %{"error" => "Invalid request"} ==                 conn                 |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) -               |> json_response(403) +               |> json_response_and_validate_schema(403)        Pleroma.Config.put([:instance, :max_account_fields], 1) @@ -377,7 +377,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        assert %{"error" => "Invalid request"} ==                 conn                 |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) -               |> json_response(403) +               |> json_response_and_validate_schema(403)      end    end  end diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index d885b5e08..ba70ba66c 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -10,54 +10,46 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do    alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.ActivityPub.InternalFetchActor -  alias Pleroma.Web.ApiSpec    alias Pleroma.Web.CommonAPI    alias Pleroma.Web.OAuth.Token -  import OpenApiSpex.TestAssertions    import Pleroma.Factory    describe "account fetching" do      setup do: clear_config([:instance, :limit_to_local_content])      test "works by id" do -      user = insert(:user) +      %User{id: user_id} = insert(:user) -      conn = -        build_conn() -        |> get("/api/v1/accounts/#{user.id}") - -      assert %{"id" => id} = json_response(conn, 200) -      assert id == to_string(user.id) +      assert %{"id" => ^user_id} = +               build_conn() +               |> get("/api/v1/accounts/#{user_id}") +               |> json_response_and_validate_schema(200) -      conn = -        build_conn() -        |> get("/api/v1/accounts/-1") - -      assert %{"error" => "Can't find user"} = json_response(conn, 404) +      assert %{"error" => "Can't find user"} = +               build_conn() +               |> get("/api/v1/accounts/-1") +               |> json_response_and_validate_schema(404)      end      test "works by nickname" do        user = insert(:user) -      conn = -        build_conn() -        |> get("/api/v1/accounts/#{user.nickname}") - -      assert %{"id" => id} = json_response(conn, 200) -      assert id == user.id +      assert %{"id" => user_id} = +               build_conn() +               |> get("/api/v1/accounts/#{user.nickname}") +               |> json_response_and_validate_schema(200)      end      test "works by nickname for remote users" do        Config.put([:instance, :limit_to_local_content], false) -      user = insert(:user, nickname: "user@example.com", local: false) -      conn = -        build_conn() -        |> get("/api/v1/accounts/#{user.nickname}") +      user = insert(:user, nickname: "user@example.com", local: false) -      assert %{"id" => id} = json_response(conn, 200) -      assert id == user.id +      assert %{"id" => user_id} = +               build_conn() +               |> get("/api/v1/accounts/#{user.nickname}") +               |> json_response_and_validate_schema(200)      end      test "respects limit_to_local_content == :all for remote user nicknames" do @@ -65,11 +57,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        user = insert(:user, nickname: "user@example.com", local: false) -      conn = -        build_conn() -        |> get("/api/v1/accounts/#{user.nickname}") - -      assert json_response(conn, 404) +      assert build_conn() +             |> get("/api/v1/accounts/#{user.nickname}") +             |> json_response_and_validate_schema(404)      end      test "respects limit_to_local_content == :unauthenticated for remote user nicknames" do @@ -82,7 +72,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          build_conn()          |> get("/api/v1/accounts/#{user.nickname}") -      assert json_response(conn, 404) +      assert json_response_and_validate_schema(conn, 404)        conn =          build_conn() @@ -90,7 +80,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> assign(:token, insert(:oauth_token, user: reading_user, scopes: ["read:accounts"]))          |> get("/api/v1/accounts/#{user.nickname}") -      assert %{"id" => id} = json_response(conn, 200) +      assert %{"id" => id} = json_response_and_validate_schema(conn, 200)        assert id == user.id      end @@ -101,21 +91,21 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        user_one = insert(:user, %{id: 1212})        user_two = insert(:user, %{nickname: "#{user_one.id}garbage"}) -      resp_one = +      acc_one =          conn          |> get("/api/v1/accounts/#{user_one.id}") +        |> json_response_and_validate_schema(:ok) -      resp_two = +      acc_two =          conn          |> get("/api/v1/accounts/#{user_two.nickname}") +        |> json_response_and_validate_schema(:ok) -      resp_three = +      acc_three =          conn          |> get("/api/v1/accounts/#{user_two.id}") +        |> json_response_and_validate_schema(:ok) -      acc_one = json_response(resp_one, 200) -      acc_two = json_response(resp_two, 200) -      acc_three = json_response(resp_three, 200)        refute acc_one == acc_two        assert acc_two == acc_three      end @@ -123,23 +113,19 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      test "returns 404 when user is invisible", %{conn: conn} do        user = insert(:user, %{invisible: true}) -      resp = -        conn -        |> get("/api/v1/accounts/#{user.nickname}") -        |> json_response(404) - -      assert %{"error" => "Can't find user"} = resp +      assert %{"error" => "Can't find user"} = +               conn +               |> get("/api/v1/accounts/#{user.nickname}") +               |> json_response_and_validate_schema(404)      end      test "returns 404 for internal.fetch actor", %{conn: conn} do        %User{nickname: "internal.fetch"} = InternalFetchActor.get_actor() -      resp = -        conn -        |> get("/api/v1/accounts/internal.fetch") -        |> json_response(404) - -      assert %{"error" => "Can't find user"} = resp +      assert %{"error" => "Can't find user"} = +               conn +               |> get("/api/v1/accounts/internal.fetch") +               |> json_response_and_validate_schema(404)      end    end @@ -157,27 +143,25 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      setup do: clear_config([:restrict_unauthenticated, :profiles, :remote], true)      test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do -      res_conn = get(conn, "/api/v1/accounts/#{local.id}") - -      assert json_response(res_conn, :not_found) == %{ -               "error" => "Can't find user" -             } - -      res_conn = get(conn, "/api/v1/accounts/#{remote.id}") +      assert %{"error" => "Can't find user"} == +               conn +               |> get("/api/v1/accounts/#{local.id}") +               |> json_response_and_validate_schema(:not_found) -      assert json_response(res_conn, :not_found) == %{ -               "error" => "Can't find user" -             } +      assert %{"error" => "Can't find user"} == +               conn +               |> get("/api/v1/accounts/#{remote.id}") +               |> json_response_and_validate_schema(:not_found)      end      test "if user is authenticated", %{local: local, remote: remote} do        %{conn: conn} = oauth_access(["read"])        res_conn = get(conn, "/api/v1/accounts/#{local.id}") -      assert %{"id" => _} = json_response(res_conn, 200) +      assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200)        res_conn = get(conn, "/api/v1/accounts/#{remote.id}") -      assert %{"id" => _} = json_response(res_conn, 200) +      assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200)      end    end @@ -189,22 +173,22 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do        res_conn = get(conn, "/api/v1/accounts/#{local.id}") -      assert json_response(res_conn, :not_found) == %{ +      assert json_response_and_validate_schema(res_conn, :not_found) == %{                 "error" => "Can't find user"               }        res_conn = get(conn, "/api/v1/accounts/#{remote.id}") -      assert %{"id" => _} = json_response(res_conn, 200) +      assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200)      end      test "if user is authenticated", %{local: local, remote: remote} do        %{conn: conn} = oauth_access(["read"])        res_conn = get(conn, "/api/v1/accounts/#{local.id}") -      assert %{"id" => _} = json_response(res_conn, 200) +      assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200)        res_conn = get(conn, "/api/v1/accounts/#{remote.id}") -      assert %{"id" => _} = json_response(res_conn, 200) +      assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200)      end    end @@ -215,11 +199,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do        res_conn = get(conn, "/api/v1/accounts/#{local.id}") -      assert %{"id" => _} = json_response(res_conn, 200) +      assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200)        res_conn = get(conn, "/api/v1/accounts/#{remote.id}") -      assert json_response(res_conn, :not_found) == %{ +      assert json_response_and_validate_schema(res_conn, :not_found) == %{                 "error" => "Can't find user"               }      end @@ -228,10 +212,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        %{conn: conn} = oauth_access(["read"])        res_conn = get(conn, "/api/v1/accounts/#{local.id}") -      assert %{"id" => _} = json_response(res_conn, 200) +      assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200)        res_conn = get(conn, "/api/v1/accounts/#{remote.id}") -      assert %{"id" => _} = json_response(res_conn, 200) +      assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200)      end    end @@ -247,28 +231,37 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        {:ok, activity} = CommonAPI.post(user_two, %{"status" => "User one sux0rz"})        {:ok, repeat, _} = CommonAPI.repeat(activity.id, user_three) -      assert resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") |> json_response(200) +      assert resp = +               conn +               |> get("/api/v1/accounts/#{user_two.id}/statuses") +               |> json_response_and_validate_schema(200) +        assert [%{"id" => id}] = resp -      assert_schema(resp, "StatusesResponse", ApiSpec.spec())        assert id == activity.id        # Even a blocked user will deliver the full user timeline, there would be        #   no point in looking at a blocked users timeline otherwise -      assert resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") |> json_response(200) +      assert resp = +               conn +               |> get("/api/v1/accounts/#{user_two.id}/statuses") +               |> json_response_and_validate_schema(200) +        assert [%{"id" => id}] = resp        assert id == activity.id -      assert_schema(resp, "StatusesResponse", ApiSpec.spec())        # Third user's timeline includes the repeat when viewed by unauthenticated user -      resp = get(build_conn(), "/api/v1/accounts/#{user_three.id}/statuses") |> json_response(200) +      resp = +        build_conn() +        |> get("/api/v1/accounts/#{user_three.id}/statuses") +        |> json_response_and_validate_schema(200) +        assert [%{"id" => id}] = resp        assert id == repeat.id -      assert_schema(resp, "StatusesResponse", ApiSpec.spec())        # When viewing a third user's timeline, the blocked users' statuses will NOT be shown        resp = get(conn, "/api/v1/accounts/#{user_three.id}/statuses") -      assert [] = json_response(resp, 200) +      assert [] == json_response_and_validate_schema(resp, 200)      end      test "gets users statuses", %{conn: conn} do @@ -289,34 +282,36 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        {:ok, private_activity} =          CommonAPI.post(user_one, %{"status" => "private", "visibility" => "private"}) -      resp = get(conn, "/api/v1/accounts/#{user_one.id}/statuses") |> json_response(200) +      # TODO!!! +      resp = +        conn +        |> get("/api/v1/accounts/#{user_one.id}/statuses") +        |> json_response_and_validate_schema(200) +        assert [%{"id" => id}] = resp        assert id == to_string(activity.id) -      assert_schema(resp, "StatusesResponse", ApiSpec.spec())        resp =          conn          |> assign(:user, user_two)          |> assign(:token, insert(:oauth_token, user: user_two, scopes: ["read:statuses"]))          |> get("/api/v1/accounts/#{user_one.id}/statuses") -        |> json_response(200) +        |> json_response_and_validate_schema(200)        assert [%{"id" => id_one}, %{"id" => id_two}] = resp        assert id_one == to_string(direct_activity.id)        assert id_two == to_string(activity.id) -      assert_schema(resp, "StatusesResponse", ApiSpec.spec())        resp =          conn          |> assign(:user, user_three)          |> assign(:token, insert(:oauth_token, user: user_three, scopes: ["read:statuses"]))          |> get("/api/v1/accounts/#{user_one.id}/statuses") -        |> json_response(200) +        |> json_response_and_validate_schema(200)        assert [%{"id" => id_one}, %{"id" => id_two}] = resp        assert id_one == to_string(private_activity.id)        assert id_two == to_string(activity.id) -      assert_schema(resp, "StatusesResponse", ApiSpec.spec())      end      test "unimplemented pinned statuses feature", %{conn: conn} do @@ -325,7 +320,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?pinned=true") -      assert json_response(conn, 200) == [] +      assert json_response_and_validate_schema(conn, 200) == []      end      test "gets an users media", %{conn: conn} do @@ -340,61 +335,48 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        {:ok, %{id: media_id}} = ActivityPub.upload(file, actor: user.ap_id) -      {:ok, image_post} = CommonAPI.post(user, %{"status" => "cofe", "media_ids" => [media_id]}) +      {:ok, %{id: image_post_id}} = +        CommonAPI.post(user, %{"status" => "cofe", "media_ids" => [media_id]})        conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?only_media=true") -      assert [%{"id" => id}] = json_response(conn, 200) -      assert id == to_string(image_post.id) -      assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert [%{"id" => ^image_post_id}] = json_response_and_validate_schema(conn, 200)        conn = get(build_conn(), "/api/v1/accounts/#{user.id}/statuses?only_media=1") -      assert [%{"id" => id}] = json_response(conn, 200) -      assert id == to_string(image_post.id) -      assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert [%{"id" => ^image_post_id}] = json_response_and_validate_schema(conn, 200)      end      test "gets a user's statuses without reblogs", %{user: user, conn: conn} do -      {:ok, post} = CommonAPI.post(user, %{"status" => "HI!!!"}) -      {:ok, _, _} = CommonAPI.repeat(post.id, user) +      {:ok, %{id: post_id}} = CommonAPI.post(user, %{"status" => "HI!!!"}) +      {:ok, _, _} = CommonAPI.repeat(post_id, user)        conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_reblogs=true") - -      assert [%{"id" => id}] = json_response(conn, 200) -      assert id == to_string(post.id) -      assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert [%{"id" => ^post_id}] = json_response_and_validate_schema(conn, 200)        conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_reblogs=1") - -      assert [%{"id" => id}] = json_response(conn, 200) -      assert id == to_string(post.id) -      assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert [%{"id" => ^post_id}] = json_response_and_validate_schema(conn, 200)      end      test "filters user's statuses by a hashtag", %{user: user, conn: conn} do -      {:ok, post} = CommonAPI.post(user, %{"status" => "#hashtag"}) +      {:ok, %{id: post_id}} = CommonAPI.post(user, %{"status" => "#hashtag"})        {:ok, _post} = CommonAPI.post(user, %{"status" => "hashtag"})        conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?tagged=hashtag") - -      assert [%{"id" => id}] = json_response(conn, 200) -      assert id == to_string(post.id) -      assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert [%{"id" => ^post_id}] = json_response_and_validate_schema(conn, 200)      end      test "the user views their own timelines and excludes direct messages", %{        user: user,        conn: conn      } do -      {:ok, public_activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "public"}) +      {:ok, %{id: public_activity_id}} = +        CommonAPI.post(user, %{"status" => ".", "visibility" => "public"}) +        {:ok, _direct_activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"})        conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_visibilities[]=direct") - -      assert [%{"id" => id}] = json_response(conn, 200) -      assert id == to_string(public_activity.id) -      assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert [%{"id" => ^public_activity_id}] = json_response_and_validate_schema(conn, 200)      end    end @@ -414,29 +396,25 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      setup do: clear_config([:restrict_unauthenticated, :profiles, :remote], true)      test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do -      res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") - -      assert json_response(res_conn, :not_found) == %{ -               "error" => "Can't find user" -             } - -      res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") +      assert %{"error" => "Can't find user"} == +               conn +               |> get("/api/v1/accounts/#{local.id}/statuses") +               |> json_response_and_validate_schema(:not_found) -      assert json_response(res_conn, :not_found) == %{ -               "error" => "Can't find user" -             } +      assert %{"error" => "Can't find user"} == +               conn +               |> get("/api/v1/accounts/#{remote.id}/statuses") +               |> json_response_and_validate_schema(:not_found)      end      test "if user is authenticated", %{local: local, remote: remote} do        %{conn: conn} = oauth_access(["read"])        res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") -      assert length(json_response(res_conn, 200)) == 1 -      assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert length(json_response_and_validate_schema(res_conn, 200)) == 1        res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") -      assert length(json_response(res_conn, 200)) == 1 -      assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert length(json_response_and_validate_schema(res_conn, 200)) == 1      end    end @@ -447,27 +425,23 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      setup do: clear_config([:restrict_unauthenticated, :profiles, :local], true)      test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do -      res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") - -      assert json_response(res_conn, :not_found) == %{ -               "error" => "Can't find user" -             } +      assert %{"error" => "Can't find user"} == +               conn +               |> get("/api/v1/accounts/#{local.id}/statuses") +               |> json_response_and_validate_schema(:not_found)        res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") -      assert length(json_response(res_conn, 200)) == 1 -      assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert length(json_response_and_validate_schema(res_conn, 200)) == 1      end      test "if user is authenticated", %{local: local, remote: remote} do        %{conn: conn} = oauth_access(["read"])        res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") -      assert length(json_response(res_conn, 200)) == 1 -      assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert length(json_response_and_validate_schema(res_conn, 200)) == 1        res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") -      assert length(json_response(res_conn, 200)) == 1 -      assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert length(json_response_and_validate_schema(res_conn, 200)) == 1      end    end @@ -479,26 +453,22 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do        res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") -      assert length(json_response(res_conn, 200)) == 1 -      assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert length(json_response_and_validate_schema(res_conn, 200)) == 1 -      res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") - -      assert json_response(res_conn, :not_found) == %{ -               "error" => "Can't find user" -             } +      assert %{"error" => "Can't find user"} == +               conn +               |> get("/api/v1/accounts/#{remote.id}/statuses") +               |> json_response_and_validate_schema(:not_found)      end      test "if user is authenticated", %{local: local, remote: remote} do        %{conn: conn} = oauth_access(["read"])        res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") -      assert length(json_response(res_conn, 200)) == 1 -      assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert length(json_response_and_validate_schema(res_conn, 200)) == 1        res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") -      assert length(json_response(res_conn, 200)) == 1 -      assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) +      assert length(json_response_and_validate_schema(res_conn, 200)) == 1      end    end @@ -507,13 +477,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      test "getting followers", %{user: user, conn: conn} do        other_user = insert(:user) -      {:ok, user} = User.follow(user, other_user) +      {:ok, %{id: user_id}} = User.follow(user, other_user)        conn = get(conn, "/api/v1/accounts/#{other_user.id}/followers") -      assert [%{"id" => id}] = json_response(conn, 200) -      assert id == to_string(user.id) -      assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) +      assert [%{"id" => ^user_id}] = json_response_and_validate_schema(conn, 200)      end      test "getting followers, hide_followers", %{user: user, conn: conn} do @@ -522,7 +490,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        conn = get(conn, "/api/v1/accounts/#{other_user.id}/followers") -      assert [] == json_response(conn, 200) +      assert [] == json_response_and_validate_schema(conn, 200)      end      test "getting followers, hide_followers, same user requesting" do @@ -536,40 +504,31 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["read:accounts"]))          |> get("/api/v1/accounts/#{other_user.id}/followers") -      refute [] == json_response(conn, 200) -      assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) +      refute [] == json_response_and_validate_schema(conn, 200)      end      test "getting followers, pagination", %{user: user, conn: conn} do -      follower1 = insert(:user) -      follower2 = insert(:user) -      follower3 = insert(:user) -      {:ok, _} = User.follow(follower1, user) -      {:ok, _} = User.follow(follower2, user) -      {:ok, _} = User.follow(follower3, user) - -      res_conn = get(conn, "/api/v1/accounts/#{user.id}/followers?since_id=#{follower1.id}") +      {:ok, %User{id: follower1_id}} = :user |> insert() |> User.follow(user) +      {:ok, %User{id: follower2_id}} = :user |> insert() |> User.follow(user) +      {:ok, %User{id: follower3_id}} = :user |> insert() |> User.follow(user) -      assert [%{"id" => id3}, %{"id" => id2}] = json_response(res_conn, 200) -      assert id3 == follower3.id -      assert id2 == follower2.id -      assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) - -      res_conn = get(conn, "/api/v1/accounts/#{user.id}/followers?max_id=#{follower3.id}") +      assert [%{"id" => ^follower3_id}, %{"id" => ^follower2_id}] = +               conn +               |> get("/api/v1/accounts/#{user.id}/followers?since_id=#{follower1_id}") +               |> json_response_and_validate_schema(200) -      assert [%{"id" => id2}, %{"id" => id1}] = json_response(res_conn, 200) -      assert id2 == follower2.id -      assert id1 == follower1.id +      assert [%{"id" => ^follower2_id}, %{"id" => ^follower1_id}] = +               conn +               |> get("/api/v1/accounts/#{user.id}/followers?max_id=#{follower3_id}") +               |> json_response_and_validate_schema(200) -      res_conn = get(conn, "/api/v1/accounts/#{user.id}/followers?limit=1&max_id=#{follower3.id}") +      res_conn = get(conn, "/api/v1/accounts/#{user.id}/followers?limit=1&max_id=#{follower3_id}") -      assert [%{"id" => id2}] = json_response(res_conn, 200) -      assert id2 == follower2.id +      assert [%{"id" => ^follower2_id}] = json_response_and_validate_schema(res_conn, 200)        assert [link_header] = get_resp_header(res_conn, "link") -      assert link_header =~ ~r/min_id=#{follower2.id}/ -      assert link_header =~ ~r/max_id=#{follower2.id}/ -      assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) +      assert link_header =~ ~r/min_id=#{follower2_id}/ +      assert link_header =~ ~r/max_id=#{follower2_id}/      end    end @@ -582,9 +541,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        conn = get(conn, "/api/v1/accounts/#{user.id}/following") -      assert [%{"id" => id}] = json_response(conn, 200) +      assert [%{"id" => id}] = json_response_and_validate_schema(conn, 200)        assert id == to_string(other_user.id) -      assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec())      end      test "getting following, hide_follows, other user requesting" do @@ -598,8 +556,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["read:accounts"]))          |> get("/api/v1/accounts/#{user.id}/following") -      assert [] == json_response(conn, 200) -      assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) +      assert [] == json_response_and_validate_schema(conn, 200)      end      test "getting following, hide_follows, same user requesting" do @@ -613,7 +570,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> assign(:token, insert(:oauth_token, user: user, scopes: ["read:accounts"]))          |> get("/api/v1/accounts/#{user.id}/following") -      refute [] == json_response(conn, 200) +      refute [] == json_response_and_validate_schema(conn, 200)      end      test "getting following, pagination", %{user: user, conn: conn} do @@ -626,28 +583,25 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        res_conn = get(conn, "/api/v1/accounts/#{user.id}/following?since_id=#{following1.id}") -      assert [%{"id" => id3}, %{"id" => id2}] = json_response(res_conn, 200) +      assert [%{"id" => id3}, %{"id" => id2}] = json_response_and_validate_schema(res_conn, 200)        assert id3 == following3.id        assert id2 == following2.id -      assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec())        res_conn = get(conn, "/api/v1/accounts/#{user.id}/following?max_id=#{following3.id}") -      assert [%{"id" => id2}, %{"id" => id1}] = json_response(res_conn, 200) +      assert [%{"id" => id2}, %{"id" => id1}] = json_response_and_validate_schema(res_conn, 200)        assert id2 == following2.id        assert id1 == following1.id -      assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec())        res_conn =          get(conn, "/api/v1/accounts/#{user.id}/following?limit=1&max_id=#{following3.id}") -      assert [%{"id" => id2}] = json_response(res_conn, 200) +      assert [%{"id" => id2}] = json_response_and_validate_schema(res_conn, 200)        assert id2 == following2.id        assert [link_header] = get_resp_header(res_conn, "link")        assert link_header =~ ~r/min_id=#{following2.id}/        assert link_header =~ ~r/max_id=#{following2.id}/ -      assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec())      end    end @@ -655,40 +609,37 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      setup do: oauth_access(["follow"])      test "following / unfollowing a user", %{conn: conn} do -      other_user = insert(:user) - -      ret_conn = post(conn, "/api/v1/accounts/#{other_user.id}/follow") - -      assert %{"id" => _id, "following" => true} = json_response(ret_conn, 200) -      assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) +      %{id: other_user_id, nickname: other_user_nickname} = insert(:user) -      ret_conn = post(conn, "/api/v1/accounts/#{other_user.id}/unfollow") - -      assert %{"id" => _id, "following" => false} = json_response(ret_conn, 200) -      assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) +      assert %{"id" => _id, "following" => true} = +               conn +               |> post("/api/v1/accounts/#{other_user_id}/follow") +               |> json_response_and_validate_schema(200) -      conn = -        conn -        |> put_req_header("content-type", "application/json") -        |> post("/api/v1/follows", %{"uri" => other_user.nickname}) +      assert %{"id" => _id, "following" => false} = +               conn +               |> post("/api/v1/accounts/#{other_user_id}/unfollow") +               |> json_response_and_validate_schema(200) -      assert %{"id" => id} = json_response(conn, 200) -      assert id == to_string(other_user.id) -      assert_schema(json_response(conn, 200), "Account", ApiSpec.spec()) +      assert %{"id" => ^other_user_id} = +               conn +               |> put_req_header("content-type", "application/json") +               |> post("/api/v1/follows", %{"uri" => other_user_nickname}) +               |> json_response_and_validate_schema(200)      end      test "cancelling follow request", %{conn: conn} do        %{id: other_user_id} = insert(:user, %{locked: true}) -      resp = conn |> post("/api/v1/accounts/#{other_user_id}/follow") |> json_response(:ok) - -      assert %{"id" => ^other_user_id, "following" => false, "requested" => true} = resp -      assert_schema(resp, "AccountRelationship", ApiSpec.spec()) - -      resp = conn |> post("/api/v1/accounts/#{other_user_id}/unfollow") |> json_response(:ok) +      assert %{"id" => ^other_user_id, "following" => false, "requested" => true} = +               conn +               |> post("/api/v1/accounts/#{other_user_id}/follow") +               |> json_response_and_validate_schema(:ok) -      assert %{"id" => ^other_user_id, "following" => false, "requested" => false} = resp -      assert_schema(resp, "AccountRelationship", ApiSpec.spec()) +      assert %{"id" => ^other_user_id, "following" => false, "requested" => false} = +               conn +               |> post("/api/v1/accounts/#{other_user_id}/unfollow") +               |> json_response_and_validate_schema(:ok)      end      test "following without reblogs" do @@ -698,50 +649,53 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        ret_conn = post(conn, "/api/v1/accounts/#{followed.id}/follow?reblogs=false") -      assert %{"showing_reblogs" => false} = json_response(ret_conn, 200) -      assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) +      assert %{"showing_reblogs" => false} = json_response_and_validate_schema(ret_conn, 200)        {:ok, activity} = CommonAPI.post(other_user, %{"status" => "hey"}) -      {:ok, reblog, _} = CommonAPI.repeat(activity.id, followed) - -      ret_conn = get(conn, "/api/v1/timelines/home") +      {:ok, %{id: reblog_id}, _} = CommonAPI.repeat(activity.id, followed) -      assert [] == json_response(ret_conn, 200) - -      ret_conn = post(conn, "/api/v1/accounts/#{followed.id}/follow?reblogs=true") - -      assert %{"showing_reblogs" => true} = json_response(ret_conn, 200) -      assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) +      assert [] == +               conn +               |> get("/api/v1/timelines/home") +               |> json_response(200) -      conn = get(conn, "/api/v1/timelines/home") +      assert %{"showing_reblogs" => true} = +               conn +               |> post("/api/v1/accounts/#{followed.id}/follow?reblogs=true") +               |> json_response_and_validate_schema(200) -      expected_activity_id = reblog.id -      assert [%{"id" => ^expected_activity_id}] = json_response(conn, 200) +      assert [%{"id" => ^reblog_id}] = +               conn +               |> get("/api/v1/timelines/home") +               |> json_response(200)      end      test "following / unfollowing errors", %{user: user, conn: conn} do        # self follow        conn_res = post(conn, "/api/v1/accounts/#{user.id}/follow") -      assert %{"error" => "Can not follow yourself"} = json_response(conn_res, 400) + +      assert %{"error" => "Can not follow yourself"} = +               json_response_and_validate_schema(conn_res, 400)        # self unfollow        user = User.get_cached_by_id(user.id)        conn_res = post(conn, "/api/v1/accounts/#{user.id}/unfollow") -      assert %{"error" => "Can not unfollow yourself"} = json_response(conn_res, 400) + +      assert %{"error" => "Can not unfollow yourself"} = +               json_response_and_validate_schema(conn_res, 400)        # self follow via uri        user = User.get_cached_by_id(user.id) -      conn_res = -        conn -        |> put_req_header("content-type", "multipart/form-data") -        |> post("/api/v1/follows", %{"uri" => user.nickname}) - -      assert %{"error" => "Can not follow yourself"} = json_response(conn_res, 400) +      assert %{"error" => "Can not follow yourself"} = +               conn +               |> put_req_header("content-type", "multipart/form-data") +               |> post("/api/v1/follows", %{"uri" => user.nickname}) +               |> json_response_and_validate_schema(400)        # follow non existing user        conn_res = post(conn, "/api/v1/accounts/doesntexist/follow") -      assert %{"error" => "Record not found"} = json_response(conn_res, 404) +      assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn_res, 404)        # follow non existing user via uri        conn_res = @@ -749,11 +703,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> put_req_header("content-type", "multipart/form-data")          |> post("/api/v1/follows", %{"uri" => "doesntexist"}) -      assert %{"error" => "Record not found"} = json_response(conn_res, 404) +      assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn_res, 404)        # unfollow non existing user        conn_res = post(conn, "/api/v1/accounts/doesntexist/unfollow") -      assert %{"error" => "Record not found"} = json_response(conn_res, 404) +      assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn_res, 404)      end    end @@ -763,21 +717,16 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      test "with notifications", %{conn: conn} do        other_user = insert(:user) -      ret_conn = -        conn -        |> put_req_header("content-type", "application/json") -        |> post("/api/v1/accounts/#{other_user.id}/mute") - -      response = json_response(ret_conn, 200) - -      assert %{"id" => _id, "muting" => true, "muting_notifications" => true} = response -      assert_schema(response, "AccountRelationship", ApiSpec.spec()) +      assert %{"id" => _id, "muting" => true, "muting_notifications" => true} = +               conn +               |> put_req_header("content-type", "application/json") +               |> post("/api/v1/accounts/#{other_user.id}/mute") +               |> json_response_and_validate_schema(200)        conn = post(conn, "/api/v1/accounts/#{other_user.id}/unmute") -      response = json_response(conn, 200) -      assert %{"id" => _id, "muting" => false, "muting_notifications" => false} = response -      assert_schema(response, "AccountRelationship", ApiSpec.spec()) +      assert %{"id" => _id, "muting" => false, "muting_notifications" => false} = +               json_response_and_validate_schema(conn, 200)      end      test "without notifications", %{conn: conn} do @@ -788,16 +737,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> put_req_header("content-type", "multipart/form-data")          |> post("/api/v1/accounts/#{other_user.id}/mute", %{"notifications" => "false"}) -      response = json_response(ret_conn, 200) - -      assert %{"id" => _id, "muting" => true, "muting_notifications" => false} = response -      assert_schema(response, "AccountRelationship", ApiSpec.spec()) +      assert %{"id" => _id, "muting" => true, "muting_notifications" => false} = +               json_response_and_validate_schema(ret_conn, 200)        conn = post(conn, "/api/v1/accounts/#{other_user.id}/unmute") -      response = json_response(conn, 200) -      assert %{"id" => _id, "muting" => false, "muting_notifications" => false} = response -      assert_schema(response, "AccountRelationship", ApiSpec.spec()) +      assert %{"id" => _id, "muting" => false, "muting_notifications" => false} = +               json_response_and_validate_schema(conn, 200)      end    end @@ -810,17 +756,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        [conn: conn, user: user, activity: activity]      end -    test "returns pinned statuses", %{conn: conn, user: user, activity: activity} do -      {:ok, _} = CommonAPI.pin(activity.id, user) +    test "returns pinned statuses", %{conn: conn, user: user, activity: %{id: activity_id}} do +      {:ok, _} = CommonAPI.pin(activity_id, user) -      result = -        conn -        |> get("/api/v1/accounts/#{user.id}/statuses?pinned=true") -        |> json_response(200) - -      id_str = to_string(activity.id) - -      assert [%{"id" => ^id_str, "pinned" => true}] = result +      assert [%{"id" => ^activity_id, "pinned" => true}] = +               conn +               |> get("/api/v1/accounts/#{user.id}/statuses?pinned=true") +               |> json_response_and_validate_schema(200)      end    end @@ -830,13 +772,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      ret_conn = post(conn, "/api/v1/accounts/#{other_user.id}/block") -    assert %{"id" => _id, "blocking" => true} = json_response(ret_conn, 200) -    assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) +    assert %{"id" => _id, "blocking" => true} = json_response_and_validate_schema(ret_conn, 200)      conn = post(conn, "/api/v1/accounts/#{other_user.id}/unblock") -    assert %{"id" => _id, "blocking" => false} = json_response(conn, 200) -    assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) +    assert %{"id" => _id, "blocking" => false} = json_response_and_validate_schema(conn, 200)    end    describe "create account by app" do @@ -863,15 +803,15 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do            scopes: "read, write, follow"          }) -      %{ -        "client_id" => client_id, -        "client_secret" => client_secret, -        "id" => _, -        "name" => "client_name", -        "redirect_uri" => "urn:ietf:wg:oauth:2.0:oob", -        "vapid_key" => _, -        "website" => nil -      } = json_response(conn, 200) +      assert %{ +               "client_id" => client_id, +               "client_secret" => client_secret, +               "id" => _, +               "name" => "client_name", +               "redirect_uri" => "urn:ietf:wg:oauth:2.0:oob", +               "vapid_key" => _, +               "website" => nil +             } = json_response_and_validate_schema(conn, 200)        conn =          post(conn, "/oauth/token", %{ @@ -906,7 +846,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          "created_at" => _created_at,          "scope" => _scope,          "token_type" => "Bearer" -      } = json_response(conn, 200) +      } = json_response_and_validate_schema(conn, 200)        token_from_db = Repo.get_by(Token, token: token)        assert token_from_db @@ -926,7 +866,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> put_req_header("content-type", "application/json")          |> post("/api/v1/accounts", valid_params) -      assert json_response(res, 400) == %{"error" => "{\"email\":[\"has already been taken\"]}"} +      assert json_response_and_validate_schema(res, 400) == %{ +               "error" => "{\"email\":[\"has already been taken\"]}" +             }      end      test "returns bad_request if missing required params", %{ @@ -941,7 +883,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> put_req_header("content-type", "application/json")        res = post(conn, "/api/v1/accounts", valid_params) -      assert json_response(res, 200) +      assert json_response_and_validate_schema(res, 200)        [{127, 0, 0, 1}, {127, 0, 0, 2}, {127, 0, 0, 3}, {127, 0, 0, 4}]        |> Stream.zip(Map.delete(valid_params, :email)) @@ -950,7 +892,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do            conn            |> Map.put(:remote_ip, ip)            |> post("/api/v1/accounts", Map.delete(valid_params, attr)) -          |> json_response(400) +          |> json_response_and_validate_schema(400)          assert res == %{                   "error" => "Missing field: #{attr}.", @@ -983,14 +925,16 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> Map.put(:remote_ip, {127, 0, 0, 5})          |> post("/api/v1/accounts", Map.delete(valid_params, :email)) -      assert json_response(res, 400) == %{"error" => "Missing parameters"} +      assert json_response_and_validate_schema(res, 400) == %{"error" => "Missing parameters"}        res =          conn          |> Map.put(:remote_ip, {127, 0, 0, 6})          |> post("/api/v1/accounts", Map.put(valid_params, :email, "")) -      assert json_response(res, 400) == %{"error" => "{\"email\":[\"can't be blank\"]}"} +      assert json_response_and_validate_schema(res, 400) == %{ +               "error" => "{\"email\":[\"can't be blank\"]}" +             }      end      test "allow registration without an email", %{conn: conn, valid_params: valid_params} do @@ -1003,7 +947,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> Map.put(:remote_ip, {127, 0, 0, 7})          |> post("/api/v1/accounts", Map.delete(valid_params, :email)) -      assert json_response(res, 200) +      assert json_response_and_validate_schema(res, 200)      end      test "allow registration with an empty email", %{conn: conn, valid_params: valid_params} do @@ -1016,7 +960,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> Map.put(:remote_ip, {127, 0, 0, 8})          |> post("/api/v1/accounts", Map.put(valid_params, :email, "")) -      assert json_response(res, 200) +      assert json_response_and_validate_schema(res, 200)      end      test "returns forbidden if token is invalid", %{conn: conn, valid_params: valid_params} do @@ -1026,7 +970,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> put_req_header("content-type", "multipart/form-data")          |> post("/api/v1/accounts", valid_params) -      assert json_response(res, 403) == %{"error" => "Invalid credentials"} +      assert json_response_and_validate_schema(res, 403) == %{"error" => "Invalid credentials"}      end      test "registration from trusted app" do @@ -1056,7 +1000,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do            password: "some_password",            confirm: "some_password"          }) -        |> json_response(200) +        |> json_response_and_validate_schema(200)        assert %{                 "access_token" => access_token, @@ -1069,7 +1013,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          build_conn()          |> Plug.Conn.put_req_header("authorization", "Bearer " <> access_token)          |> get("/api/v1/accounts/verify_credentials") -        |> json_response(200) +        |> json_response_and_validate_schema(200)        assert %{                 "acct" => "Lain", @@ -1125,7 +1069,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do            "created_at" => _created_at,            "scope" => _scope,            "token_type" => "Bearer" -        } = json_response(conn, 200) +        } = json_response_and_validate_schema(conn, 200)          token_from_db = Repo.get_by(Token, token: token)          assert token_from_db @@ -1143,7 +1087,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do            agreement: true          }) -      assert json_response(conn, :too_many_requests) == %{"error" => "Throttled"} +      assert json_response_and_validate_schema(conn, :too_many_requests) == %{ +               "error" => "Throttled" +             }      end    end @@ -1151,16 +1097,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      test "returns lists to which the account belongs" do        %{user: user, conn: conn} = oauth_access(["read:lists"])        other_user = insert(:user) -      assert {:ok, %Pleroma.List{} = list} = Pleroma.List.create("Test List", user) +      assert {:ok, %Pleroma.List{id: list_id} = list} = Pleroma.List.create("Test List", user)        {:ok, %{following: _following}} = Pleroma.List.follow(list, other_user) -      res = -        conn -        |> get("/api/v1/accounts/#{other_user.id}/lists") -        |> json_response(200) - -      assert res == [%{"id" => to_string(list.id), "title" => "Test List"}] -      assert_schema(res, "ListsResponse", ApiSpec.spec()) +      assert [%{"id" => list_id, "title" => "Test List"}] = +               conn +               |> get("/api/v1/accounts/#{other_user.id}/lists") +               |> json_response_and_validate_schema(200)      end    end @@ -1169,7 +1112,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        %{user: user, conn: conn} = oauth_access(["read:accounts"])        conn = get(conn, "/api/v1/accounts/verify_credentials") -      response = json_response(conn, 200) +      response = json_response_and_validate_schema(conn, 200)        assert %{"id" => id, "source" => %{"privacy" => "public"}} = response        assert response["pleroma"]["chat_token"] @@ -1182,7 +1125,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        conn = get(conn, "/api/v1/accounts/verify_credentials") -      assert %{"id" => id, "source" => %{"privacy" => "unlisted"}} = json_response(conn, 200) +      assert %{"id" => id, "source" => %{"privacy" => "unlisted"}} = +               json_response_and_validate_schema(conn, 200) +        assert id == to_string(user.id)      end @@ -1192,7 +1137,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        conn = get(conn, "/api/v1/accounts/verify_credentials") -      assert %{"id" => id, "source" => %{"privacy" => "private"}} = json_response(conn, 200) +      assert %{"id" => id, "source" => %{"privacy" => "private"}} = +               json_response_and_validate_schema(conn, 200) +        assert id == to_string(user.id)      end    end @@ -1207,18 +1154,18 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        assert [%{"id" => ^other_user_id}] =                 conn                 |> get("/api/v1/accounts/relationships?id=#{other_user.id}") -               |> json_response(200) +               |> json_response_and_validate_schema(200)        assert [%{"id" => ^other_user_id}] =                 conn                 |> get("/api/v1/accounts/relationships?id[]=#{other_user.id}") -               |> json_response(200) +               |> json_response_and_validate_schema(200)      end      test "returns an empty list on a bad request", %{conn: conn} do        conn = get(conn, "/api/v1/accounts/relationships", %{}) -      assert [] = json_response(conn, 200) +      assert [] = json_response_and_validate_schema(conn, 200)      end    end @@ -1231,8 +1178,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      conn = get(conn, "/api/v1/mutes")      other_user_id = to_string(other_user.id) -    assert [%{"id" => ^other_user_id}] = json_response(conn, 200) -    assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) +    assert [%{"id" => ^other_user_id}] = json_response_and_validate_schema(conn, 200)    end    test "getting a list of blocks" do @@ -1247,7 +1193,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        |> get("/api/v1/blocks")      other_user_id = to_string(other_user.id) -    assert [%{"id" => ^other_user_id}] = json_response(conn, 200) -    assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) +    assert [%{"id" => ^other_user_id}] = json_response_and_validate_schema(conn, 200)    end  end | 
