60 lines
1.8 KiB
Elixir
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
|