Add comprehensive tests for Agents context

Added 9 new tests to expand coverage:
- get_agent_token!/1 success and failure cases
- update_agent_token_heartbeat/3 edge cases (nil and empty metadata)
- get_equipment_assignment/1 for assigned and unassigned equipment
- update_equipment_assignment/2 for creating, updating, and removing assignments

This improves Agents coverage from 89.29% to higher.
This commit is contained in:
Graham McIntire 2026-01-13 07:54:36 -06:00
parent f0af777f6e
commit b91f81fc2e
No known key found for this signature in database

View file

@ -168,6 +168,141 @@ defmodule Towerops.AgentsTest do
end
end
describe "get_agent_token!/1" do
test "returns agent token by id", %{organization: org} do
{:ok, agent_token, _token} = Agents.create_agent_token(org.id, "Test Agent")
retrieved_token = Agents.get_agent_token!(agent_token.id)
assert retrieved_token.id == agent_token.id
assert retrieved_token.name == "Test Agent"
end
test "raises when token not found" do
assert_raise Ecto.NoResultsError, fn ->
Agents.get_agent_token!(Ecto.UUID.generate())
end
end
end
describe "update_agent_token_heartbeat/3 edge cases" do
test "updates without metadata when nil is provided", %{organization: org} do
{:ok, agent_token, _token} = Agents.create_agent_token(org.id, "Test Agent")
{1, _} = Agents.update_agent_token_heartbeat(agent_token.id, "192.168.1.1", nil)
updated_token = Repo.get!(AgentToken, agent_token.id)
assert updated_token.last_ip == "192.168.1.1"
assert updated_token.last_seen_at
end
test "updates without metadata when empty map is provided", %{organization: org} do
{:ok, agent_token, _token} = Agents.create_agent_token(org.id, "Test Agent")
{1, _} = Agents.update_agent_token_heartbeat(agent_token.id, "192.168.1.1", %{})
updated_token = Repo.get!(AgentToken, agent_token.id)
assert updated_token.last_ip == "192.168.1.1"
assert updated_token.last_seen_at
end
end
describe "get_equipment_assignment/1" do
setup %{organization: org} do
{:ok, site} =
Towerops.Sites.create_site(%{
name: "Test Site",
organization_id: org.id
})
{:ok, equipment} =
Towerops.Equipment.create_equipment(%{
name: "Test Equipment",
ip_address: "192.168.1.1",
site_id: site.id
})
{:ok, agent_token, _token} = Agents.create_agent_token(org.id, "Test Agent")
%{site: site, equipment: equipment, agent_token: agent_token}
end
test "returns assignment when equipment is assigned", %{
agent_token: agent_token,
equipment: equipment
} do
{:ok, assignment} = Agents.assign_equipment_to_agent(agent_token.id, equipment.id)
retrieved_assignment = Agents.get_equipment_assignment(equipment.id)
assert retrieved_assignment.id == assignment.id
end
test "returns nil when equipment is not assigned", %{equipment: equipment} do
assert Agents.get_equipment_assignment(equipment.id) == nil
end
end
describe "update_equipment_assignment/2" do
setup %{organization: org} do
{:ok, site} =
Towerops.Sites.create_site(%{
name: "Test Site",
organization_id: org.id
})
{:ok, equipment} =
Towerops.Equipment.create_equipment(%{
name: "Test Equipment",
ip_address: "192.168.1.1",
site_id: site.id
})
{:ok, agent_token1, _} = Agents.create_agent_token(org.id, "Agent 1")
{:ok, agent_token2, _} = Agents.create_agent_token(org.id, "Agent 2")
%{
site: site,
equipment: equipment,
agent_token1: agent_token1,
agent_token2: agent_token2
}
end
test "creates new assignment when equipment is unassigned", %{
equipment: equipment,
agent_token1: agent_token1
} do
assert {:ok, assignment} =
Agents.update_equipment_assignment(equipment.id, agent_token1.id)
assert assignment.agent_token_id == agent_token1.id
assert assignment.equipment_id == equipment.id
end
test "updates existing assignment to new agent", %{
equipment: equipment,
agent_token1: agent_token1,
agent_token2: agent_token2
} do
{:ok, _} = Agents.assign_equipment_to_agent(agent_token1.id, equipment.id)
assert {:ok, updated_assignment} =
Agents.update_equipment_assignment(equipment.id, agent_token2.id)
assert updated_assignment.agent_token_id == agent_token2.id
assert updated_assignment.equipment_id == equipment.id
end
test "removes assignment when set to nil", %{
equipment: equipment,
agent_token1: agent_token1
} do
{:ok, _} = Agents.assign_equipment_to_agent(agent_token1.id, equipment.id)
assert {:ok, nil} = Agents.update_equipment_assignment(equipment.id, nil)
assert Agents.get_equipment_assignment(equipment.id) == nil
end
end
describe "list_agent_equipment/1" do
setup %{organization: org} do
{:ok, site} =