From 5e082e2abd7cefbbb20c7f66a17f61155aff9f26 Mon Sep 17 00:00:00 2001 From: May Tusek Date: Fri, 14 Feb 2025 16:40:52 -0800 Subject: [PATCH] Adds retry mechanism to prevent flakiness. --- .../deactivation_controller_test.exs | 8 +++++-- .../reactivation_controller_test.exs | 7 +++++-- test/support/utilities.ex | 21 +++++++++++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 test/support/utilities.ex diff --git a/test/philomena_web/controllers/deactivation_controller_test.exs b/test/philomena_web/controllers/deactivation_controller_test.exs index 1e99ee90..cd66d256 100644 --- a/test/philomena_web/controllers/deactivation_controller_test.exs +++ b/test/philomena_web/controllers/deactivation_controller_test.exs @@ -1,4 +1,6 @@ defmodule PhilomenaWeb.DeactivationControllerTest do + import Philomena.TestUtilities + use PhilomenaWeb.ConnCase, async: true alias Swoosh.Adapters.Local.Storage.Memory @@ -24,8 +26,10 @@ defmodule PhilomenaWeb.DeactivationControllerTest do assert Memory.all() |> Enum.find(&(&1.subject == "Reactivation instructions for your account")) != nil - user = Users.get_user!(user.id) - assert user.deleted_by_user_id == user.id + assert_retry(fn -> + user = Users.get_user!(user.id) + user.deleted_by_user_id == user.id + end) end end end diff --git a/test/philomena_web/controllers/reactivation_controller_test.exs b/test/philomena_web/controllers/reactivation_controller_test.exs index 96c54431..9258d683 100644 --- a/test/philomena_web/controllers/reactivation_controller_test.exs +++ b/test/philomena_web/controllers/reactivation_controller_test.exs @@ -1,5 +1,6 @@ defmodule PhilomenaWeb.ReactivationControllerTest do use PhilomenaWeb.ConnCase, async: true + import Philomena.TestUtilities alias Swoosh.Adapters.Local.Storage.Memory alias Philomena.Users @@ -33,8 +34,10 @@ defmodule PhilomenaWeb.ReactivationControllerTest do conn = post(conn, url, %{"token" => token}) assert redirected_to(conn) == ~p"/" - user = Users.get_user!(user.id) - assert user.deleted_by_user_id == nil + assert_retry(fn -> + user = Users.get_user!(user.id) + user.deleted_by_user_id == nil + end) end end diff --git a/test/support/utilities.ex b/test/support/utilities.ex new file mode 100644 index 00000000..4b969931 --- /dev/null +++ b/test/support/utilities.ex @@ -0,0 +1,21 @@ +import ExUnit.Assertions + +defmodule Philomena.TestUtilities do + defp assert_retry(_, attempts, max_retries, _) when attempts > max_retries, do: false + + defp assert_retry(evalulation_lambda, attempts, max_retries, timeout_in_ms) do + case evalulation_lambda.() do + true -> + true + + false -> + Process.sleep(timeout_in_ms) + assert_retry(evalulation_lambda, attempts + 1, max_retries, timeout_in_ms) + end + end + + def assert_retry(evaluation_lambda, max_retries \\ 3, timeout_in_ms \\ 1000) + when is_function(evaluation_lambda) do + assert assert_retry(evaluation_lambda, 0, max_retries, timeout_in_ms) + end +end