X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=test%2Fsupport%2Fconn_case.ex;h=eab46983391fb17415dbd82cfe1140f25541416e;hb=ca1accc1cf6689fc52a897003b5e297f51fefaf6;hp=91c03b1a88843fd4d3919251b3bb4025a4846960;hpb=957172a307dcb36c790e4c7680454c58fd51b59a;p=akkoma diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index 91c03b1a8..eab469833 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 @@ -56,14 +59,19 @@ defmodule Pleroma.Web.ConnCase do [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: %{ - open_api_spex: %{operation_id: op_id, operation_lookup: lookup, spec: spec} - } - } = conn, + %{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") @@ -79,7 +87,7 @@ defmodule Pleroma.Web.ConnCase do 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} -> @@ -94,9 +102,7 @@ defmodule Pleroma.Web.ConnCase do end) flunk( - "Response does not conform to schema of #{op_id} operation: #{ - Enum.join(errors, "\n") - }\n#{inspect(json)}" + "Response does not conform to schema of #{op_id} operation: #{Enum.join(errors, "\n")}\n#{inspect(json)}" ) end end @@ -104,43 +110,15 @@ defmodule Pleroma.Web.ConnCase do defp json_response_and_validate_schema(conn, _status) do flunk("Response schema not found for #{conn.method} #{conn.request_path} #{conn.status}") 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) - end end end setup tags do - Cachex.clear(:user_cache) - Cachex.clear(:object_cache) - :ok = Ecto.Adapters.SQL.Sandbox.checkout(Pleroma.Repo) + DataCase.setup_multi_process_mode(tags) + DataCase.setup_streamer(tags) + DataCase.stub_pipeline() - unless tags[:async] do - Ecto.Adapters.SQL.Sandbox.mode(Pleroma.Repo, {:shared, self()}) - end - - if tags[:needs_streamer] do - start_supervised(Pleroma.Web.Streamer.supervisor()) - end + Mox.verify_on_exit!() {:ok, conn: Phoenix.ConnTest.build_conn()} end