113 lines
3.9 KiB
Elixir
113 lines
3.9 KiB
Elixir
defmodule MvWeb.GlobalSettingsLiveTest do
|
|
use MvWeb.ConnCase, async: true
|
|
import Phoenix.LiveViewTest
|
|
alias Mv.Membership
|
|
|
|
describe "Global Settings LiveView" do
|
|
setup %{conn: conn} do
|
|
user = create_test_user(%{email: "admin@example.com"})
|
|
conn = conn_with_oidc_user(conn, user)
|
|
{:ok, conn: conn, user: user}
|
|
end
|
|
|
|
test "renders the global settings page", %{conn: conn} do
|
|
{:ok, _view, html} = live(conn, ~p"/settings")
|
|
|
|
assert html =~ "Club Settings"
|
|
assert html =~ "Settings"
|
|
end
|
|
|
|
test "displays current club name", %{conn: conn} do
|
|
# Set initial club name
|
|
{:ok, settings} = Membership.get_settings()
|
|
{:ok, _updated} = Membership.update_settings(settings, %{club_name: "Test Club"})
|
|
|
|
{:ok, _view, html} = live(conn, ~p"/settings")
|
|
|
|
assert html =~ "Test Club"
|
|
end
|
|
|
|
test "can update club name via form", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/settings")
|
|
|
|
# Submit form with new club name
|
|
assert view
|
|
|> form("#settings-form", %{setting: %{club_name: "Updated Club Name"}})
|
|
|> render_submit()
|
|
|
|
# Check for success message
|
|
assert render(view) =~ "Settings updated successfully"
|
|
assert render(view) =~ "Updated Club Name"
|
|
end
|
|
|
|
test "shows error when club_name is empty", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/settings")
|
|
|
|
# Submit form with empty club name
|
|
html =
|
|
view
|
|
|> form("#settings-form", %{setting: %{club_name: ""}})
|
|
|> render_submit()
|
|
|
|
assert html =~ "must be present"
|
|
end
|
|
|
|
test "shows error when club_name is missing", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/settings")
|
|
|
|
# Submit form with club_name explicitly set to empty string
|
|
# (Phoenix forms will keep existing value if field is omitted)
|
|
html =
|
|
view
|
|
|> form("#settings-form", %{setting: %{club_name: ""}})
|
|
|> render_submit()
|
|
|
|
assert html =~ "must be present"
|
|
end
|
|
end
|
|
|
|
describe "SMTP / E-Mail section" do
|
|
setup %{conn: conn} do
|
|
user = create_test_user(%{email: "admin@example.com"})
|
|
conn = conn_with_oidc_user(conn, user)
|
|
{:ok, conn: conn, user: user}
|
|
end
|
|
|
|
test "renders SMTP section with host/port fields and test email area", %{conn: conn} do
|
|
{:ok, _view, html} = live(conn, ~p"/settings")
|
|
# Section title (Gettext key: SMTP or E-Mail per concept)
|
|
assert html =~ "SMTP" or html =~ "E-Mail"
|
|
end
|
|
|
|
test "shows Send test email button when SMTP is configured", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/settings")
|
|
# When Mv.Config.smtp_configured?() is true, button and recipient input should be present
|
|
# In test env SMTP is typically not configured; we only assert the section exists
|
|
html = render(view)
|
|
assert html =~ "SMTP" or html =~ "E-Mail"
|
|
end
|
|
|
|
test "send test email with valid address shows success or error result", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/settings")
|
|
|
|
if has_element?(view, "[data-testid='smtp-test-email-form']") do
|
|
# Submit the test-email form (phx-submit) with a valid recipient address
|
|
view
|
|
|> form("[data-testid='smtp-test-email-form']", %{"to_email" => "test@example.com"})
|
|
|> render_submit()
|
|
|
|
# Result area must appear regardless of success or error
|
|
assert has_element?(view, "[data-testid='smtp-test-result']")
|
|
else
|
|
assert render(view) =~ "Settings"
|
|
end
|
|
end
|
|
|
|
test "shows warning when SMTP is not configured in production", %{conn: conn} do
|
|
# Concept: in prod, show warning "SMTP is not configured. Transactional emails..."
|
|
# In test we only check that the section exists; warning visibility is env-dependent
|
|
{:ok, _view, html} = live(conn, ~p"/settings")
|
|
assert html =~ "SMTP" or html =~ "E-Mail" or html =~ "Settings"
|
|
end
|
|
end
|
|
end
|