Browse Source

Polish IdempotencyPlug

tags/v1.1.4
Egor Kislitsyn 5 years ago
parent
commit
889a9c3a3f
3 changed files with 14 additions and 14 deletions
  1. +4
    -4
      lib/pleroma/plugs/idempotency_plug.ex
  2. +1
    -1
      lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
  3. +9
    -9
      test/plugs/idempotency_plug_test.exs

+ 4
- 4
lib/pleroma/plugs/idempotency_plug.ex View File

@@ -29,16 +29,16 @@ defmodule Pleroma.Plugs.IdempotencyPlug do
{:ok, nil} ->
cache_resposnse(conn, key)

{atom, message} when atom in [:ignore, :error] ->
render_error(conn, message)

{:ok, record} ->
send_cached(conn, key, record)

{atom, message} when atom in [:ignore, :error] ->
render_error(conn, message)
end
end

defp cache_resposnse(conn, key) do
Plug.Conn.register_before_send(conn, fn conn ->
register_before_send(conn, fn conn ->
[request_id] = get_resp_header(conn, "x-request-id")
content_type = get_content_type(conn)



+ 1
- 1
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex View File

@@ -564,7 +564,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
case CommonAPI.post(user, params) do
{:error, message} ->
conn
|> put_status(422)
|> put_status(:unprocessable_entity)
|> json(%{error: message})

{:ok, activity} ->


+ 9
- 9
test/plugs/idempotency_plug_test.exs View File

@@ -24,7 +24,7 @@ defmodule Pleroma.Plugs.IdempotencyPlugTest do
|> IdempotencyPlug.call([])
|> Conn.send_resp(status, body)

conn2 =
conn =
:post
|> conn("/cofe")
|> put_req_header("idempotency-key", key)
@@ -33,17 +33,17 @@ defmodule Pleroma.Plugs.IdempotencyPlugTest do
|> IdempotencyPlug.call([])

assert_raise Conn.AlreadySentError, fn ->
Conn.send_resp(conn2, :im_a_teapot, "no cofe")
Conn.send_resp(conn, :im_a_teapot, "no cofe")
end

assert conn2.resp_body == body
assert conn2.status == status
assert conn.resp_body == body
assert conn.status == status

assert [^second_request_id] = Conn.get_resp_header(conn2, "x-request-id")
assert [^orig_request_id] = Conn.get_resp_header(conn2, "x-original-request-id")
assert [^key] = Conn.get_resp_header(conn2, "idempotency-key")
assert ["true"] = Conn.get_resp_header(conn2, "idempotent-replayed")
assert ["application/json; charset=utf-8"] = Conn.get_resp_header(conn2, "content-type")
assert [^second_request_id] = Conn.get_resp_header(conn, "x-request-id")
assert [^orig_request_id] = Conn.get_resp_header(conn, "x-original-request-id")
assert [^key] = Conn.get_resp_header(conn, "idempotency-key")
assert ["true"] = Conn.get_resp_header(conn, "idempotent-replayed")
assert ["application/json; charset=utf-8"] = Conn.get_resp_header(conn, "content-type")
end

test "pass conn downstream if the cache not found" do


Loading…
Cancel
Save