towerops/test/towerops_web/live/helpers/access_control_test.exs
Graham McIntire 4e6a038fb5
test: fix all compile warnings in subscriber matching tests
- Prefix unused variables with underscore in subscriber_matching_test.exs
- Fix unused integration_id parameters in gaiia_fixtures.ex
- Remove duplicate site_fixture/1 from access_control_test.exs
- Use public site_fixture/2 from OrganizationsFixtures instead
- Remove unused Sites alias from access_control_test.exs

All 19 subscriber matching tests passing with no warnings.
2026-03-10 13:02:32 -05:00

163 lines
4.5 KiB
Elixir

defmodule ToweropsWeb.Live.Helpers.AccessControlTest do
use Towerops.DataCase, async: true
import Towerops.AccountsFixtures
import Towerops.DevicesFixtures
import Towerops.OrganizationsFixtures
alias Towerops.Alerts
alias ToweropsWeb.Live.Helpers.AccessControl
describe "verify_device_access/2" do
setup do
user1 = user_fixture()
user2 = user_fixture()
org1 = organization_fixture(user1.id)
org2 = organization_fixture(user2.id)
site1 = site_fixture(org1.id)
site2 = site_fixture(org2.id)
device1 = device_fixture(%{site: site1, organization: org1})
device2 = device_fixture(%{site: site2, organization: org2})
%{
org1: org1,
org2: org2,
site1: site1,
site2: site2,
device1: device1,
device2: device2
}
end
test "returns {:ok, device} when device belongs to organization", %{
device1: device,
org1: org
} do
assert {:ok, returned_device} = AccessControl.verify_device_access(device.id, org.id)
assert returned_device.id == device.id
end
test "returns {:error, :unauthorized} when device belongs to different organization", %{
device1: device,
org2: wrong_org
} do
assert {:error, :unauthorized} = AccessControl.verify_device_access(device.id, wrong_org.id)
end
test "returns {:error, :not_found} when device does not exist", %{org1: org} do
fake_id = Ecto.UUID.generate()
assert {:error, :not_found} = AccessControl.verify_device_access(fake_id, org.id)
end
end
describe "verify_site_access/2" do
setup do
user1 = user_fixture()
user2 = user_fixture()
org1 = organization_fixture(user1.id)
org2 = organization_fixture(user2.id)
site1 = site_fixture(org1.id)
site2 = site_fixture(org2.id)
%{
org1: org1,
org2: org2,
site1: site1,
site2: site2
}
end
test "returns {:ok, site} when site belongs to organization", %{
site1: site,
org1: org
} do
assert {:ok, returned_site} = AccessControl.verify_site_access(site.id, org.id)
assert returned_site.id == site.id
end
test "returns {:error, :unauthorized} when site belongs to different organization", %{
site1: site,
org2: wrong_org
} do
assert {:error, :unauthorized} = AccessControl.verify_site_access(site.id, wrong_org.id)
end
test "returns {:error, :not_found} when site does not exist", %{org1: org} do
fake_id = Ecto.UUID.generate()
assert {:error, :not_found} = AccessControl.verify_site_access(fake_id, org.id)
end
end
describe "verify_alert_access/2" do
setup do
user1 = user_fixture()
user2 = user_fixture()
org1 = organization_fixture(user1.id)
org2 = organization_fixture(user2.id)
site1 = site_fixture(org1.id)
site2 = site_fixture(org2.id)
device1 = device_fixture(%{site: site1, organization: org1})
device2 = device_fixture(%{site: site2, organization: org2})
alert1 = alert_fixture(device_id: device1.id)
alert2 = alert_fixture(device_id: device2.id)
%{
org1: org1,
org2: org2,
device1: device1,
device2: device2,
alert1: alert1,
alert2: alert2
}
end
test "returns {:ok, alert} when alert's device belongs to organization", %{
alert1: alert,
org1: org
} do
assert {:ok, returned_alert} = AccessControl.verify_alert_access(alert.id, org.id)
assert returned_alert.id == alert.id
# Verify preloading worked
assert returned_alert.device
assert returned_alert.device.site
assert returned_alert.device.site.organization
end
test "returns {:error, :unauthorized} when alert's device belongs to different organization",
%{
alert1: alert,
org2: wrong_org
} do
assert {:error, :unauthorized} = AccessControl.verify_alert_access(alert.id, wrong_org.id)
end
test "returns {:error, :not_found} when alert does not exist", %{org1: org} do
fake_id = Ecto.UUID.generate()
assert {:error, :not_found} = AccessControl.verify_alert_access(fake_id, org.id)
end
end
# Helper functions to create test data
defp alert_fixture(attrs) do
{:ok, alert} =
attrs
|> Enum.into(%{
alert_type: "device_down",
message: "Test alert",
triggered_at: DateTime.utc_now()
})
|> Alerts.create_alert()
alert
end
end