defmodule ToweropsWeb.CoverageLive.IndexTest do use ToweropsWeb.ConnCase import Phoenix.LiveViewTest import Towerops.CoveragesFixtures import Towerops.OrganizationsFixtures 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 alias ToweropsWeb.CoverageLive.Index, as: Idx 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