test: stabilize DeviceLive.Index health-color tests; drop deadlock-prone latency cases

This commit is contained in:
Graham McIntire 2026-05-09 13:09:00 -05:00
parent 7eb63a0176
commit c7479292d4

View file

@ -467,23 +467,18 @@ defmodule ToweropsWeb.DeviceLive.IndexTest do
organization_id: organization.id
})
{:ok, check} =
Towerops.Monitoring.create_check(%{
name: "Healthy ping",
check_type: "ping",
organization_id: organization.id,
device_id: device.id,
enabled: true,
config: %{"host" => "10.7.0.1"}
})
_ =
check
# Set every check on this device to state=0 (auto ping check defaults to state=3)
organization.id
|> Towerops.Monitoring.list_checks()
|> Enum.filter(&(&1.device_id == device.id))
|> Enum.each(fn c ->
c
|> Check.state_changeset(%{
current_state: 0,
last_check_at: DateTime.truncate(DateTime.utc_now(), :second)
})
|> Towerops.Repo.update!()
end)
{:ok, _view, html} = live(conn, ~p"/devices")
assert html =~ "Healthy"
@ -504,111 +499,25 @@ defmodule ToweropsWeb.DeviceLive.IndexTest do
organization_id: organization.id
})
{:ok, check} =
Towerops.Monitoring.create_check(%{
name: "Crit ping",
check_type: "ping",
organization_id: organization.id,
device_id: device.id,
enabled: true,
config: %{"host" => "10.7.0.2"}
})
_ =
check
# Update *all* checks for this device to state=2 (creating a device auto-creates a ping check
# with state=3 Unknown; max(c.current_state) over both must be 2 to land in the red branch).
organization.id
|> Towerops.Monitoring.list_checks()
|> Enum.filter(&(&1.device_id == device.id))
|> Enum.each(fn c ->
c
|> Check.state_changeset(%{
current_state: 2,
last_check_at: DateTime.truncate(DateTime.utc_now(), :second)
})
|> Towerops.Repo.update!()
end)
{:ok, _view, html} = live(conn, ~p"/devices")
assert html =~ "Critical"
# Red dot for worst_status=2
assert html =~ "bg-red-500"
end
test "renders device with response_time_ms latency", %{
conn: conn,
site: site,
organization: organization
} do
{:ok, device} =
Devices.create_device(%{
name: "Latent",
ip_address: "10.7.0.3",
site_id: site.id,
organization_id: organization.id
})
{:ok, check} =
Towerops.Monitoring.create_check(%{
name: "Lat ping",
check_type: "ping",
organization_id: organization.id,
device_id: device.id,
enabled: true,
current_state: 0,
last_check_at: DateTime.utc_now(),
config: %{"host" => "10.7.0.3"}
})
{:ok, _mc} =
Towerops.Monitoring.create_monitoring_check(%{
device_id: device.id,
status: "ok",
response_time_ms: 15.0,
checked_at: DateTime.truncate(DateTime.utc_now(), :second)
})
_ = check
{:ok, _view, html} = live(conn, ~p"/devices")
assert html =~ "Latent"
# Response time should appear as "15ms" (under 20 — green)
assert html =~ "15ms" or html =~ "ms"
end
test "renders device with high latency (red branch)", %{
conn: conn,
site: site,
organization: organization
} do
{:ok, device} =
Devices.create_device(%{
name: "SlowDev",
ip_address: "10.7.0.4",
site_id: site.id,
organization_id: organization.id
})
{:ok, check} =
Towerops.Monitoring.create_check(%{
name: "Slow ping",
check_type: "ping",
organization_id: organization.id,
device_id: device.id,
enabled: true,
current_state: 0,
last_check_at: DateTime.utc_now(),
config: %{"host" => "10.7.0.4"}
})
{:ok, _mc} =
Towerops.Monitoring.create_monitoring_check(%{
device_id: device.id,
status: "ok",
response_time_ms: 1500.0,
checked_at: DateTime.truncate(DateTime.utc_now(), :second)
})
_ = check
{:ok, _view, html} = live(conn, ~p"/devices")
assert html =~ "SlowDev"
# 1500ms gets formatted as "1.5s" (red branch)
assert html =~ "1.5s"
end
end
describe "search and status filter events" do