From e9ed61a8fd6633cf911f89f5dcfe82c0b3ae2a70 Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 23 Feb 2026 22:50:01 +0100 Subject: [PATCH] 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. --- test/membership/member_test.exs | 35 +++++++++---------- test/membership/setting_test.exs | 17 +++++++++ .../index_component_test.exs | 26 +++++++++----- .../member_live/form_error_handling_test.exs | 26 +++++++++----- 4 files changed, 68 insertions(+), 36 deletions(-) diff --git a/test/membership/member_test.exs b/test/membership/member_test.exs index ab67a32..676db71 100644 --- a/test/membership/member_test.exs +++ b/test/membership/member_test.exs @@ -99,6 +99,23 @@ defmodule Mv.Membership.MemberTest do 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", %{ actor: actor } do @@ -117,15 +134,6 @@ defmodule Mv.Membership.MemberTest do Membership.create_member(attrs, actor: actor) 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 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) - - # Reset - {:ok, settings} = Membership.get_settings() - - Membership.update_single_member_field(settings, - field: "first_name", - show_in_overview: true, - required: false - ) end end diff --git a/test/membership/setting_test.exs b/test/membership/setting_test.exs index 53ba492..f892161 100644 --- a/test/membership/setting_test.exs +++ b/test/membership/setting_test.exs @@ -3,6 +3,23 @@ defmodule Mv.Membership.SettingTest do alias Mv.Membership 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 # Settings should be a singleton resource assert {:ok, _settings} = Membership.get_settings() diff --git a/test/mv_web/live/member_field_live/index_component_test.exs b/test/mv_web/live/member_field_live/index_component_test.exs index af8799f..6ad1627 100644 --- a/test/mv_web/live/member_field_live/index_component_test.exs +++ b/test/mv_web/live/member_field_live/index_component_test.exs @@ -84,6 +84,23 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do end 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 {: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) assert html =~ "First name" or html =~ "first_name" 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 test "optional fields show Optional when not required in settings", %{conn: conn} do diff --git a/test/mv_web/member_live/form_error_handling_test.exs b/test/mv_web/member_live/form_error_handling_test.exs index 44d7745..d61d3fd 100644 --- a/test/mv_web/member_live/form_error_handling_test.exs +++ b/test/mv_web/member_live/form_error_handling_test.exs @@ -9,6 +9,23 @@ defmodule MvWeb.MemberLive.FormErrorHandlingTest do require Ash.Query 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 test "shows flash message when member creation fails with validation error", %{conn: conn} do 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 html =~ "first_name" or html =~ "First name" or html =~ "can't be blank" or 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 test "shows flash message when member update fails", %{conn: conn} do