towerops/test/towerops/profiles/device_oid_test.exs
Graham McIntire d34b8b0f3f
Add comprehensive test coverage for core context modules
Improves test coverage toward 90% target by adding tests for:
- Organizations context (bulk SNMP/agent operations)
- Sites context (hierarchical structure and bulk operations)
- Profiles context and schemas (device/sensor OID management)
- EctoTypes.JsonAny custom type
- Snmp.Neighbor schema (LLDP/CDP topology)

All new tests validate changeset validations, business logic,
and database constraints to ensure data integrity.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-19 14:38:34 -06:00

100 lines
2.6 KiB
Elixir

defmodule Towerops.Profiles.DeviceOidTest do
use Towerops.DataCase, async: true
alias Towerops.Profiles
alias Towerops.Profiles.DeviceOid
describe "changeset/2" do
setup do
{:ok, profile} = Profiles.create_profile(%{name: "Test Profile", vendor: "Test"})
%{profile: profile}
end
test "valid changeset with all required fields", %{profile: profile} do
attrs = %{
field: "serial_number",
mib_name: "TEST-MIB::serialNumber.0",
profile_id: profile.id
}
changeset = DeviceOid.changeset(%DeviceOid{}, attrs)
assert changeset.valid?
end
test "invalid changeset without field", %{profile: profile} do
attrs = %{
mib_name: "TEST-MIB::serialNumber.0",
profile_id: profile.id
}
changeset = DeviceOid.changeset(%DeviceOid{}, attrs)
refute changeset.valid?
assert "can't be blank" in errors_on(changeset).field
end
test "invalid changeset without mib_name", %{profile: profile} do
attrs = %{
field: "serial_number",
profile_id: profile.id
}
changeset = DeviceOid.changeset(%DeviceOid{}, attrs)
refute changeset.valid?
assert "can't be blank" in errors_on(changeset).mib_name
end
test "invalid changeset without profile_id" do
attrs = %{
field: "serial_number",
mib_name: "TEST-MIB::serialNumber.0"
}
changeset = DeviceOid.changeset(%DeviceOid{}, attrs)
refute changeset.valid?
assert "can't be blank" in errors_on(changeset).profile_id
end
test "valid changeset with various field names", %{profile: profile} do
fields = [
"serial_number",
"firmware_version",
"hardware_version",
"model",
"uptime",
"location"
]
for field <- fields do
attrs = %{
field: field,
mib_name: "TEST-MIB::#{field}.0",
profile_id: profile.id
}
changeset = DeviceOid.changeset(%DeviceOid{}, attrs)
assert changeset.valid?
end
end
test "valid changeset with various MIB name formats", %{profile: profile} do
mib_names = [
"SNMPv2-MIB::sysDescr.0",
"MIKROTIK-MIB::mtxrSerialNumber.0",
"CISCO-PRODUCTS-MIB::ciscoProductId",
"1.3.6.1.2.1.1.1.0",
".1.3.6.1.2.1.1.1.0"
]
for mib_name <- mib_names do
attrs = %{
field: "test_field",
mib_name: mib_name,
profile_id: profile.id
}
changeset = DeviceOid.changeset(%DeviceOid{}, attrs)
assert changeset.valid?
end
end
end
end