diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/support/conn_case.ex | 5 | ||||
| -rw-r--r-- | test/web/api_spec/account_operation_test.exs | 141 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs | 6 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/account_controller_test.exs | 178 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_test.exs | 222 | 
5 files changed, 397 insertions, 155 deletions
diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index 781622476..8099461cc 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -51,6 +51,11 @@ defmodule Pleroma.Web.ConnCase do          %{user: user, token: token, conn: conn}        end +      defp request_content_type(%{conn: conn}) do +        conn = put_req_header(conn, "content-type", "multipart/form-data") +        [conn: conn] +      end +        defp json_response_and_validate_schema(conn, status \\ nil) do          content_type =            conn diff --git a/test/web/api_spec/account_operation_test.exs b/test/web/api_spec/account_operation_test.exs new file mode 100644 index 000000000..892ade71c --- /dev/null +++ b/test/web/api_spec/account_operation_test.exs @@ -0,0 +1,141 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.AccountOperationTest do +  use Pleroma.Web.ConnCase + +  alias Pleroma.Web.ApiSpec +  alias Pleroma.Web.ApiSpec.Schemas.Account +  alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest +  alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse +  alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse +  alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest + +  import OpenApiSpex.TestAssertions +  import Pleroma.Factory + +  test "Account example matches schema" do +    api_spec = ApiSpec.spec() +    schema = Account.schema() +    assert_schema(schema.example, "Account", api_spec) +  end + +  test "AccountCreateRequest example matches schema" do +    api_spec = ApiSpec.spec() +    schema = AccountCreateRequest.schema() +    assert_schema(schema.example, "AccountCreateRequest", api_spec) +  end + +  test "AccountCreateResponse example matches schema" do +    api_spec = ApiSpec.spec() +    schema = AccountCreateResponse.schema() +    assert_schema(schema.example, "AccountCreateResponse", api_spec) +  end + +  test "AccountUpdateCredentialsRequest example matches schema" do +    api_spec = ApiSpec.spec() +    schema = AccountUpdateCredentialsRequest.schema() +    assert_schema(schema.example, "AccountUpdateCredentialsRequest", api_spec) +  end + +  test "AccountController produces a AccountCreateResponse", %{conn: conn} do +    api_spec = ApiSpec.spec() +    app_token = insert(:oauth_token, user: nil) + +    json = +      conn +      |> put_req_header("authorization", "Bearer " <> app_token.token) +      |> put_req_header("content-type", "application/json") +      |> post( +        "/api/v1/accounts", +        %{ +          username: "foo", +          email: "bar@example.org", +          password: "qwerty", +          agreement: true +        } +      ) +      |> json_response(200) + +    assert_schema(json, "AccountCreateResponse", api_spec) +  end + +  test "AccountUpdateCredentialsRequest produces an Account", %{conn: conn} do +    api_spec = ApiSpec.spec() +    token = insert(:oauth_token, scopes: ["read", "write"]) + +    json = +      conn +      |> put_req_header("authorization", "Bearer " <> token.token) +      |> put_req_header("content-type", "application/json") +      |> patch( +        "/api/v1/accounts/update_credentials", +        %{ +          hide_followers_count: "true", +          hide_follows_count: "true", +          skip_thread_containment: "true", +          hide_follows: "true", +          pleroma_settings_store: %{"pleroma-fe" => %{"key" => "val"}}, +          note: "foobar", +          fields_attributes: [%{name: "foo", value: "bar"}] +        } +      ) +      |> json_response(200) + +    assert_schema(json, "Account", api_spec) +  end + +  test "AccountRelationshipsResponse example matches schema" do +    api_spec = ApiSpec.spec() +    schema = AccountRelationshipsResponse.schema() +    assert_schema(schema.example, "AccountRelationshipsResponse", api_spec) +  end + +  test "/api/v1/accounts/relationships produces AccountRelationshipsResponse", %{ +    conn: conn +  } do +    token = insert(:oauth_token, scopes: ["read", "write"]) +    other_user = insert(:user) +    {:ok, _user} = Pleroma.User.follow(token.user, other_user) +    api_spec = ApiSpec.spec() + +    assert [relationship] = +             conn +             |> put_req_header("authorization", "Bearer " <> token.token) +             |> get("/api/v1/accounts/relationships?id=#{other_user.id}") +             |> json_response(:ok) + +    assert_schema([relationship], "AccountRelationshipsResponse", api_spec) +  end + +  test "/api/v1/accounts/:id produces Account", %{ +    conn: conn +  } do +    user = insert(:user) +    api_spec = ApiSpec.spec() + +    assert resp = +             conn +             |> get("/api/v1/accounts/#{user.id}") +             |> json_response(:ok) + +    assert_schema(resp, "Account", api_spec) +  end + +  test "/api/v1/accounts/:id/statuses produces StatusesResponse", %{ +    conn: conn +  } do +    user = insert(:user) +    Pleroma.Web.CommonAPI.post(user, %{"status" => "foobar"}) + +    api_spec = ApiSpec.spec() + +    assert resp = +             conn +             |> get("/api/v1/accounts/#{user.id}/statuses") +             |> json_response(:ok) + +    assert_schema(resp, "StatusesResponse", api_spec) +  end +end 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 2d256f63c..a3356c12f 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 @@ -14,6 +14,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do    describe "updating credentials" do      setup do: oauth_access(["write:accounts"]) +    setup :request_content_type      test "sets user settings in a generic way", %{conn: conn} do        res_conn = @@ -105,10 +106,10 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do      end      test "updates the user's default scope", %{conn: conn} do -      conn = patch(conn, "/api/v1/accounts/update_credentials", %{default_scope: "cofe"}) +      conn = patch(conn, "/api/v1/accounts/update_credentials", %{default_scope: "unlisted"})        assert user_data = json_response(conn, 200) -      assert user_data["source"]["privacy"] == "cofe" +      assert user_data["source"]["privacy"] == "unlisted"      end      test "updates the user's hide_followers status", %{conn: conn} do @@ -237,6 +238,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        for token <- [token1, token2] do          conn =            build_conn() +          |> put_req_header("content-type", "multipart/form-data")            |> put_req_header("authorization", "Bearer #{token.token}")            |> patch("/api/v1/accounts/update_credentials", %{}) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 8c428efee..d885b5e08 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -10,9 +10,11 @@ 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 @@ -245,22 +247,23 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        {:ok, activity} = CommonAPI.post(user_two, %{"status" => "User one sux0rz"})        {:ok, repeat, _} = CommonAPI.repeat(activity.id, user_three) -      resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") - -      assert [%{"id" => id}] = json_response(resp, 200) +      assert resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") |> json_response(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 -      resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") - -      assert [%{"id" => id}] = json_response(resp, 200) +      assert resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") |> json_response(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") -      assert [%{"id" => id}] = json_response(resp, 200) +      resp = get(build_conn(), "/api/v1/accounts/#{user_three.id}/statuses") |> json_response(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") @@ -286,30 +289,34 @@ 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") - -      assert [%{"id" => id}] = json_response(resp, 200) +      resp = get(conn, "/api/v1/accounts/#{user_one.id}/statuses") |> json_response(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) -      assert [%{"id" => id_one}, %{"id" => id_two}] = json_response(resp, 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) -      assert [%{"id" => id_one}, %{"id" => id_two}] = json_response(resp, 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 @@ -335,40 +342,45 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        {:ok, image_post} = CommonAPI.post(user, %{"status" => "cofe", "media_ids" => [media_id]}) -      conn = get(conn, "/api/v1/accounts/#{user.id}/statuses", %{"only_media" => "true"}) +      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()) -      conn = get(build_conn(), "/api/v1/accounts/#{user.id}/statuses", %{"only_media" => "1"}) +      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())      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) -      conn = get(conn, "/api/v1/accounts/#{user.id}/statuses", %{"exclude_reblogs" => "true"}) +      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()) -      conn = get(conn, "/api/v1/accounts/#{user.id}/statuses", %{"exclude_reblogs" => "1"}) +      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())      end      test "filters user's statuses by a hashtag", %{user: user, conn: conn} do        {:ok, post} = CommonAPI.post(user, %{"status" => "#hashtag"})        {:ok, _post} = CommonAPI.post(user, %{"status" => "hashtag"}) -      conn = get(conn, "/api/v1/accounts/#{user.id}/statuses", %{"tagged" => "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())      end      test "the user views their own timelines and excludes direct messages", %{ @@ -378,11 +390,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        {:ok, public_activity} = 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"]}) +      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())      end    end @@ -420,9 +432,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest 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())        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())      end    end @@ -441,6 +455,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        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())      end      test "if user is authenticated", %{local: local, remote: remote} do @@ -448,9 +463,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest 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())        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())      end    end @@ -463,6 +480,7 @@ 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())        res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") @@ -476,9 +494,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest 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())        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())      end    end @@ -493,6 +513,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        assert [%{"id" => id}] = json_response(conn, 200)        assert id == to_string(user.id) +      assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec())      end      test "getting followers, hide_followers", %{user: user, conn: conn} do @@ -516,6 +537,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> get("/api/v1/accounts/#{other_user.id}/followers")        refute [] == json_response(conn, 200) +      assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec())      end      test "getting followers, pagination", %{user: user, conn: conn} do @@ -531,6 +553,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        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}") @@ -546,6 +569,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        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())      end    end @@ -560,6 +584,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        assert [%{"id" => id}] = json_response(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 @@ -574,6 +599,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> get("/api/v1/accounts/#{user.id}/following")        assert [] == json_response(conn, 200) +      assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec())      end      test "getting following, hide_follows, same user requesting" do @@ -603,12 +629,14 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        assert [%{"id" => id3}, %{"id" => id2}] = json_response(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 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}") @@ -619,6 +647,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        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 @@ -631,25 +660,35 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        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())        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()) -      conn = post(conn, "/api/v1/follows", %{"uri" => other_user.nickname}) +      conn = +        conn +        |> put_req_header("content-type", "application/json") +        |> post("/api/v1/follows", %{"uri" => other_user.nickname})        assert %{"id" => id} = json_response(conn, 200)        assert id == to_string(other_user.id) +      assert_schema(json_response(conn, 200), "Account", ApiSpec.spec())      end      test "cancelling follow request", %{conn: conn} do        %{id: other_user_id} = insert(:user, %{locked: true}) -      assert %{"id" => ^other_user_id, "following" => false, "requested" => true} = -               conn |> post("/api/v1/accounts/#{other_user_id}/follow") |> json_response(:ok) +      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" => false} = -               conn |> post("/api/v1/accounts/#{other_user_id}/unfollow") |> json_response(:ok) +      assert %{"id" => ^other_user_id, "following" => false, "requested" => false} = resp +      assert_schema(resp, "AccountRelationship", ApiSpec.spec())      end      test "following without reblogs" do @@ -660,6 +699,7 @@ 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())        {:ok, activity} = CommonAPI.post(other_user, %{"status" => "hey"})        {:ok, reblog, _} = CommonAPI.repeat(activity.id, followed) @@ -671,6 +711,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        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())        conn = get(conn, "/api/v1/timelines/home") @@ -690,7 +731,12 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        # self follow via uri        user = User.get_cached_by_id(user.id) -      conn_res = post(conn, "/api/v1/follows", %{"uri" => user.nickname}) + +      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)        # follow non existing user @@ -698,7 +744,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        assert %{"error" => "Record not found"} = json_response(conn_res, 404)        # follow non existing user via uri -      conn_res = post(conn, "/api/v1/follows", %{"uri" => "doesntexist"}) +      conn_res = +        conn +        |> put_req_header("content-type", "multipart/form-data") +        |> post("/api/v1/follows", %{"uri" => "doesntexist"}) +        assert %{"error" => "Record not found"} = json_response(conn_res, 404)        # unfollow non existing user @@ -713,32 +763,41 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      test "with notifications", %{conn: conn} do        other_user = insert(:user) -      ret_conn = post(conn, "/api/v1/accounts/#{other_user.id}/mute") +      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())        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())      end      test "without notifications", %{conn: conn} do        other_user = insert(:user)        ret_conn = -        post(conn, "/api/v1/accounts/#{other_user.id}/mute", %{"notifications" => "false"}) +        conn +        |> 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())        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())      end    end @@ -772,10 +831,12 @@ 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())      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())    end    describe "create account by app" do @@ -830,6 +891,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        conn =          build_conn() +        |> put_req_header("content-type", "multipart/form-data")          |> put_req_header("authorization", "Bearer " <> token)          |> post("/api/v1/accounts", %{            username: "lain", @@ -858,11 +920,12 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        _user = insert(:user, email: "lain@example.org")        app_token = insert(:oauth_token, user: nil) -      conn = +      res =          conn          |> put_req_header("authorization", "Bearer " <> app_token.token) +        |> put_req_header("content-type", "application/json") +        |> post("/api/v1/accounts", valid_params) -      res = post(conn, "/api/v1/accounts", valid_params)        assert json_response(res, 400) == %{"error" => "{\"email\":[\"has already been taken\"]}"}      end @@ -872,7 +935,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      } do        app_token = insert(:oauth_token, user: nil) -      conn = put_req_header(conn, "authorization", "Bearer " <> app_token.token) +      conn = +        conn +        |> put_req_header("authorization", "Bearer " <> app_token.token) +        |> put_req_header("content-type", "application/json")        res = post(conn, "/api/v1/accounts", valid_params)        assert json_response(res, 200) @@ -886,7 +952,16 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do            |> post("/api/v1/accounts", Map.delete(valid_params, attr))            |> json_response(400) -        assert res == %{"error" => "Missing parameters"} +        assert res == %{ +                 "error" => "Missing field: #{attr}.", +                 "errors" => [ +                   %{ +                     "message" => "Missing field: #{attr}", +                     "source" => %{"pointer" => "/#{attr}"}, +                     "title" => "Invalid value" +                   } +                 ] +               }        end)      end @@ -897,7 +972,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        Pleroma.Config.put([:instance, :account_activation_required], true)        app_token = insert(:oauth_token, user: nil) -      conn = put_req_header(conn, "authorization", "Bearer " <> app_token.token) + +      conn = +        conn +        |> put_req_header("authorization", "Bearer " <> app_token.token) +        |> put_req_header("content-type", "application/json")        res =          conn @@ -920,6 +999,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        res =          conn +        |> put_req_header("content-type", "application/json")          |> Map.put(:remote_ip, {127, 0, 0, 7})          |> post("/api/v1/accounts", Map.delete(valid_params, :email)) @@ -932,6 +1012,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        res =          conn +        |> put_req_header("content-type", "application/json")          |> Map.put(:remote_ip, {127, 0, 0, 8})          |> post("/api/v1/accounts", Map.put(valid_params, :email, "")) @@ -939,9 +1020,12 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      end      test "returns forbidden if token is invalid", %{conn: conn, valid_params: valid_params} do -      conn = put_req_header(conn, "authorization", "Bearer " <> "invalid-token") +      res = +        conn +        |> put_req_header("authorization", "Bearer " <> "invalid-token") +        |> put_req_header("content-type", "multipart/form-data") +        |> post("/api/v1/accounts", valid_params) -      res = post(conn, "/api/v1/accounts", valid_params)        assert json_response(res, 403) == %{"error" => "Invalid credentials"}      end @@ -962,6 +1046,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        response =          build_conn()          |> Plug.Conn.put_req_header("authorization", "Bearer " <> token) +        |> put_req_header("content-type", "multipart/form-data")          |> post("/api/v1/accounts", %{            nickname: "nickanme",            agreement: true, @@ -1023,10 +1108,12 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          conn          |> put_req_header("authorization", "Bearer " <> app_token.token)          |> Map.put(:remote_ip, {15, 15, 15, 15}) +        |> put_req_header("content-type", "multipart/form-data")        for i <- 1..2 do          conn = -          post(conn, "/api/v1/accounts", %{ +          conn +          |> post("/api/v1/accounts", %{              username: "#{i}lain",              email: "#{i}lain@example.org",              password: "PlzDontHackLain", @@ -1073,6 +1160,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> json_response(200)        assert res == [%{"id" => to_string(list.id), "title" => "Test List"}] +      assert_schema(res, "ListsResponse", ApiSpec.spec())      end    end @@ -1113,14 +1201,18 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      setup do: oauth_access(["read:follows"])      test "returns the relationships for the current user", %{user: user, conn: conn} do -      other_user = insert(:user) +      %{id: other_user_id} = other_user = insert(:user)        {:ok, _user} = User.follow(user, other_user) -      conn = get(conn, "/api/v1/accounts/relationships", %{"id" => [other_user.id]}) - -      assert [relationship] = json_response(conn, 200) +      assert [%{"id" => ^other_user_id}] = +               conn +               |> get("/api/v1/accounts/relationships?id=#{other_user.id}") +               |> json_response(200) -      assert to_string(other_user.id) == relationship["id"] +      assert [%{"id" => ^other_user_id}] = +               conn +               |> get("/api/v1/accounts/relationships?id[]=#{other_user.id}") +               |> json_response(200)      end      test "returns an empty list on a bad request", %{conn: conn} do @@ -1140,6 +1232,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      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())    end    test "getting a list of blocks" do @@ -1155,5 +1248,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      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())    end  end diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index f6e13b661..7926a0757 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -18,11 +18,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do    test "it registers a new user and returns the user." do      data = %{ -      "nickname" => "lain", -      "email" => "lain@wired.jp", -      "fullname" => "lain iwakura", -      "password" => "bear", -      "confirm" => "bear" +      :nickname => "lain", +      :email => "lain@wired.jp", +      :fullname => "lain iwakura", +      :password => "bear", +      :confirm => "bear"      }      {:ok, user} = TwitterAPI.register_user(data) @@ -35,12 +35,12 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do    test "it registers a new user with empty string in bio and returns the user." do      data = %{ -      "nickname" => "lain", -      "email" => "lain@wired.jp", -      "fullname" => "lain iwakura", -      "bio" => "", -      "password" => "bear", -      "confirm" => "bear" +      :nickname => "lain", +      :email => "lain@wired.jp", +      :fullname => "lain iwakura", +      :bio => "", +      :password => "bear", +      :confirm => "bear"      }      {:ok, user} = TwitterAPI.register_user(data) @@ -60,12 +60,12 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      end      data = %{ -      "nickname" => "lain", -      "email" => "lain@wired.jp", -      "fullname" => "lain iwakura", -      "bio" => "", -      "password" => "bear", -      "confirm" => "bear" +      :nickname => "lain", +      :email => "lain@wired.jp", +      :fullname => "lain iwakura", +      :bio => "", +      :password => "bear", +      :confirm => "bear"      }      {:ok, user} = TwitterAPI.register_user(data) @@ -87,23 +87,23 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do    test "it registers a new user and parses mentions in the bio" do      data1 = %{ -      "nickname" => "john", -      "email" => "john@gmail.com", -      "fullname" => "John Doe", -      "bio" => "test", -      "password" => "bear", -      "confirm" => "bear" +      :nickname => "john", +      :email => "john@gmail.com", +      :fullname => "John Doe", +      :bio => "test", +      :password => "bear", +      :confirm => "bear"      }      {:ok, user1} = TwitterAPI.register_user(data1)      data2 = %{ -      "nickname" => "lain", -      "email" => "lain@wired.jp", -      "fullname" => "lain iwakura", -      "bio" => "@john test", -      "password" => "bear", -      "confirm" => "bear" +      :nickname => "lain", +      :email => "lain@wired.jp", +      :fullname => "lain iwakura", +      :bio => "@john test", +      :password => "bear", +      :confirm => "bear"      }      {:ok, user2} = TwitterAPI.register_user(data2) @@ -123,13 +123,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do        {:ok, invite} = UserInviteToken.create_invite()        data = %{ -        "nickname" => "vinny", -        "email" => "pasta@pizza.vs", -        "fullname" => "Vinny Vinesauce", -        "bio" => "streamer", -        "password" => "hiptofbees", -        "confirm" => "hiptofbees", -        "token" => invite.token +        :nickname => "vinny", +        :email => "pasta@pizza.vs", +        :fullname => "Vinny Vinesauce", +        :bio => "streamer", +        :password => "hiptofbees", +        :confirm => "hiptofbees", +        :token => invite.token        }        {:ok, user} = TwitterAPI.register_user(data) @@ -145,13 +145,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      test "returns error on invalid token" do        data = %{ -        "nickname" => "GrimReaper", -        "email" => "death@reapers.afterlife", -        "fullname" => "Reaper Grim", -        "bio" => "Your time has come", -        "password" => "scythe", -        "confirm" => "scythe", -        "token" => "DudeLetMeInImAFairy" +        :nickname => "GrimReaper", +        :email => "death@reapers.afterlife", +        :fullname => "Reaper Grim", +        :bio => "Your time has come", +        :password => "scythe", +        :confirm => "scythe", +        :token => "DudeLetMeInImAFairy"        }        {:error, msg} = TwitterAPI.register_user(data) @@ -165,13 +165,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do        UserInviteToken.update_invite!(invite, used: true)        data = %{ -        "nickname" => "GrimReaper", -        "email" => "death@reapers.afterlife", -        "fullname" => "Reaper Grim", -        "bio" => "Your time has come", -        "password" => "scythe", -        "confirm" => "scythe", -        "token" => invite.token +        :nickname => "GrimReaper", +        :email => "death@reapers.afterlife", +        :fullname => "Reaper Grim", +        :bio => "Your time has come", +        :password => "scythe", +        :confirm => "scythe", +        :token => invite.token        }        {:error, msg} = TwitterAPI.register_user(data) @@ -186,16 +186,16 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      setup do        data = %{ -        "nickname" => "vinny", -        "email" => "pasta@pizza.vs", -        "fullname" => "Vinny Vinesauce", -        "bio" => "streamer", -        "password" => "hiptofbees", -        "confirm" => "hiptofbees" +        :nickname => "vinny", +        :email => "pasta@pizza.vs", +        :fullname => "Vinny Vinesauce", +        :bio => "streamer", +        :password => "hiptofbees", +        :confirm => "hiptofbees"        }        check_fn = fn invite -> -        data = Map.put(data, "token", invite.token) +        data = Map.put(data, :token, invite.token)          {:ok, user} = TwitterAPI.register_user(data)          fetched_user = User.get_cached_by_nickname("vinny") @@ -250,13 +250,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do        UserInviteToken.update_invite!(invite, uses: 99)        data = %{ -        "nickname" => "vinny", -        "email" => "pasta@pizza.vs", -        "fullname" => "Vinny Vinesauce", -        "bio" => "streamer", -        "password" => "hiptofbees", -        "confirm" => "hiptofbees", -        "token" => invite.token +        :nickname => "vinny", +        :email => "pasta@pizza.vs", +        :fullname => "Vinny Vinesauce", +        :bio => "streamer", +        :password => "hiptofbees", +        :confirm => "hiptofbees", +        :token => invite.token        }        {:ok, user} = TwitterAPI.register_user(data) @@ -269,13 +269,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do                 AccountView.render("show.json", %{user: fetched_user})        data = %{ -        "nickname" => "GrimReaper", -        "email" => "death@reapers.afterlife", -        "fullname" => "Reaper Grim", -        "bio" => "Your time has come", -        "password" => "scythe", -        "confirm" => "scythe", -        "token" => invite.token +        :nickname => "GrimReaper", +        :email => "death@reapers.afterlife", +        :fullname => "Reaper Grim", +        :bio => "Your time has come", +        :password => "scythe", +        :confirm => "scythe", +        :token => invite.token        }        {:error, msg} = TwitterAPI.register_user(data) @@ -292,13 +292,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do        {:ok, invite} = UserInviteToken.create_invite(%{expires_at: Date.utc_today(), max_use: 100})        data = %{ -        "nickname" => "vinny", -        "email" => "pasta@pizza.vs", -        "fullname" => "Vinny Vinesauce", -        "bio" => "streamer", -        "password" => "hiptofbees", -        "confirm" => "hiptofbees", -        "token" => invite.token +        :nickname => "vinny", +        :email => "pasta@pizza.vs", +        :fullname => "Vinny Vinesauce", +        :bio => "streamer", +        :password => "hiptofbees", +        :confirm => "hiptofbees", +        :token => invite.token        }        {:ok, user} = TwitterAPI.register_user(data) @@ -317,13 +317,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do        UserInviteToken.update_invite!(invite, uses: 99)        data = %{ -        "nickname" => "vinny", -        "email" => "pasta@pizza.vs", -        "fullname" => "Vinny Vinesauce", -        "bio" => "streamer", -        "password" => "hiptofbees", -        "confirm" => "hiptofbees", -        "token" => invite.token +        :nickname => "vinny", +        :email => "pasta@pizza.vs", +        :fullname => "Vinny Vinesauce", +        :bio => "streamer", +        :password => "hiptofbees", +        :confirm => "hiptofbees", +        :token => invite.token        }        {:ok, user} = TwitterAPI.register_user(data) @@ -335,13 +335,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do                 AccountView.render("show.json", %{user: fetched_user})        data = %{ -        "nickname" => "GrimReaper", -        "email" => "death@reapers.afterlife", -        "fullname" => "Reaper Grim", -        "bio" => "Your time has come", -        "password" => "scythe", -        "confirm" => "scythe", -        "token" => invite.token +        :nickname => "GrimReaper", +        :email => "death@reapers.afterlife", +        :fullname => "Reaper Grim", +        :bio => "Your time has come", +        :password => "scythe", +        :confirm => "scythe", +        :token => invite.token        }        {:error, msg} = TwitterAPI.register_user(data) @@ -355,13 +355,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do          UserInviteToken.create_invite(%{expires_at: Date.add(Date.utc_today(), -1), max_use: 100})        data = %{ -        "nickname" => "GrimReaper", -        "email" => "death@reapers.afterlife", -        "fullname" => "Reaper Grim", -        "bio" => "Your time has come", -        "password" => "scythe", -        "confirm" => "scythe", -        "token" => invite.token +        :nickname => "GrimReaper", +        :email => "death@reapers.afterlife", +        :fullname => "Reaper Grim", +        :bio => "Your time has come", +        :password => "scythe", +        :confirm => "scythe", +        :token => invite.token        }        {:error, msg} = TwitterAPI.register_user(data) @@ -377,13 +377,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do        UserInviteToken.update_invite!(invite, uses: 100)        data = %{ -        "nickname" => "GrimReaper", -        "email" => "death@reapers.afterlife", -        "fullname" => "Reaper Grim", -        "bio" => "Your time has come", -        "password" => "scythe", -        "confirm" => "scythe", -        "token" => invite.token +        :nickname => "GrimReaper", +        :email => "death@reapers.afterlife", +        :fullname => "Reaper Grim", +        :bio => "Your time has come", +        :password => "scythe", +        :confirm => "scythe", +        :token => invite.token        }        {:error, msg} = TwitterAPI.register_user(data) @@ -395,11 +395,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do    test "it returns the error on registration problems" do      data = %{ -      "nickname" => "lain", -      "email" => "lain@wired.jp", -      "fullname" => "lain iwakura", -      "bio" => "close the world.", -      "password" => "bear" +      :nickname => "lain", +      :email => "lain@wired.jp", +      :fullname => "lain iwakura", +      :bio => "close the world.", +      :password => "bear"      }      {:error, error_object} = TwitterAPI.register_user(data)  | 
