prop/test/microwaveprop_web/live/admin/monitor_live_test.exs
Graham McIntire ca842e3add
feat(admin): beacon monitor reassign, token regen, assigned_by display, user monitor management
Uncommitted work from previous session:
- Add list_users_select/0 helper for admin select dropdowns
- Add regenerate_token/1 context function
- Preload assigned_by association on monitor queries
- Add admin nav link to beacon monitors
- Fix JS event targets (remove redundant target: @myself)
- Add reassign user form to admin monitor show page
- Add regenerate token button to admin monitor show page
- Show assigned_by admin on monitor detail page
- Add beacon monitors section to user management edit page
- Add unassign monitor capability from user management
- Add full test coverage for all new functionality
- Fix pre-existing /account route warning (redirect → /users/settings)
2026-07-22 16:27:21 -05:00

73 lines
2.2 KiB
Elixir

defmodule MicrowavepropWeb.Admin.MonitorLiveTest do
use MicrowavepropWeb.ConnCase, async: false
import Microwaveprop.AccountsFixtures
import Phoenix.LiveViewTest
alias Microwaveprop.Accounts
alias Microwaveprop.BeaconMonitors
defp admin_and_monitor do
admin = user_fixture()
{:ok, admin} = Accounts.admin_update_user(admin, %{is_admin: true})
target = user_fixture(callsign: "W5MON")
{:ok, monitor} = BeaconMonitors.create_monitor(target, %{"name" => "Test Monitor"})
{admin, target, monitor}
end
describe "index" do
test "lists all monitors", %{conn: conn} do
{admin, _target, monitor} = admin_and_monitor()
conn = log_in_user(conn, admin)
{:ok, _lv, html} = live(conn, ~p"/admin/beacon-monitors")
assert html =~ monitor.name
end
test "redirects non-admin to /", %{conn: conn} do
conn = log_in_user(conn, user_fixture())
assert {:error, {:redirect, %{to: "/"}}} = live(conn, ~p"/admin/beacon-monitors")
end
end
describe "show" do
test "shows monitor details", %{conn: conn} do
{admin, target, monitor} = admin_and_monitor()
conn = log_in_user(conn, admin)
{:ok, _lv, html} = live(conn, ~p"/admin/beacon-monitors/#{monitor.id}")
assert html =~ monitor.name
assert html =~ monitor.token
assert html =~ target.callsign
end
test "reassigns monitor to a different user", %{conn: conn} do
{admin, _target, monitor} = admin_and_monitor()
new_user = user_fixture(callsign: "W5NEW")
conn = log_in_user(conn, admin)
{:ok, lv, _html} = live(conn, ~p"/admin/beacon-monitors/#{monitor.id}")
html =
lv
|> form("#reassign-form", beacon_monitor: %{user_id: new_user.id})
|> render_submit()
assert html =~ "Monitor reassigned to #{new_user.callsign}"
end
test "regenerates the auth token", %{conn: conn} do
{admin, _target, monitor} = admin_and_monitor()
conn = log_in_user(conn, admin)
{:ok, lv, _html} = live(conn, ~p"/admin/beacon-monitors/#{monitor.id}")
html =
lv
|> element("#regenerate-token-btn")
|> render_click()
assert html =~ "Auth token regenerated"
end
end
end