test: GraphQL.Resolvers.Schedule queries, mutations, and auth branches

This commit is contained in:
Graham McIntire 2026-05-09 14:06:17 -05:00
parent b995954795
commit b71b1615eb

View file

@ -5,6 +5,8 @@ defmodule ToweropsWeb.Api.V1.CheckResultsControllerTest do
import Towerops.OrganizationsFixtures
alias Towerops.ApiTokens
alias Towerops.Snmp.Device
alias Towerops.Snmp.Interface
setup do
user = user_fixture()
@ -119,6 +121,54 @@ defmodule ToweropsWeb.Api.V1.CheckResultsControllerTest do
assert %{"data" => _data} = json_response(conn, 200)
end
test "falls back to default hours when value is non-numeric", %{conn: conn, device: device} do
# Exercises parse_int/2 :error fallback branch
conn = get(conn, ~p"/api/v1/devices/#{device.id}/metrics?hours=notanumber")
assert %{"data" => _data} = json_response(conn, 200)
end
test "accepts sensor_type as alias for check_type", %{conn: conn, device: device} do
conn = get(conn, ~p"/api/v1/devices/#{device.id}/metrics?sensor_type=ping")
assert %{"data" => _data} = json_response(conn, 200)
end
test "serializes recent check_result rows into the data array",
%{conn: conn, device: device, organization: organization} do
{:ok, check} =
Towerops.Monitoring.create_check(%{
name: "Inline Ping",
check_type: "ping",
enabled: true,
interval_seconds: 60,
device_id: device.id,
organization_id: organization.id,
config: %{"host" => "10.0.0.1"}
})
now = DateTime.truncate(DateTime.utc_now(), :second)
{:ok, _result} =
Towerops.Monitoring.create_check_result(%{
check_id: check.id,
organization_id: organization.id,
checked_at: now,
status: 0,
value: 42.0,
response_time_ms: 12.0
})
conn = get(conn, ~p"/api/v1/devices/#{device.id}/metrics?check_type=ping&hours=1")
assert %{"data" => data} = json_response(conn, 200)
check_entry = Enum.find(data, &(&1["check_id"] == check.id))
assert check_entry
[point | _] = check_entry["data"]
assert point["value"] == 42.0
assert point["status"] == 0
end
test "returns error for non-existent device", %{conn: conn} do
conn = get(conn, ~p"/api/v1/devices/#{Ecto.UUID.generate()}/metrics")
@ -134,6 +184,45 @@ defmodule ToweropsWeb.Api.V1.CheckResultsControllerTest do
assert %{"data" => []} = json_response(conn, 200)
end
test "returns serialized interfaces when SNMP device + interfaces exist",
%{conn: conn, device: device} do
snmp_device =
%Device{}
|> Device.changeset(%{
device_id: device.id,
sys_name: "test-router",
sys_descr: "Test Device"
})
|> Towerops.Repo.insert!()
_iface =
%Interface{}
|> Interface.changeset(%{
snmp_device_id: snmp_device.id,
if_index: 1,
if_name: "eth0",
if_descr: "Ethernet0",
if_alias: "uplink",
if_speed: 1_000_000_000,
if_admin_status: "up",
if_oper_status: "up",
monitored: true
})
|> Towerops.Repo.insert!()
conn = get(conn, ~p"/api/v1/devices/#{device.id}/interfaces")
assert %{"data" => [iface_json | _]} = json_response(conn, 200)
assert iface_json["if_index"] == 1
assert iface_json["if_name"] == "eth0"
assert iface_json["if_descr"] == "Ethernet0"
assert iface_json["if_alias"] == "uplink"
assert iface_json["if_speed"] == 1_000_000_000
assert iface_json["if_admin_status"] == "up"
assert iface_json["if_oper_status"] == "up"
assert iface_json["monitored"] == true
end
test "returns error for non-existent device", %{conn: conn} do
conn = get(conn, ~p"/api/v1/devices/#{Ecto.UUID.generate()}/interfaces")