Add comprehensive tests for Equipment context

Added 6 new tests to improve coverage:
- list_snmp_enabled_equipment/0 for SNMP-enabled equipment filtering
- update_snmp_poll_time/1 for updating polling timestamps
- create_event/1 for creating equipment events with proper schema
- list_equipment_events/2 for event retrieval and ordering
- list_equipment_events/2 with limit parameter

This improves Equipment coverage from 87.50% to higher.
This commit is contained in:
Graham McIntire 2026-01-13 08:01:45 -06:00
parent 6cc068543d
commit 43a9ff01a6
No known key found for this signature in database

View file

@ -163,5 +163,133 @@ defmodule Towerops.EquipmentTest do
# But checked_at should be updated
assert DateTime.after?(updated.last_checked_at, first_checked_at)
end
test "list_snmp_enabled_equipment/0 returns only equipment with SNMP enabled", %{site: site} do
{:ok, snmp_enabled} =
Equipment.create_equipment(%{
name: "SNMP Router",
ip_address: "192.168.1.1",
site_id: site.id,
snmp_enabled: true,
snmp_community: "public"
})
{:ok, _snmp_disabled} =
Equipment.create_equipment(%{
name: "Non-SNMP Router",
ip_address: "192.168.1.2",
site_id: site.id,
snmp_enabled: false
})
result = Equipment.list_snmp_enabled_equipment()
assert length(result) == 1
assert hd(result).id == snmp_enabled.id
end
test "update_snmp_poll_time/1 updates last_snmp_poll_at timestamp", %{site: site} do
{:ok, equipment} = Equipment.create_equipment(Map.put(@valid_attrs, :site_id, site.id))
assert equipment.last_snmp_poll_at == nil
assert {:ok, updated} = Equipment.update_snmp_poll_time(equipment)
assert updated.last_snmp_poll_at
assert DateTime.before?(updated.last_snmp_poll_at, DateTime.utc_now())
end
end
describe "events" do
import Towerops.AccountsFixtures
alias Towerops.Equipment.Event
setup do
user = user_fixture()
{:ok, organization} = Towerops.Organizations.create_organization(%{name: "Test Org"}, user.id)
{:ok, site} =
Towerops.Sites.create_site(%{
name: "Test Site",
organization_id: organization.id
})
{:ok, equipment} =
Equipment.create_equipment(%{
name: "Router 1",
ip_address: "192.168.1.1",
site_id: site.id
})
%{equipment: equipment}
end
test "create_event/1 creates an equipment event", %{equipment: equipment} do
attrs = %{
equipment_id: equipment.id,
event_type: "interface_up",
severity: "info",
message: "Interface came online",
metadata: %{"interface" => "eth0"},
occurred_at: DateTime.truncate(DateTime.utc_now(), :second)
}
assert {:ok, %Event{} = event} = Equipment.create_event(attrs)
assert event.equipment_id == equipment.id
assert event.event_type == "interface_up"
assert event.severity == "info"
assert event.message == "Interface came online"
assert event.metadata == %{"interface" => "eth0"}
end
test "create_event/1 with invalid data returns error changeset" do
assert {:error, %Ecto.Changeset{}} = Equipment.create_event(%{})
end
test "list_equipment_events/2 returns events for equipment ordered by most recent", %{
equipment: equipment
} do
now = DateTime.utc_now()
{:ok, event1} =
Equipment.create_event(%{
equipment_id: equipment.id,
event_type: "interface_up",
severity: "info",
message: "Interface came up",
occurred_at: DateTime.add(now, -3600, :second)
})
{:ok, event2} =
Equipment.create_event(%{
equipment_id: equipment.id,
event_type: "interface_down",
severity: "warning",
message: "Interface went down",
occurred_at: DateTime.add(now, -1800, :second)
})
events = Equipment.list_equipment_events(equipment.id)
assert length(events) == 2
# Should be ordered by most recent first
assert hd(events).id == event2.id
assert List.last(events).id == event1.id
end
test "list_equipment_events/2 limits results", %{equipment: equipment} do
now = DateTime.utc_now()
# Create 10 events
for i <- 1..10 do
Equipment.create_event(%{
equipment_id: equipment.id,
event_type: "interface_down",
severity: "warning",
message: "Interface down event #{i}",
occurred_at: DateTime.add(now, -i * 60, :second)
})
end
events = Equipment.list_equipment_events(equipment.id, 5)
assert length(events) == 5
end
end
end