towerops/test/towerops/profiles/device_profile_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

130 lines
3.5 KiB
Elixir

defmodule Towerops.Profiles.DeviceProfileTest do
use Towerops.DataCase, async: true
alias Towerops.Profiles.DeviceProfile
describe "changeset/2" do
test "valid changeset with all fields" do
attrs = %{
name: "Test Profile",
vendor: "Test Vendor",
detection_pattern: "Test.*Device",
detection_oid: "1.3.6.1.4.1.12345",
priority: 50,
enabled: true
}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
assert changeset.valid?
end
test "valid changeset with minimal required fields" do
attrs = %{
name: "Minimal Profile",
vendor: "Test"
}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
assert changeset.valid?
assert get_change(changeset, :priority) == nil
assert get_field(changeset, :priority) == 100
assert get_field(changeset, :enabled) == true
end
test "invalid changeset without name" do
attrs = %{vendor: "Test"}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
refute changeset.valid?
assert "can't be blank" in errors_on(changeset).name
end
test "invalid changeset without vendor" do
attrs = %{name: "Test"}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
refute changeset.valid?
assert "can't be blank" in errors_on(changeset).vendor
end
test "invalid changeset with empty name" do
attrs = %{name: "", vendor: "Test"}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
refute changeset.valid?
end
test "invalid changeset with empty vendor" do
attrs = %{name: "Test", vendor: ""}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
refute changeset.valid?
end
test "valid changeset with nil optional fields" do
attrs = %{
name: "Test",
vendor: "Test",
detection_pattern: nil,
detection_oid: nil
}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
assert changeset.valid?
end
test "valid changeset with detection_pattern only" do
attrs = %{
name: "Test",
vendor: "Test",
detection_pattern: "Cisco.*"
}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
assert changeset.valid?
end
test "valid changeset with detection_oid only" do
attrs = %{
name: "Test",
vendor: "Test",
detection_oid: "1.3.6.1.4.1.9"
}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
assert changeset.valid?
end
test "valid changeset with both detection methods" do
attrs = %{
name: "Test",
vendor: "Test",
detection_pattern: "Cisco.*",
detection_oid: "1.3.6.1.4.1.9"
}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
assert changeset.valid?
end
test "valid changeset with custom priority" do
attrs = %{
name: "Test",
vendor: "Test",
priority: 1
}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
assert changeset.valid?
assert get_change(changeset, :priority) == 1
end
test "valid changeset with enabled false" do
attrs = %{
name: "Test",
vendor: "Test",
enabled: false
}
changeset = DeviceProfile.changeset(%DeviceProfile{}, attrs)
assert changeset.valid?
assert get_change(changeset, :enabled) == false
end
end
end