Add tests for proto decode/encode validation edge cases, assert/401 plugs, authorization policy, identifier normalization, telemetry handlers, GeoIP parsing, agent helpers, maintenance helpers, and Ecto query modules.
56 lines
1.7 KiB
Elixir
56 lines
1.7 KiB
Elixir
defmodule ToweropsWeb.MaintenanceLive.HelpersTest do
|
|
use ExUnit.Case, async: true
|
|
|
|
alias ToweropsWeb.MaintenanceLive.Helpers
|
|
|
|
describe "status_for/1" do
|
|
test "returns active for current windows" do
|
|
now = DateTime.utc_now()
|
|
window = %{starts_at: DateTime.add(now, -60, :second), ends_at: DateTime.add(now, 60, :second)}
|
|
|
|
assert Helpers.status_for(window) == :active
|
|
end
|
|
end
|
|
|
|
describe "scope_label/1" do
|
|
test "formats device, site, and org-wide labels" do
|
|
assert Helpers.scope_label(%{device: %{name: "Core"}, site: nil}) == "Device: Core"
|
|
assert Helpers.scope_label(%{device: nil, site: %{name: "HQ"}}) == "Site: HQ"
|
|
assert Helpers.scope_label(%{device: nil, site: nil}) == "Org-wide"
|
|
end
|
|
end
|
|
|
|
describe "status_label/1" do
|
|
test "returns Active for :active status" do
|
|
assert Helpers.status_label(:active) == "Active"
|
|
end
|
|
|
|
test "returns Upcoming for :upcoming status" do
|
|
assert Helpers.status_label(:upcoming) == "Upcoming"
|
|
end
|
|
|
|
test "returns Past for :past status" do
|
|
assert Helpers.status_label(:past) == "Past"
|
|
end
|
|
end
|
|
|
|
describe "format_datetime/2" do
|
|
test "formats the datetime with the provided timezone" do
|
|
datetime = ~U[2026-01-15 14:34:00Z]
|
|
|
|
assert Helpers.format_datetime(datetime, "Etc/UTC") == "Jan 15, 2026 02:34 PM"
|
|
end
|
|
|
|
test "falls back to UTC when timezone is nil" do
|
|
datetime = ~U[2026-01-15 14:34:00Z]
|
|
|
|
assert Helpers.format_datetime(datetime, nil) == "Jan 15, 2026 02:34 PM"
|
|
end
|
|
|
|
test "falls back to UTC formatting for invalid timezone" do
|
|
datetime = ~U[2026-01-15 14:34:00Z]
|
|
|
|
assert Helpers.format_datetime(datetime, "Invalid/Zone") =~ "UTC"
|
|
end
|
|
end
|
|
end
|