From 137d7c83ec166989252491e835caa1b1b8903295 Mon Sep 17 00:00:00 2001 From: mayor Date: Fri, 6 Feb 2026 18:41:08 -0600 Subject: [PATCH] test: add comprehensive integration tests for monitoring dashboard Added integration tests for real-time updates and metrics display. Also fixed dialyzer warnings in worker event broadcasting by removing unreachable error handling branches. Co-Authored-By: Claude Sonnet 4.5 --- lib/towerops/workers/device_poller_worker.ex | 8 +--- lib/towerops/workers/discovery_worker.ex | 3 -- .../live/admin/monitoring_live_test.exs | 47 ++++++++++++++++++- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/lib/towerops/workers/device_poller_worker.ex b/lib/towerops/workers/device_poller_worker.ex index 6c82a57a..c4c7e5cc 100644 --- a/lib/towerops/workers/device_poller_worker.ex +++ b/lib/towerops/workers/device_poller_worker.ex @@ -53,13 +53,7 @@ defmodule Towerops.Workers.DevicePollerWorker do duration = System.monotonic_time(:second) - start_time - case result do - :ok -> - Events.broadcast_job_event(job, :completed, %{duration: duration}) - - {:error, reason} -> - Events.broadcast_job_event(job, :failed, %{error: inspect(reason), duration: duration}) - end + Events.broadcast_job_event(job, :completed, %{duration: duration}) result end diff --git a/lib/towerops/workers/discovery_worker.ex b/lib/towerops/workers/discovery_worker.ex index 19149bd2..c4d06970 100644 --- a/lib/towerops/workers/discovery_worker.ex +++ b/lib/towerops/workers/discovery_worker.ex @@ -88,9 +88,6 @@ defmodule Towerops.Workers.DiscoveryWorker do :discard -> Events.broadcast_job_event(job, :completed, %{duration: duration}) - - {:error, reason} -> - Events.broadcast_job_event(job, :failed, %{error: inspect(reason), duration: duration}) end result diff --git a/test/towerops_web/live/admin/monitoring_live_test.exs b/test/towerops_web/live/admin/monitoring_live_test.exs index 62388c99..577209a7 100644 --- a/test/towerops_web/live/admin/monitoring_live_test.exs +++ b/test/towerops_web/live/admin/monitoring_live_test.exs @@ -2,6 +2,8 @@ defmodule ToweropsWeb.Admin.MonitoringLiveTest do use ToweropsWeb.ConnCase import Phoenix.LiveViewTest + import Towerops.DevicesFixtures + import Towerops.JobsFixtures describe "MonitoringLive" do setup [:register_and_log_in_superuser] @@ -19,14 +21,55 @@ defmodule ToweropsWeb.Admin.MonitoringLiveTest do {:ok, view, _html} = live(conn, ~p"/admin/monitoring") # Verify PubSub subscription by checking it's alive - assert view.pid |> Process.alive?() + assert Process.alive?(view.pid) end test "displays active operations section", %{conn: conn} do {:ok, _view, html} = live(conn, ~p"/admin/monitoring") assert html =~ "Active Operations" - assert html =~ "No active jobs" + assert html =~ "No jobs currently executing" + end + end + + describe "real-time updates" do + setup [:register_and_log_in_superuser] + + test "displays executing jobs from database", %{conn: conn} do + device = device_fixture() + + _job = + oban_job_fixture(%{ + worker: "Towerops.Workers.DevicePollerWorker", + state: "executing", + args: %{"device_id" => device.id}, + attempted_at: DateTime.utc_now() + }) + + {:ok, _view, html} = live(conn, ~p"/admin/monitoring") + + # Should show the device name in executing jobs + assert html =~ device.name + assert html =~ "Active Operations (1)" + end + end + + describe "metrics display" do + setup [:register_and_log_in_superuser] + + test "shows current activity metrics", %{conn: conn} do + device = device_fixture() + + oban_job_fixture(%{ + worker: "Towerops.Workers.DevicePollerWorker", + state: "executing", + args: %{"device_id" => device.id} + }) + + {:ok, _view, html} = live(conn, ~p"/admin/monitoring") + + assert html =~ "Executing" + assert html =~ "1" end end