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)
73 lines
2.2 KiB
Elixir
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
|