feat: add timezone handling
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is failing

This commit is contained in:
Simon 2026-03-13 18:22:12 +01:00
parent 349cee0ce6
commit e8ec620d57
Signed by: simon
GPG key ID: 40E7A58C4AA1EDB2
13 changed files with 128 additions and 28 deletions

View file

@ -0,0 +1,63 @@
defmodule MvWeb.Helpers.DateFormatterTest do
@moduledoc """
Tests for DateFormatter: date/datetime formatting and timezone conversion for display.
"""
use ExUnit.Case, async: true
alias MvWeb.Helpers.DateFormatter
describe "format_date/1" do
test "formats Date to European format (dd.mm.yyyy)" do
assert DateFormatter.format_date(~D[2024-03-15]) == "15.03.2024"
end
test "returns empty string for nil" do
assert DateFormatter.format_date(nil) == ""
end
test "returns 'Invalid date' for non-Date" do
assert DateFormatter.format_date("2024-03-15") == "Invalid date"
end
end
describe "format_datetime/1 and format_datetime/2" do
test "formats UTC DateTime without timezone (European format)" do
dt = ~U[2024-03-15 10:30:00Z]
assert DateFormatter.format_datetime(dt) == "15.03.2024 10:30"
end
test "format_datetime with nil timezone same as no timezone (UTC)" do
dt = ~U[2024-03-15 10:30:00Z]
assert DateFormatter.format_datetime(dt, nil) == "15.03.2024 10:30"
end
test "formats DateTime in Europe/Berlin (CET/CEST)" do
# Winter: 10:30 UTC = 11:30 CET (UTC+1)
dt = ~U[2024-01-15 10:30:00Z]
assert DateFormatter.format_datetime(dt, "Europe/Berlin") == "15.01.2024 11:30"
# Summer: 10:30 UTC = 12:30 CEST (UTC+2)
dt_summer = ~U[2024-07-15 10:30:00Z]
assert DateFormatter.format_datetime(dt_summer, "Europe/Berlin") == "15.07.2024 12:30"
end
test "empty string timezone falls back to UTC" do
dt = ~U[2024-03-15 10:30:00Z]
assert DateFormatter.format_datetime(dt, "") == "15.03.2024 10:30"
end
test "invalid timezone falls back to UTC" do
dt = ~U[2024-03-15 10:30:00Z]
assert DateFormatter.format_datetime(dt, "Invalid/Zone") == "15.03.2024 10:30"
end
test "returns empty string for nil datetime" do
assert DateFormatter.format_datetime(nil) == ""
assert DateFormatter.format_datetime(nil, "Europe/Berlin") == ""
end
test "returns 'Invalid datetime' for non-DateTime" do
assert DateFormatter.format_datetime("2024-03-15 10:30") == "Invalid datetime"
end
end
end