berrypod/test/berrypod_web/live/admin/dashboard_test.exs
jamey 559798206f extract setup wizard to dedicated /admin/setup page
Move the setup stepper out of the dashboard into its own LiveView.
Dashboard now redirects to setup when site isn't live, and shows
stats-only view once live. Also cleans up button component variant
handling, fixes alert CSS, and removes stale demo.html.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 23:55:42 +00:00

60 lines
1.6 KiB
Elixir

defmodule BerrypodWeb.Admin.DashboardTest do
use BerrypodWeb.ConnCase, async: false
import Phoenix.LiveViewTest
import Berrypod.AccountsFixtures
import Berrypod.OrdersFixtures
setup do
user = user_fixture()
%{user: user}
end
describe "unauthenticated" do
test "redirects to login", %{conn: conn} do
{:error, redirect} = live(conn, ~p"/admin")
assert {:redirect, %{to: path}} = redirect
assert path == ~p"/users/log-in"
end
end
describe "redirects to setup when not live" do
setup %{conn: conn, user: user} do
%{conn: log_in_user(conn, user)}
end
test "redirects to /admin/setup when site not live", %{conn: conn} do
{:error, redirect} = live(conn, ~p"/admin")
assert {:live_redirect, %{to: "/admin/setup"}} = redirect
end
end
describe "stats" do
setup %{conn: conn, user: user} do
{:ok, _} = Berrypod.Settings.set_site_live(true)
%{conn: log_in_user(conn, user)}
end
test "shows stats cards", %{conn: conn} do
{:ok, view, _html} = live(conn, ~p"/admin")
assert has_element?(view, "a[href='/admin/orders']", "Orders")
assert has_element?(view, "a[href='/admin/products']", "Products")
end
test "shows zero state for orders", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/admin")
assert html =~ "No orders yet"
end
test "shows recent orders when they exist", %{conn: conn} do
order = order_fixture(%{payment_status: "paid"})
{:ok, _view, html} = live(conn, ~p"/admin")
assert html =~ order.order_number
assert html =~ "Recent orders"
end
end
end