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:
parent
6cc068543d
commit
43a9ff01a6
1 changed files with 128 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue