From 20c22eb159bcc77cc1bc73dad5db99736724f55e Mon Sep 17 00:00:00 2001 From: Oneric Date: Sun, 21 Apr 2024 20:56:14 +0000 Subject: [PATCH] Fix flaky expires_at tests The API parameter is not a timestamp but an offset. If a sufficient amount of time passes between the tests expires_at calculation and the internal calculation during processing of the request the strict equality assertion fails. (Either a direct assertion or indirect via job lookup). To avoid this lower comparison granularity. --- .../controllers/status_controller_test.exs | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index 25a18e145..f58045640 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -111,7 +111,7 @@ test "posting a status", %{conn: conn} do # 2 hours expires_in = 2 * 60 * 60 - expires_at = DateTime.add(DateTime.utc_now(), expires_in) + expires_at1 = DateTime.add(DateTime.utc_now(), expires_in) conn_four = conn @@ -123,12 +123,16 @@ test "posting a status", %{conn: conn} do assert %{"id" => fourth_id} = json_response_and_validate_schema(conn_four, 200) - assert Activity.get_by_id(fourth_id) + activity = Activity.get_by_id(fourth_id) + assert activity + + {:ok, expires_at2, _} = DateTime.from_iso8601(activity.data["expires_at"]) + assert Timex.compare(expires_at1, expires_at2, :minutes) == 0 assert_enqueued( worker: Pleroma.Workers.PurgeExpiredActivity, args: %{activity_id: fourth_id}, - scheduled_at: expires_at + scheduled_at: expires_at2 ) end @@ -148,16 +152,13 @@ test "automatically setting a post expiry if status_ttl_days is set" do activity = Activity.get_by_id_with_object(id) {:ok, expires_at, _} = DateTime.from_iso8601(activity.data["expires_at"]) - assert Timex.diff( - expires_at, - DateTime.utc_now(), - :hours - ) == 23 + expiry_delay = Timex.diff(expires_at, DateTime.utc_now(), :hours) + assert(expiry_delay in [23, 24]) assert_enqueued( worker: Pleroma.Workers.PurgeExpiredActivity, args: %{activity_id: id}, - scheduled_at: DateTime.add(DateTime.utc_now(), 1 * 60 * 60 * 24) + scheduled_at: expires_at ) end @@ -1405,7 +1406,7 @@ test "on pin removes deletion job, on unpin reschedule deletion" do %{conn: conn} = oauth_access(["write:accounts", "write:statuses"]) expires_in = 2 * 60 * 60 - expires_at = DateTime.add(DateTime.utc_now(), expires_in) + expires_at1 = DateTime.add(DateTime.utc_now(), expires_in) assert %{"id" => id} = conn @@ -1416,10 +1417,15 @@ test "on pin removes deletion job, on unpin reschedule deletion" do }) |> json_response_and_validate_schema(200) + activity = Activity.get_by_id(id) + {:ok, expires_at2, _} = DateTime.from_iso8601(activity.data["expires_at"]) + + assert Timex.compare(expires_at1, expires_at2, :minutes) == 0 + assert_enqueued( worker: Pleroma.Workers.PurgeExpiredActivity, args: %{activity_id: id}, - scheduled_at: expires_at + scheduled_at: expires_at2 ) assert %{"id" => ^id, "pinned" => true} = @@ -1431,7 +1437,7 @@ test "on pin removes deletion job, on unpin reschedule deletion" do refute_enqueued( worker: Pleroma.Workers.PurgeExpiredActivity, args: %{activity_id: id}, - scheduled_at: expires_at + scheduled_at: expires_at2 ) assert %{"id" => ^id, "pinned" => false} = @@ -1443,7 +1449,7 @@ test "on pin removes deletion job, on unpin reschedule deletion" do assert_enqueued( worker: Pleroma.Workers.PurgeExpiredActivity, args: %{activity_id: id}, - scheduled_at: expires_at + scheduled_at: expires_at2 ) end end @@ -1944,7 +1950,7 @@ test "expires_at is nil for another user" do |> json_response_and_validate_schema(:ok) {:ok, a_expires_at, 0} = DateTime.from_iso8601(a_expires_at) - assert DateTime.diff(expires_at, a_expires_at) == 0 + assert Timex.compare(expires_at, a_expires_at, :minutes) == 0 %{conn: conn} = oauth_access(["read:statuses"])