From fcd3eca167508c1dde290f431353ace9d513de86 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 4 May 2018 20:30:29 +0200 Subject: MastodonAPI: Support idempotency key. --- .../mastodon_api/mastodon_api_controller_test.exs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'test/web/mastodon_api') diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 5293b9364..432dca28a 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -63,9 +63,12 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do test "posting a status", %{conn: conn} do user = insert(:user) - conn = + idempotency_key = "Pikachu rocks!" + + conn_one = conn |> assign(:user, user) + |> put_req_header("idempotency-key", idempotency_key) |> post("/api/v1/statuses", %{ "status" => "cofe", "spoiler_text" => "2hu", @@ -73,9 +76,23 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do }) assert %{"content" => "cofe", "id" => id, "spoiler_text" => "2hu", "sensitive" => false} = - json_response(conn, 200) + json_response(conn_one, 200) assert Repo.get(Activity, id) + + conn_two = + conn + |> assign(:user, user) + |> put_req_header("idempotency-key", idempotency_key) + |> post("/api/v1/statuses", %{ + "status" => "cofe", + "spoiler_text" => "2hu", + "sensitive" => "false" + }) + + assert %{"id" => second_id} = json_response(conn_two, 200) + + assert id == second_id end test "posting a sensitive status", %{conn: conn} do -- cgit v1.2.3 From 90c4bed0af40911e0f8a28743814e4c07e91e9ae Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 4 May 2018 21:15:39 +0200 Subject: Don't expire idempotency cache for five minutes. --- test/web/mastodon_api/mastodon_api_controller_test.exs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'test/web/mastodon_api') diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 432dca28a..69a0299ac 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -75,6 +75,10 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do "sensitive" => "false" }) + {:ok, ttl} = Cachex.ttl(:user_cache, "idem:#{idempotency_key}") + # 5 Minutes + assert ttl > :timer.seconds(5 * 60 - 1) + assert %{"content" => "cofe", "id" => id, "spoiler_text" => "2hu", "sensitive" => false} = json_response(conn_one, 200) -- cgit v1.2.3 From c464355d1ac7f9558aa50f7038035b9a47614822 Mon Sep 17 00:00:00 2001 From: lain Date: Sat, 5 May 2018 11:15:57 +0200 Subject: Idempotency: Use special cache, keep for 6 hours. --- .../web/mastodon_api/mastodon_api_controller_test.exs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'test/web/mastodon_api') diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 69a0299ac..883ebc61e 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -75,9 +75,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do "sensitive" => "false" }) - {:ok, ttl} = Cachex.ttl(:user_cache, "idem:#{idempotency_key}") - # 5 Minutes - assert ttl > :timer.seconds(5 * 60 - 1) + {:ok, ttl} = Cachex.ttl(:idempotency_cache, idempotency_key) + # Six hours + assert ttl > :timer.seconds(6 * 60 * 60 - 1) assert %{"content" => "cofe", "id" => id, "spoiler_text" => "2hu", "sensitive" => false} = json_response(conn_one, 200) @@ -97,6 +97,19 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do assert %{"id" => second_id} = json_response(conn_two, 200) assert id == second_id + + conn_three = + conn + |> assign(:user, user) + |> post("/api/v1/statuses", %{ + "status" => "cofe", + "spoiler_text" => "2hu", + "sensitive" => "false" + }) + + assert %{"id" => third_id} = json_response(conn_three, 200) + + refute id == third_id end test "posting a sensitive status", %{conn: conn} do -- cgit v1.2.3