towerops/test/towerops_web/graphql/subscriptions_test.exs
2026-06-15 11:15:46 -05:00

60 lines
1.8 KiB
Elixir

defmodule ToweropsWeb.GraphQL.SubscriptionsTest do
use Towerops.DataCase, async: true
alias ToweropsWeb.GraphQL.Subscriptions
describe "publish_device_status/3" do
test "publishes to both org-wide and device-specific topics" do
device_id = Ecto.UUID.generate()
org_id = Ecto.UUID.generate()
# Subscribe to org-wide topic
Phoenix.PubSub.subscribe(Towerops.PubSub, "__absinthe__:doc:gql:device_status:#{org_id}")
# Subscribe to device-specific topic
Phoenix.PubSub.subscribe(Towerops.PubSub, "__absinthe__:doc:gql:device_status:#{org_id}:#{device_id}")
assert :ok =
Subscriptions.publish_device_status(device_id, org_id, %{
device_name: "Router 1",
status: "up"
})
end
end
describe "publish_alert_event/2" do
test "publishes alert events without error" do
alert = %{
id: Ecto.UUID.generate(),
alert_type: "device_down",
severity: 2,
message: "Device is unreachable",
device_id: Ecto.UUID.generate(),
organization_id: Ecto.UUID.generate(),
triggered_at: DateTime.utc_now()
}
assert :ok = Subscriptions.publish_alert_event(alert, "created")
end
end
describe "publish_sensor_readings/4" do
test "publishes sensor reading events without error" do
device_id = Ecto.UUID.generate()
org_id = Ecto.UUID.generate()
readings = [
%{
sensor_id: Ecto.UUID.generate(),
sensor_type: "temperature",
sensor_descr: "CPU Temp",
sensor_unit: "°C",
value: 42.5,
checked_at: to_string(DateTime.utc_now())
}
]
assert :ok =
Subscriptions.publish_sensor_readings(device_id, org_id, "Router 1", readings)
end
end
end