test: alert severity badges, maintenance form save success paths

This commit is contained in:
Graham McIntire 2026-05-09 10:12:19 -05:00
parent 16bbf07dd5
commit e39d1fb9e1
2 changed files with 92 additions and 0 deletions

View file

@ -56,6 +56,44 @@ defmodule ToweropsWeb.AlertLive.IndexTest do
assert html =~ "DOWN"
end
test "renders alerts with different severity ages (drives severity_badge_class branches)",
%{conn: conn, device: device} do
now = DateTime.utc_now()
# Yellow: <= 15 min old
{:ok, _yellow} =
Towerops.Alerts.create_alert(%{
device_id: device.id,
alert_type: "device_down",
triggered_at: DateTime.add(now, -5, :minute),
message: "Recent"
})
# Orange: 1560 min old
{:ok, _orange} =
Towerops.Alerts.create_alert(%{
device_id: device.id,
alert_type: "device_down",
triggered_at: DateTime.add(now, -30, :minute),
message: "Half hour"
})
# Red: > 60 min old
{:ok, _red} =
Towerops.Alerts.create_alert(%{
device_id: device.id,
alert_type: "device_down",
triggered_at: DateTime.add(now, -2, :hour),
message: "Two hours"
})
{:ok, _view, html} = live(conn, ~p"/alerts")
assert html =~ "bg-yellow-500"
assert html =~ "bg-orange-500"
assert html =~ "bg-red-500"
end
test "filters critical alerts", %{conn: conn, organization: _organization, device: device} do
# Create a critical device_down alert (unresolved)
{:ok, _active_alert} =

View file

@ -84,5 +84,59 @@ defmodule ToweropsWeb.MaintenanceLive.FormEventsTest do
assert true
end
test "save :new with valid params navigates to the new window's show page", %{conn: conn} do
{:ok, view, _html} = live(conn, ~p"/maintenance/new")
now = DateTime.truncate(DateTime.utc_now(), :second)
starts = DateTime.add(now, 60, :second)
ends = DateTime.add(now, 7200, :second)
result =
render_hook(view, "save", %{
"maintenance_window" => %{
"name" => "Test create window",
"reason" => "test",
"scope_type" => "org",
"starts_at" => Calendar.strftime(starts, "%Y-%m-%dT%H:%M"),
"ends_at" => Calendar.strftime(ends, "%Y-%m-%dT%H:%M")
}
})
# On success, save_window/3 push_navigates → result is a redirect tuple.
assert match?({:error, {:live_redirect, _}}, result) or is_binary(result)
end
test "save :edit with valid params navigates", %{conn: conn, user: user, organization: org} do
now = DateTime.truncate(DateTime.utc_now(), :second)
{:ok, window} =
Towerops.Maintenance.create_window(%{
name: "Existing",
reason: "test",
organization_id: org.id,
created_by_id: user.id,
starts_at: DateTime.add(now, 60, :second),
ends_at: DateTime.add(now, 7200, :second)
})
{:ok, view, _html} = live(conn, ~p"/maintenance/#{window.id}/edit")
starts = DateTime.add(now, 120, :second)
ends = DateTime.add(now, 8000, :second)
result =
render_hook(view, "save", %{
"maintenance_window" => %{
"name" => "Edited",
"reason" => "still test",
"scope_type" => "org",
"starts_at" => Calendar.strftime(starts, "%Y-%m-%dT%H:%M"),
"ends_at" => Calendar.strftime(ends, "%Y-%m-%dT%H:%M")
}
})
assert match?({:error, {:live_redirect, _}}, result) or is_binary(result)
end
end
end