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