towerops/test/towerops_web/live/admin/dashboard_live_test.exs

52 lines
1.5 KiB
Elixir

defmodule ToweropsWeb.Admin.DashboardLiveTest do
use ToweropsWeb.ConnCase, async: true
import Phoenix.LiveViewTest
setup do
user = Towerops.AccountsFixtures.user_fixture(enable_totp: true)
user = user |> Ecto.Changeset.change(%{is_superuser: true}) |> Towerops.Repo.update!()
{:ok, _organization} = Towerops.Organizations.create_organization(%{name: "Test Org"}, user.id)
token = Towerops.Accounts.generate_user_session_token(user)
conn =
build_conn()
|> Phoenix.ConnTest.init_test_session(%{})
|> Plug.Conn.put_session(:user_token, token)
%{conn: conn, user: user}
end
describe "mount" do
test "renders admin dashboard for superuser", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/admin")
assert html =~ "Dashboard"
end
test "shows user and org counts", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/admin")
assert html =~ "Users"
assert html =~ "Organizations"
end
test "redirects non-superuser to /orgs", %{user: user} do
# Use existing user from setup but remove superuser flag
regular_user =
user
|> Ecto.Changeset.change(%{is_superuser: false})
|> Towerops.Repo.update!()
token = Towerops.Accounts.generate_user_session_token(regular_user)
conn =
build_conn()
|> Phoenix.ConnTest.init_test_session(%{})
|> Plug.Conn.put_session(:user_token, token)
assert {:error, {:redirect, %{to: "/orgs"}}} = live(conn, ~p"/admin")
end
end
end