- Add LiveView tests for DashboardLive, AlertLive, SiteLive, EquipmentLive, OrgLive - Add comprehensive tests for Organizations context (memberships, invitations, auth) - Add tests for AlertNotifier email delivery - Improve test coverage from 54.78% to 86.65% - Add 101 new tests (256 total tests)
116 lines
3 KiB
Elixir
116 lines
3 KiB
Elixir
defmodule ToweropsWeb.OrgLiveTest do
|
|
use ToweropsWeb.ConnCase
|
|
|
|
import Phoenix.LiveViewTest
|
|
|
|
setup :register_and_log_in_user
|
|
|
|
describe "Index" do
|
|
test "lists all user organizations", %{conn: conn, user: user} do
|
|
{:ok, organization} =
|
|
Towerops.Organizations.create_organization(%{name: "Test Org"}, user.id)
|
|
|
|
{:ok, _view, html} = live(conn, ~p"/orgs")
|
|
|
|
assert html =~ "Organizations"
|
|
assert html =~ organization.name
|
|
end
|
|
|
|
test "displays empty state when user has no organizations", %{conn: conn} do
|
|
{:ok, _view, html} = live(conn, ~p"/orgs")
|
|
|
|
assert html =~ "No organizations"
|
|
end
|
|
|
|
test "has link to create new organization", %{conn: conn} do
|
|
{:ok, _view, html} = live(conn, ~p"/orgs")
|
|
|
|
assert html =~ "New Organization"
|
|
end
|
|
|
|
test "navigates to organization dashboard when clicking open button", %{conn: conn, user: user} do
|
|
{:ok, organization} =
|
|
Towerops.Organizations.create_organization(%{name: "Test Org"}, user.id)
|
|
|
|
{:ok, view, _html} = live(conn, ~p"/orgs")
|
|
|
|
{:ok, _, html} =
|
|
view
|
|
|> element("a", "Open")
|
|
|> render_click()
|
|
|> follow_redirect(conn, ~p"/orgs/#{organization.slug}")
|
|
|
|
assert html =~ organization.name
|
|
end
|
|
|
|
test "requires authentication" do
|
|
conn = build_conn()
|
|
{:error, redirect} = live(conn, ~p"/orgs")
|
|
|
|
assert {:redirect, %{to: path}} = redirect
|
|
assert path == ~p"/users/log-in"
|
|
end
|
|
end
|
|
|
|
describe "New" do
|
|
test "renders new organization form", %{conn: conn} do
|
|
{:ok, _view, html} = live(conn, ~p"/orgs/new")
|
|
|
|
assert html =~ "New Organization"
|
|
end
|
|
|
|
test "creates new organization", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/orgs/new")
|
|
|
|
{:ok, _, html} =
|
|
view
|
|
|> form("#organization-form",
|
|
organization: %{
|
|
name: "New Organization"
|
|
}
|
|
)
|
|
|> render_submit()
|
|
|> follow_redirect(conn, ~p"/orgs")
|
|
|
|
assert html =~ "Organization created successfully"
|
|
assert html =~ "New Organization"
|
|
end
|
|
|
|
test "validates required fields", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/orgs/new")
|
|
|
|
html =
|
|
view
|
|
|> form("#organization-form", organization: %{name: ""})
|
|
|> render_submit()
|
|
|
|
assert html =~ "can't be blank"
|
|
end
|
|
|
|
test "validates unique organization name", %{conn: conn, user: user} do
|
|
{:ok, _organization} =
|
|
Towerops.Organizations.create_organization(%{name: "Existing Org"}, user.id)
|
|
|
|
{:ok, view, _html} = live(conn, ~p"/orgs/new")
|
|
|
|
html =
|
|
view
|
|
|> form("#organization-form",
|
|
organization: %{
|
|
name: "Existing Org"
|
|
}
|
|
)
|
|
|> render_submit()
|
|
|
|
assert html =~ "has already been taken"
|
|
end
|
|
|
|
test "requires authentication" do
|
|
conn = build_conn()
|
|
{:error, redirect} = live(conn, ~p"/orgs/new")
|
|
|
|
assert {:redirect, %{to: path}} = redirect
|
|
assert path == ~p"/users/log-in"
|
|
end
|
|
end
|
|
end
|