towerops/test/towerops_web/live/org/settings_live_test.exs

145 lines
4.3 KiB
Elixir

defmodule ToweropsWeb.Org.SettingsLiveTest do
use ToweropsWeb.ConnCase
import Phoenix.LiveViewTest
import Towerops.AccountsFixtures
import Towerops.AgentsFixtures
import Towerops.OrganizationsFixtures
setup do
user = user_fixture()
organization = organization_fixture(user.id)
%{user: user, organization: organization}
end
describe "Settings page" do
test "displays organization settings form", %{conn: conn, user: user, organization: org} do
{:ok, _view, html} =
conn
|> log_in_user(user)
|> live(~p"/orgs/#{org.slug}/settings")
assert html =~ "Organization Settings"
assert html =~ "Organization Name"
assert html =~ org.name
end
test "shows no agents message when no agents exist", %{
conn: conn,
user: user,
organization: org
} do
{:ok, _view, html} =
conn
|> log_in_user(user)
|> live(~p"/orgs/#{org.slug}/settings")
assert html =~ "No agents configured yet"
assert html =~ "Create an agent"
end
test "shows default agent dropdown when agents exist", %{
conn: conn,
user: user,
organization: org
} do
{:ok, agent_token, _token} = agent_token_fixture(org.id, "Test Agent")
{:ok, _view, html} =
conn
|> log_in_user(user)
|> live(~p"/orgs/#{org.slug}/settings")
assert html =~ "Default Remote Agent"
assert html =~ agent_token.name
assert html =~ "No default agent - cloud polling"
end
test "updates organization name successfully", %{conn: conn, user: user, organization: org} do
{:ok, view, _html} =
conn
|> log_in_user(user)
|> live(~p"/orgs/#{org.slug}/settings")
html =
view
|> form("#organization-form", organization: %{name: "Updated Name"})
|> render_submit()
assert html =~ "Settings saved successfully"
# Verify the organization was actually updated
updated_org = Towerops.Organizations.get_organization!(org.id)
assert updated_org.name == "Updated Name"
end
test "sets default agent for organization", %{conn: conn, user: user, organization: org} do
{:ok, agent_token, _token} = agent_token_fixture(org.id, "Test Agent")
{:ok, view, _html} =
conn
|> log_in_user(user)
|> live(~p"/orgs/#{org.slug}/settings")
html =
view
|> form("#organization-form", organization: %{default_agent_token_id: agent_token.id})
|> render_submit()
assert html =~ "Settings saved successfully"
# Verify the default agent was set
updated_org = Towerops.Organizations.get_organization!(org.id)
assert updated_org.default_agent_token_id == agent_token.id
end
test "clears default agent for organization", %{conn: conn, user: user, organization: org} do
{:ok, agent_token, _token} = agent_token_fixture(org.id, "Test Agent")
# First set a default agent
{:ok, org} =
Towerops.Organizations.update_organization(org, %{
default_agent_token_id: agent_token.id
})
{:ok, view, _html} =
conn
|> log_in_user(user)
|> live(~p"/orgs/#{org.slug}/settings")
# Now clear it
html =
view
|> form("#organization-form", organization: %{default_agent_token_id: ""})
|> render_submit()
assert html =~ "Settings saved successfully"
# Verify the default agent was cleared
updated_org = Towerops.Organizations.get_organization!(org.id)
assert updated_org.default_agent_token_id == nil
end
test "validates organization name", %{conn: conn, user: user, organization: org} do
{:ok, view, _html} =
conn
|> log_in_user(user)
|> live(~p"/orgs/#{org.slug}/settings")
# Form requires name field - submitting empty should fail
html =
view
|> form("#organization-form", organization: %{name: ""})
|> render_submit()
# The form should still be displayed (not redirected)
assert html =~ "Organization Name"
end
test "requires authentication", %{conn: conn, organization: org} do
assert {:error, {:redirect, %{to: "/users/log-in"}}} =
live(conn, ~p"/orgs/#{org.slug}/settings")
end
end
end