Tests: restore settings in on_exit to avoid leftover state

Setup + on_exit save/restore member_field_visibility and
member_field_required in member, setting, index_component and
form_error_handling tests.
This commit is contained in:
Moritz 2026-02-23 22:50:01 +01:00
parent 50c4ab049d
commit e9ed61a8fd
Signed by: moritz
GPG key ID: 1020A035E5DD0824
4 changed files with 68 additions and 36 deletions

View file

@ -99,6 +99,23 @@ defmodule Mv.Membership.MemberTest do
email: "john@example.com" email: "john@example.com"
} }
setup do
{:ok, settings} = Membership.get_settings()
saved_visibility = settings.member_field_visibility || %{}
saved_required = settings.member_field_required || %{}
on_exit(fn ->
{:ok, s} = Membership.get_settings()
Membership.update_settings(s, %{
member_field_visibility: saved_visibility,
member_field_required: saved_required
})
end)
:ok
end
test "when first_name is required in settings, create without first_name fails", %{ test "when first_name is required in settings, create without first_name fails", %{
actor: actor actor: actor
} do } do
@ -117,15 +134,6 @@ defmodule Mv.Membership.MemberTest do
Membership.create_member(attrs, actor: actor) Membership.create_member(attrs, actor: actor)
assert error_message(errors, :first_name) =~ "can't be blank" assert error_message(errors, :first_name) =~ "can't be blank"
# Reset so other tests (e.g. "First name is optional") are not affected
{:ok, settings} = Membership.get_settings()
Membership.update_single_member_field(settings,
field: "first_name",
show_in_overview: true,
required: false
)
end end
test "when first_name is required in settings, create with first_name succeeds", %{ test "when first_name is required in settings, create with first_name succeeds", %{
@ -141,15 +149,6 @@ defmodule Mv.Membership.MemberTest do
) )
assert {:ok, _member} = Membership.create_member(@valid_attrs, actor: actor) assert {:ok, _member} = Membership.create_member(@valid_attrs, actor: actor)
# Reset
{:ok, settings} = Membership.get_settings()
Membership.update_single_member_field(settings,
field: "first_name",
show_in_overview: true,
required: false
)
end end
end end

View file

@ -3,6 +3,23 @@ defmodule Mv.Membership.SettingTest do
alias Mv.Membership alias Mv.Membership
describe "Settings Resource" do describe "Settings Resource" do
setup do
{:ok, settings} = Membership.get_settings()
saved_visibility = settings.member_field_visibility || %{}
saved_required = settings.member_field_required || %{}
on_exit(fn ->
{:ok, s} = Membership.get_settings()
Membership.update_settings(s, %{
member_field_visibility: saved_visibility,
member_field_required: saved_required
})
end)
:ok
end
test "can read settings" do test "can read settings" do
# Settings should be a singleton resource # Settings should be a singleton resource
assert {:ok, _settings} = Membership.get_settings() assert {:ok, _settings} = Membership.get_settings()

View file

@ -84,6 +84,23 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
end end
describe "required fields" do describe "required fields" do
setup do
{:ok, settings} = Membership.get_settings()
saved_visibility = settings.member_field_visibility || %{}
saved_required = settings.member_field_required || %{}
on_exit(fn ->
{:ok, s} = Membership.get_settings()
Membership.update_settings(s, %{
member_field_visibility: saved_visibility,
member_field_required: saved_required
})
end)
:ok
end
test "marks email as required (always from settings)", %{conn: conn} do test "marks email as required (always from settings)", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings") {:ok, _view, html} = live(conn, ~p"/settings")
@ -107,15 +124,6 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
# First name row should show Required (and Optional for others) # First name row should show Required (and Optional for others)
assert html =~ "First name" or html =~ "first_name" assert html =~ "First name" or html =~ "first_name"
assert html =~ "Required" assert html =~ "Required"
# Reset
{:ok, settings} = Membership.get_settings()
Membership.update_single_member_field(settings,
field: "first_name",
show_in_overview: true,
required: false
)
end end
test "optional fields show Optional when not required in settings", %{conn: conn} do test "optional fields show Optional when not required in settings", %{conn: conn} do

View file

@ -9,6 +9,23 @@ defmodule MvWeb.MemberLive.FormErrorHandlingTest do
require Ash.Query require Ash.Query
describe "error handling - flash messages" do describe "error handling - flash messages" do
setup do
{:ok, settings} = Mv.Membership.get_settings()
saved_visibility = settings.member_field_visibility || %{}
saved_required = settings.member_field_required || %{}
on_exit(fn ->
{:ok, s} = Mv.Membership.get_settings()
Mv.Membership.update_settings(s, %{
member_field_visibility: saved_visibility,
member_field_required: saved_required
})
end)
:ok
end
@describetag :ui @describetag :ui
test "shows flash message when member creation fails with validation error", %{conn: conn} do test "shows flash message when member creation fails with validation error", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor() system_actor = Mv.Helpers.SystemActor.get_system_actor()
@ -102,15 +119,6 @@ defmodule MvWeb.MemberLive.FormErrorHandlingTest do
assert html =~ "error" or html =~ "Error" or html =~ "Fehler" or assert html =~ "error" or html =~ "Error" or html =~ "Fehler" or
html =~ "first_name" or html =~ "First name" or html =~ "can't be blank" or html =~ "first_name" or html =~ "First name" or html =~ "can't be blank" or
html =~ "darf nicht leer sein" html =~ "darf nicht leer sein"
# Reset settings
{:ok, settings} = Mv.Membership.get_settings()
Mv.Membership.update_single_member_field(settings,
field: "first_name",
show_in_overview: true,
required: false
)
end end
test "shows flash message when member update fails", %{conn: conn} do test "shows flash message when member update fails", %{conn: conn} do