From b6f9f7b8aa659c10049b8c43326e58a4b1b18664 Mon Sep 17 00:00:00 2001 From: Sergey Suprunenko Date: Mon, 1 Apr 2019 22:40:48 +0200 Subject: [PATCH] Handle dates in the Unix timestamp format (Fixes #763) --- lib/pleroma/web/common_api/utils.ex | 17 ++++++++- test/web/common_api/common_api_utils_test.exs | 37 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index f596f703b..3f5348d66 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -240,8 +240,23 @@ def format_asctime(date) do Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y") end + def date_to_asctime(date) when is_float(date) do + date + |> trunc() + |> date_to_asctime() + end + + def date_to_asctime(date) when is_integer(date) do + with {:ok, date} <- DateTime.from_unix(date) do + format_asctime(date) + else + _e -> + "" + end + end + def date_to_asctime(date) do - with {:ok, date, _offset} <- date |> DateTime.from_iso8601() do + with {:ok, date, _offset} <- DateTime.from_iso8601(date) do format_asctime(date) else _e -> diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index e04b9f9b5..0f8b28d9c 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -153,4 +153,41 @@ test "returns an existing mapping for an existing object" do assert conversation_id == object.id end end + + describe "formats date to asctime" do + test "when date is an integer Unix timestamp" do + date = DateTime.utc_now() |> DateTime.to_unix() + + expected = + date + |> DateTime.from_unix!() + |> Calendar.Strftime.strftime!("%a %b %d %H:%M:%S %z %Y") + + assert Utils.date_to_asctime(date) == expected + end + + test "when date is a float Unix timestamp" do + date = 1_553_808_404.602961 + + expected = + date + |> trunc() + |> DateTime.from_unix!() + |> Calendar.Strftime.strftime!("%a %b %d %H:%M:%S %z %Y") + + assert Utils.date_to_asctime(date) == expected + end + + test "when date is in ISO 8601 format" do + date = DateTime.utc_now() |> DateTime.to_iso8601() + + expected = + date + |> DateTime.from_iso8601() + |> elem(1) + |> Calendar.Strftime.strftime!("%a %b %d %H:%M:%S %z %Y") + + assert Utils.date_to_asctime(date) == expected + end + end end