76 lines
2.7 KiB
Elixir
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
|