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

161 lines
4.4 KiB
Elixir

defmodule Towerops.Profiles.SensorOidTest do
use Towerops.DataCase, async: true
alias Towerops.Profiles
alias Towerops.Profiles.SensorOid
describe "changeset/2" do
setup do
{:ok, profile} = Profiles.create_profile(%{name: "Test Profile", vendor: "Test"})
%{profile: profile}
end
test "valid changeset with all fields", %{profile: profile} do
attrs = %{
sensor_type: "temperature",
mib_name: "TEST-MIB::temperature.0",
sensor_descr: "CPU Temperature",
sensor_unit: "celsius",
sensor_divisor: 10,
profile_id: profile.id
}
changeset = SensorOid.changeset(%SensorOid{}, attrs)
assert changeset.valid?
end
test "valid changeset with minimal required fields", %{profile: profile} do
attrs = %{
sensor_type: "voltage",
mib_name: "TEST-MIB::voltage.0",
profile_id: profile.id
}
changeset = SensorOid.changeset(%SensorOid{}, attrs)
assert changeset.valid?
assert get_field(changeset, :sensor_divisor) == 1
end
test "invalid changeset without sensor_type", %{profile: profile} do
attrs = %{
mib_name: "TEST-MIB::temperature.0",
profile_id: profile.id
}
changeset = SensorOid.changeset(%SensorOid{}, attrs)
refute changeset.valid?
assert "can't be blank" in errors_on(changeset).sensor_type
end
test "invalid changeset without mib_name", %{profile: profile} do
attrs = %{
sensor_type: "temperature",
profile_id: profile.id
}
changeset = SensorOid.changeset(%SensorOid{}, attrs)
refute changeset.valid?
assert "can't be blank" in errors_on(changeset).mib_name
end
test "invalid changeset without profile_id" do
attrs = %{
sensor_type: "temperature",
mib_name: "TEST-MIB::temperature.0"
}
changeset = SensorOid.changeset(%SensorOid{}, attrs)
refute changeset.valid?
assert "can't be blank" in errors_on(changeset).profile_id
end
test "valid changeset with various sensor types", %{profile: profile} do
sensor_types = [
"temperature",
"voltage",
"current",
"power",
"fanspeed",
"humidity",
"pressure"
]
for sensor_type <- sensor_types do
attrs = %{
sensor_type: sensor_type,
mib_name: "TEST-MIB::#{sensor_type}.0",
profile_id: profile.id
}
changeset = SensorOid.changeset(%SensorOid{}, attrs)
assert changeset.valid?
end
end
test "valid changeset with various sensor units", %{profile: profile} do
units = [
{"temperature", "celsius"},
{"temperature", "fahrenheit"},
{"voltage", "volts"},
{"current", "amperes"},
{"power", "watts"},
{"fanspeed", "rpm"}
]
for {sensor_type, unit} <- units do
attrs = %{
sensor_type: sensor_type,
mib_name: "TEST-MIB::test.0",
sensor_unit: unit,
profile_id: profile.id
}
changeset = SensorOid.changeset(%SensorOid{}, attrs)
assert changeset.valid?
end
end
test "valid changeset with various divisors", %{profile: profile} do
divisors = [1, 10, 100, 1000]
for divisor <- divisors do
attrs = %{
sensor_type: "temperature",
mib_name: "TEST-MIB::temp.0",
sensor_divisor: divisor,
profile_id: profile.id
}
changeset = SensorOid.changeset(%SensorOid{}, attrs)
assert changeset.valid?
assert get_field(changeset, :sensor_divisor) == divisor
end
end
test "valid changeset with nil optional fields", %{profile: profile} do
attrs = %{
sensor_type: "temperature",
mib_name: "TEST-MIB::temp.0",
sensor_descr: nil,
sensor_unit: nil,
profile_id: profile.id
}
changeset = SensorOid.changeset(%SensorOid{}, attrs)
assert changeset.valid?
end
test "valid changeset with sensor description", %{profile: profile} do
attrs = %{
sensor_type: "temperature",
mib_name: "TEST-MIB::temp.0",
sensor_descr: "Board Temperature Sensor #1",
profile_id: profile.id
}
changeset = SensorOid.changeset(%SensorOid{}, attrs)
assert changeset.valid?
assert get_field(changeset, :sensor_descr) == "Board Temperature Sensor #1"
end
end
end