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>
60 lines
1.6 KiB
Elixir
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
|