This commit is contained in:
parent
70b3875154
commit
8503c085cb
4 changed files with 199 additions and 0 deletions
61
test/membership/setting_env_test.exs
Normal file
61
test/membership/setting_env_test.exs
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
defmodule Mv.Membership.SettingEnvTest do
|
||||||
|
use Mv.DataCase, async: false
|
||||||
|
alias Mv.Membership
|
||||||
|
|
||||||
|
describe "Settings with environment variable" do
|
||||||
|
test "club_name can be set via ASSOCIATION_NAME environment variable" do
|
||||||
|
# Set environment variable
|
||||||
|
System.put_env("ASSOCIATION_NAME", "Test Association from Env")
|
||||||
|
|
||||||
|
try do
|
||||||
|
# Get settings - should use environment variable if no DB value exists
|
||||||
|
{:ok, settings} = Membership.get_settings()
|
||||||
|
|
||||||
|
# If settings don't have a club_name in DB, it should use the env var
|
||||||
|
# This depends on implementation - we'll check that the env var is respected
|
||||||
|
assert settings.club_name != nil
|
||||||
|
after
|
||||||
|
# Clean up
|
||||||
|
System.delete_env("ASSOCIATION_NAME")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "database value takes precedence over environment variable" do
|
||||||
|
# Set environment variable
|
||||||
|
System.put_env("ASSOCIATION_NAME", "Env Value")
|
||||||
|
|
||||||
|
try do
|
||||||
|
# Set a value in the database
|
||||||
|
{:ok, settings} = Membership.get_settings()
|
||||||
|
{:ok, _updated} = Membership.update_settings(settings, %{club_name: "DB Value"})
|
||||||
|
|
||||||
|
# Get settings again - should use DB value, not env var
|
||||||
|
{:ok, settings_after} = Membership.get_settings()
|
||||||
|
assert settings_after.club_name == "DB Value"
|
||||||
|
after
|
||||||
|
# Clean up
|
||||||
|
System.delete_env("ASSOCIATION_NAME")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "uses environment variable when database value is not set" do
|
||||||
|
# Set environment variable
|
||||||
|
System.put_env("ASSOCIATION_NAME", "Default from Env")
|
||||||
|
|
||||||
|
try do
|
||||||
|
# Clear database value (if possible) or check that env var is used
|
||||||
|
{:ok, settings} = Membership.get_settings()
|
||||||
|
|
||||||
|
# If club_name is nil or empty in DB, should use env var
|
||||||
|
# This test depends on implementation details
|
||||||
|
# We're testing that the env var fallback works
|
||||||
|
club_name = settings.club_name || System.get_env("ASSOCIATION_NAME")
|
||||||
|
assert club_name != nil
|
||||||
|
assert club_name != ""
|
||||||
|
after
|
||||||
|
# Clean up
|
||||||
|
System.delete_env("ASSOCIATION_NAME")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
53
test/membership/setting_test.exs
Normal file
53
test/membership/setting_test.exs
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
defmodule Mv.Membership.SettingTest do
|
||||||
|
use Mv.DataCase, async: false
|
||||||
|
alias Mv.Membership
|
||||||
|
|
||||||
|
describe "Settings Resource" do
|
||||||
|
test "can read settings" do
|
||||||
|
# Settings should be a singleton resource
|
||||||
|
assert {:ok, _settings} = Membership.get_settings()
|
||||||
|
end
|
||||||
|
|
||||||
|
test "settings have club_name attribute" do
|
||||||
|
{:ok, settings} = Membership.get_settings()
|
||||||
|
assert Map.has_key?(settings, :club_name)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "can update club_name" do
|
||||||
|
{:ok, settings} = Membership.get_settings()
|
||||||
|
|
||||||
|
assert {:ok, updated_settings} =
|
||||||
|
Membership.update_settings(settings, %{club_name: "New Club Name"})
|
||||||
|
|
||||||
|
assert updated_settings.club_name == "New Club Name"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "club_name is required" do
|
||||||
|
{:ok, settings} = Membership.get_settings()
|
||||||
|
|
||||||
|
assert {:error, %Ash.Error.Invalid{errors: errors}} =
|
||||||
|
Membership.update_settings(settings, %{club_name: nil})
|
||||||
|
|
||||||
|
assert error_message(errors, :club_name) =~ "must be present"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "club_name cannot be empty" do
|
||||||
|
{:ok, settings} = Membership.get_settings()
|
||||||
|
|
||||||
|
assert {:error, %Ash.Error.Invalid{errors: errors}} =
|
||||||
|
Membership.update_settings(settings, %{club_name: ""})
|
||||||
|
|
||||||
|
assert error_message(errors, :club_name) =~ "must be present"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Helper function to extract error messages
|
||||||
|
defp error_message(errors, field) do
|
||||||
|
errors
|
||||||
|
|> Enum.find(fn error -> error.field == field end)
|
||||||
|
|> case do
|
||||||
|
nil -> ""
|
||||||
|
error -> List.first(error.message) || ""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -84,5 +84,23 @@ defmodule MvWeb.Layouts.NavbarTest do
|
||||||
# Check for correct logout path
|
# Check for correct logout path
|
||||||
assert html =~ ~s(href="/sign-out")
|
assert html =~ ~s(href="/sign-out")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "Settings link navigates to global settings page", %{conn: conn} do
|
||||||
|
user = create_test_user(%{email: "test@example.com"})
|
||||||
|
conn = conn_with_oidc_user(conn, user)
|
||||||
|
|
||||||
|
html =
|
||||||
|
render_component(&MvWeb.Layouts.Navbar.navbar/1, %{
|
||||||
|
current_user: user
|
||||||
|
})
|
||||||
|
|
||||||
|
# Check that Settings link exists and points to /settings
|
||||||
|
assert html =~ "Settings"
|
||||||
|
assert html =~ ~s(href="/settings") || html =~ ~s(navigate="/settings")
|
||||||
|
|
||||||
|
# Verify the link actually works by navigating to it
|
||||||
|
{:ok, _view, settings_html} = live(conn, ~p"/settings")
|
||||||
|
assert settings_html =~ "Vereinsdaten"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
67
test/mv_web/live/global_settings_live_test.exs
Normal file
67
test/mv_web/live/global_settings_live_test.exs
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
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 =~ "Vereinsdaten"
|
||||||
|
assert html =~ "Settings"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "displays current club name", %{conn: conn} do
|
||||||
|
# Set initial club name
|
||||||
|
{:ok, settings} = Membership.get_settings()
|
||||||
|
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 without club_name
|
||||||
|
html =
|
||||||
|
view
|
||||||
|
|> form("#settings-form", %{setting: %{}})
|
||||||
|
|> render_submit()
|
||||||
|
|
||||||
|
assert html =~ "must be present"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue