test: DeviceLive.Index health/response helpers and discovered-device validation
This commit is contained in:
parent
19d9ef9e52
commit
5253ccc16e
1 changed files with 166 additions and 0 deletions
|
|
@ -4,6 +4,7 @@ defmodule ToweropsWeb.DeviceLive.IndexTest do
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Towerops.Devices
|
alias Towerops.Devices
|
||||||
|
alias Towerops.Monitoring.Check
|
||||||
|
|
||||||
setup :register_and_log_in_user
|
setup :register_and_log_in_user
|
||||||
|
|
||||||
|
|
@ -443,6 +444,171 @@ defmodule ToweropsWeb.DeviceLive.IndexTest do
|
||||||
html = view |> element("#force-rediscover-all") |> render_click()
|
html = view |> element("#force-rediscover-all") |> render_click()
|
||||||
assert html =~ "Discovery started"
|
assert html =~ "Discovery started"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "add_discovered_device with invalid JSON identifier shows error flash", %{conn: conn} do
|
||||||
|
{:ok, view, _html} = live(conn, ~p"/devices?tab=discovered")
|
||||||
|
|
||||||
|
html = render_hook(view, "add_discovered_device", %{"identifier" => "not-json"})
|
||||||
|
assert html =~ "Invalid device identifier"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "health and response time helpers" do
|
||||||
|
test "renders device with healthy passing check (worst_status=0)", %{
|
||||||
|
conn: conn,
|
||||||
|
site: site,
|
||||||
|
organization: organization
|
||||||
|
} do
|
||||||
|
{:ok, device} =
|
||||||
|
Devices.create_device(%{
|
||||||
|
name: "Healthy",
|
||||||
|
ip_address: "10.7.0.1",
|
||||||
|
site_id: site.id,
|
||||||
|
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
|
||||||
|
|> Check.state_changeset(%{
|
||||||
|
current_state: 0,
|
||||||
|
last_check_at: DateTime.truncate(DateTime.utc_now(), :second)
|
||||||
|
})
|
||||||
|
|> Towerops.Repo.update!()
|
||||||
|
|
||||||
|
{:ok, _view, html} = live(conn, ~p"/devices")
|
||||||
|
assert html =~ "Healthy"
|
||||||
|
# health_dot_color worst_status=0 path
|
||||||
|
assert html =~ "bg-green-500"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "renders device with critical check (worst_status=2)", %{
|
||||||
|
conn: conn,
|
||||||
|
site: site,
|
||||||
|
organization: organization
|
||||||
|
} do
|
||||||
|
{:ok, device} =
|
||||||
|
Devices.create_device(%{
|
||||||
|
name: "Critical",
|
||||||
|
ip_address: "10.7.0.2",
|
||||||
|
site_id: site.id,
|
||||||
|
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
|
||||||
|
|> Check.state_changeset(%{
|
||||||
|
current_state: 2,
|
||||||
|
last_check_at: DateTime.truncate(DateTime.utc_now(), :second)
|
||||||
|
})
|
||||||
|
|> Towerops.Repo.update!()
|
||||||
|
|
||||||
|
{: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
|
end
|
||||||
|
|
||||||
describe "search and status filter events" do
|
describe "search and status filter events" do
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue