X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=test%2Fsupport%2Fconn_case.ex;h=b23918dd1d981d6596dd255fd55d3584139615d2;hb=f930e83fa2a7e2184ca6bd09773d81568e7c755c;hp=78162247697cd546cf79d6bc7694ced847fb4b06;hpb=f362836742aabd5b60b92c1296f2bbb6d83a3d59;p=akkoma diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index 781622476..deee98599 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors +# Copyright © 2017-2021 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ConnCase do @@ -19,10 +19,13 @@ defmodule Pleroma.Web.ConnCase do use ExUnit.CaseTemplate + alias Pleroma.DataCase + using do quote do # Import conveniences for testing with connections - use Phoenix.ConnTest + import Plug.Conn + import Phoenix.ConnTest use Pleroma.Tests.Helpers import Pleroma.Web.Router.Helpers @@ -51,7 +54,24 @@ defmodule Pleroma.Web.ConnCase do %{user: user, token: token, conn: conn} end - defp json_response_and_validate_schema(conn, status \\ nil) do + defp request_content_type(%{conn: conn}) do + conn = put_req_header(conn, "content-type", "multipart/form-data") + [conn: conn] + end + + defp empty_json_response(conn) do + body = response(conn, 204) + response_content_type(conn, :json) + + body + end + + defp json_response_and_validate_schema( + %{private: %{operation_id: op_id}} = conn, + status + ) do + {spec, lookup} = OpenApiSpex.Plug.PutApiSpec.get_spec_and_operation_lookup(conn) + content_type = conn |> Plug.Conn.get_resp_header("content-type") @@ -59,13 +79,15 @@ defmodule Pleroma.Web.ConnCase do |> String.split(";") |> List.first() - status = status || conn.status + status = Plug.Conn.Status.code(status) - %{private: %{open_api_spex: %{operation_id: op_id, operation_lookup: lookup, spec: spec}}} = - conn + unless lookup[op_id].responses[status] do + err = "Response schema not found for #{status} #{conn.method} #{conn.request_path}" + flunk(err) + end schema = lookup[op_id].responses[status].content[content_type].schema - json = json_response(conn, status) + json = if status == 204, do: empty_json_response(conn), else: json_response(conn, status) case OpenApiSpex.cast_value(json, schema, spec) do {:ok, _data} -> @@ -87,42 +109,18 @@ defmodule Pleroma.Web.ConnCase do end end - defp ensure_federating_or_authenticated(conn, url, user) do - initial_setting = Config.get([:instance, :federating]) - on_exit(fn -> Config.put([:instance, :federating], initial_setting) end) - - Config.put([:instance, :federating], false) - - conn - |> get(url) - |> response(403) - - conn - |> assign(:user, user) - |> get(url) - |> response(200) - - Config.put([:instance, :federating], true) - - conn - |> get(url) - |> response(200) + defp json_response_and_validate_schema(conn, _status) do + flunk("Response schema not found for #{conn.method} #{conn.request_path} #{conn.status}") end end end setup tags do - Cachex.clear(:user_cache) - Cachex.clear(:object_cache) - :ok = Ecto.Adapters.SQL.Sandbox.checkout(Pleroma.Repo) - - unless tags[:async] do - Ecto.Adapters.SQL.Sandbox.mode(Pleroma.Repo, {:shared, self()}) - end + DataCase.setup_multi_process_mode(tags) + DataCase.setup_streamer(tags) + DataCase.stub_pipeline() - if tags[:needs_streamer] do - start_supervised(Pleroma.Web.Streamer.supervisor()) - end + Mox.verify_on_exit!() {:ok, conn: Phoenix.ConnTest.build_conn()} end