towerops/test/towerops_web/live/coverage_live/index_test.exs
2026-06-14 08:27:57 -05:00

76 lines
2.7 KiB
Elixir

defmodule ToweropsWeb.CoverageLive.IndexTest do
use ToweropsWeb.ConnCase
import Phoenix.LiveViewTest
import Towerops.CoveragesFixtures
import Towerops.OrganizationsFixtures
alias ToweropsWeb.CoverageLive.Index, as: Idx
setup :register_and_log_in_user
setup %{conn: conn, user: user} do
org = organization_fixture(user.id)
site = site_fixture(org.id, %{latitude: 30.27, longitude: -97.74})
conn = Plug.Conn.put_session(conn, :current_organization_id, org.id)
%{conn: conn, org: org, site: site}
end
test "renders empty state when org has no coverages", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/coverage/list")
assert html =~ "Coverage"
end
test "lists coverages for the org", %{conn: conn, org: org, site: site} do
cov = coverage_fixture(org.id, site.id, %{name: "Sector North"})
{:ok, _view, html} = live(conn, ~p"/coverage/list")
assert html =~ cov.name
end
test "requires authentication" do
conn = build_conn()
assert {:error, {:redirect, %{to: path}}} = live(conn, ~p"/coverage/list")
assert path =~ "/users/log-in"
end
describe "events" do
test "delete removes the coverage and refreshes the list", %{conn: conn, org: org, site: site} do
cov = coverage_fixture(org.id, site.id, %{name: "Doomed"})
{:ok, view, html} = live(conn, ~p"/coverage/list")
assert html =~ "Doomed"
html = render_click(view, "delete", %{"id" => cov.id})
refute html =~ "Doomed"
end
test "recompute flips a draft coverage to queued and reloads", %{conn: conn, org: org, site: site} do
cov = coverage_fixture(org.id, site.id, %{name: "Recomp"})
{:ok, view, _html} = live(conn, ~p"/coverage/list")
html = render_click(view, "recompute", %{"id" => cov.id})
assert html =~ "queued"
end
test "recompute returns the in-progress flash if already computing", %{conn: conn, org: org, site: site} do
cov = coverage_fixture(org.id, site.id)
{:ok, _} = Towerops.Coverages.mark_status(cov, "computing", %{})
{:ok, view, _html} = live(conn, ~p"/coverage/list")
html = render_click(view, "recompute", %{"id" => cov.id})
assert html =~ "already being computed"
end
end
describe "status_badge_class/1" do
test "maps known statuses to themed classes" do
assert Idx.status_badge_class("ready") =~ "bg-green"
assert Idx.status_badge_class("failed") =~ "bg-red"
assert Idx.status_badge_class("computing") =~ "bg-yellow"
assert Idx.status_badge_class("queued") =~ "bg-blue"
assert Idx.status_badge_class("draft") =~ "bg-gray"
assert Idx.status_badge_class("anything-else") =~ "bg-gray"
end
end
end