adds tests

This commit is contained in:
carla 2025-11-27 14:56:13 +01:00
parent a132383d81
commit 418b42d35a
4 changed files with 199 additions and 0 deletions

View 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

View 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