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