From 81ce2045021aadff0eb4844794bd776540a23539 Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 3 Mar 2026 17:46:38 +0100 Subject: [PATCH] Fix Credo Readability (strict) - Max line length, implicit try, alias order, zero-arity defs - String sigils, long comments split; redundant blank lines fixed --- .../user/validations/oidc_email_collision.ex | 2 +- lib/mv/membership/member_export/build.ex | 8 +-- lib/mv/membership/members_csv.ex | 8 +-- lib/mv/membership/members_pdf.ex | 8 +-- lib/mv/oidc_role_sync.ex | 8 +-- .../sync_linked_member_after_user_change.ex | 6 +- lib/mv/vereinfacht/vereinfacht.ex | 6 +- lib/mv_web.ex | 2 +- .../controllers/member_export_controller.ex | 12 ++-- lib/mv_web/live/member_live/form.ex | 34 ++++------ lib/mv_web/live/member_live/index.ex | 8 +-- .../show/membership_fees_component.ex | 6 +- lib/mv_web/live/role_live/show.ex | 68 +++++++++---------- lib/mv_web/live/statistics_live.ex | 2 +- lib/mv_web/plugs/check_page_permission.ex | 3 +- .../member_cycle_calculations_test.exs | 4 +- .../member_type_change_integration_test.exs | 4 +- .../changes/validate_same_interval_test.exs | 2 +- test/membership_fees/foreign_key_test.exs | 2 +- .../membership_fee_type_integration_test.exs | 4 +- .../membership_fee_type_test.exs | 2 +- test/mv/helpers/system_actor_test.exs | 4 +- .../custom_field_value_policies_test.exs | 2 +- test/mv/membership/member_policies_test.exs | 2 +- .../membership_fee_cycle_policies_test.exs | 2 +- test/mv/oidc_role_sync_test.exs | 2 +- test/mv/statistics_test.exs | 2 +- test/mv_web/authorization_test.exs | 4 +- .../controllers/auth_controller_test.exs | 3 +- .../member_export_controller_test.exs | 4 +- .../helpers/membership_fee_helpers_test.exs | 2 +- test/mv_web/live/group_live/index_test.exs | 2 +- .../live/group_live/integration_test.exs | 2 +- .../group_live/show_accessibility_test.exs | 2 +- .../live/group_live/show_add_member_test.exs | 2 +- .../show_add_remove_members_test.exs | 2 +- .../group_live/show_authorization_test.exs | 2 +- .../live/group_live/show_integration_test.exs | 2 +- .../group_live/show_member_search_test.exs | 2 +- .../group_live/show_remove_member_test.exs | 2 +- test/mv_web/live/group_live/show_test.exs | 2 +- .../index/membership_fee_status_test.exs | 4 +- .../index_membership_fee_status_test.exs | 2 +- test/mv_web/member_live/index_test.exs | 2 +- .../membership_fee_integration_test.exs | 2 +- .../member_live/show_membership_fees_test.exs | 2 +- .../plugs/check_page_permission_test.exs | 14 ++-- test/mv_web/user_live/index_test.exs | 3 +- 48 files changed, 131 insertions(+), 144 deletions(-) diff --git a/lib/accounts/user/validations/oidc_email_collision.ex b/lib/accounts/user/validations/oidc_email_collision.ex index 08a8911..f92c7e2 100644 --- a/lib/accounts/user/validations/oidc_email_collision.ex +++ b/lib/accounts/user/validations/oidc_email_collision.ex @@ -164,7 +164,7 @@ defmodule Mv.Accounts.User.Validations.OidcEmailCollision do end @impl true - def atomic?(), do: false + def atomic?, do: false @impl true def describe(_opts) do diff --git a/lib/mv/membership/member_export/build.ex b/lib/mv/membership/member_export/build.ex index 9a1c03a..e08a6f4 100644 --- a/lib/mv/membership/member_export/build.ex +++ b/lib/mv/membership/member_export/build.ex @@ -519,11 +519,9 @@ defmodule Mv.Membership.MemberExport.Build do defp key_to_atom(k) when is_atom(k), do: k defp key_to_atom(k) when is_binary(k) do - try do - String.to_existing_atom(k) - rescue - ArgumentError -> k - end + String.to_existing_atom(k) + rescue + ArgumentError -> k end defp get_cfv_by_id(member, id) do diff --git a/lib/mv/membership/members_csv.ex b/lib/mv/membership/members_csv.ex index 3d1fdd8..6331893 100644 --- a/lib/mv/membership/members_csv.ex +++ b/lib/mv/membership/members_csv.ex @@ -74,11 +74,9 @@ defmodule Mv.Membership.MembersCSV do defp key_to_atom(k) when is_atom(k), do: k defp key_to_atom(k) when is_binary(k) do - try do - String.to_existing_atom(k) - rescue - ArgumentError -> k - end + String.to_existing_atom(k) + rescue + ArgumentError -> k end defp get_cfv_by_id(member, id) do diff --git a/lib/mv/membership/members_pdf.ex b/lib/mv/membership/members_pdf.ex index 0d6e469..b2989ca 100644 --- a/lib/mv/membership/members_pdf.ex +++ b/lib/mv/membership/members_pdf.ex @@ -299,11 +299,9 @@ defmodule Mv.Membership.MembersPDF do defp date_column?(_), do: false defp key_to_atom_safe(key) when is_binary(key) do - try do - String.to_existing_atom(key) - rescue - ArgumentError -> key - end + String.to_existing_atom(key) + rescue + ArgumentError -> key end defp key_to_atom_safe(key), do: key diff --git a/lib/mv/oidc_role_sync.ex b/lib/mv/oidc_role_sync.ex index fbec9de..a13748a 100644 --- a/lib/mv/oidc_role_sync.ex +++ b/lib/mv/oidc_role_sync.ex @@ -82,11 +82,9 @@ defmodule Mv.OidcRoleSync do end defp safe_get_atom(map, key) when is_binary(key) do - try do - Map.get(map, String.to_existing_atom(key)) - rescue - ArgumentError -> nil - end + Map.get(map, String.to_existing_atom(key)) + rescue + ArgumentError -> nil end defp safe_get_atom(_map, _key), do: nil diff --git a/lib/mv/vereinfacht/changes/sync_linked_member_after_user_change.ex b/lib/mv/vereinfacht/changes/sync_linked_member_after_user_change.ex index cffb079..4465690 100644 --- a/lib/mv/vereinfacht/changes/sync_linked_member_after_user_change.ex +++ b/lib/mv/vereinfacht/changes/sync_linked_member_after_user_change.ex @@ -10,10 +10,10 @@ defmodule Mv.Vereinfacht.Changes.SyncLinkedMemberAfterUserChange do use Ash.Resource.Change require Logger - alias Mv.Membership.Member - alias Mv.Membership - alias Mv.Helpers.SystemActor alias Mv.Helpers + alias Mv.Helpers.SystemActor + alias Mv.Membership + alias Mv.Membership.Member @impl true def change(changeset, _opts, _context) do diff --git a/lib/mv/vereinfacht/vereinfacht.ex b/lib/mv/vereinfacht/vereinfacht.ex index 6520b64..83492b7 100644 --- a/lib/mv/vereinfacht/vereinfacht.ex +++ b/lib/mv/vereinfacht/vereinfacht.ex @@ -9,10 +9,10 @@ defmodule Mv.Vereinfacht do """ require Ash.Query import Ash.Expr - alias Mv.Vereinfacht.Client - alias Mv.Membership.Member - alias Mv.Helpers.SystemActor alias Mv.Helpers + alias Mv.Helpers.SystemActor + alias Mv.Membership.Member + alias Mv.Vereinfacht.Client @doc """ Tests the connection to the Vereinfacht API using the current configuration. diff --git a/lib/mv_web.ex b/lib/mv_web.ex index 2b1ade6..f827e2f 100644 --- a/lib/mv_web.ex +++ b/lib/mv_web.ex @@ -94,8 +94,8 @@ defmodule MvWeb do import MvWeb.Authorization, only: [can?: 3, can_access_page?: 2] # Common modules used in templates - alias Phoenix.LiveView.JS alias MvWeb.Layouts + alias Phoenix.LiveView.JS # Routes generation with the ~p sigil unquote(verified_routes()) diff --git a/lib/mv_web/controllers/member_export_controller.ex b/lib/mv_web/controllers/member_export_controller.ex index 715f86a..a1730ee 100644 --- a/lib/mv_web/controllers/member_export_controller.ex +++ b/lib/mv_web/controllers/member_export_controller.ex @@ -14,8 +14,8 @@ defmodule MvWeb.MemberExportController do alias Mv.Membership.CustomField alias Mv.Membership.Member alias Mv.Membership.MembersCSV - alias MvWeb.Translations.MemberFields alias MvWeb.MemberLive.Index.MembershipFeeStatus + alias MvWeb.Translations.MemberFields use Gettext, backend: MvWeb.Gettext @member_fields_allowlist (Mv.Constants.member_fields() |> Enum.map(&Atom.to_string/1)) ++ @@ -105,12 +105,10 @@ defmodule MvWeb.MemberExportController do end defp atom_exists?(name) do - try do - _ = String.to_existing_atom(name) - true - rescue - ArgumentError -> false - end + _ = String.to_existing_atom(name) + true + rescue + ArgumentError -> false end defp extract_list(params, key) do diff --git a/lib/mv_web/live/member_live/form.ex b/lib/mv_web/live/member_live/form.ex index c83837f..88d0444 100644 --- a/lib/mv_web/live/member_live/form.ex +++ b/lib/mv_web/live/member_live/form.ex @@ -446,23 +446,21 @@ defmodule MvWeb.MemberLive.Form do end def handle_event("save", %{"member" => member_params}, socket) do - try do - actor = current_actor(socket) + actor = current_actor(socket) - case submit_form(socket.assigns.form, member_params, actor) do - {:ok, member} -> - handle_save_success(socket, member) + case submit_form(socket.assigns.form, member_params, actor) do + {:ok, member} -> + handle_save_success(socket, member) - {:error, form} -> - handle_save_error(socket, form) - end - rescue - _e in [Ash.Error.Forbidden, Ash.Error.Forbidden.Policy] -> - handle_save_forbidden(socket) - - e -> - handle_save_exception(socket, e) + {:error, form} -> + handle_save_error(socket, form) end + rescue + _e in [Ash.Error.Forbidden, Ash.Error.Forbidden.Policy] -> + handle_save_forbidden(socket) + + e -> + handle_save_exception(socket, e) end @impl true @@ -690,11 +688,9 @@ defmodule MvWeb.MemberLive.Form do # Extracts message from struct error using Ash.ErrorKind protocol defp extract_struct_error_message(error) do - try do - Ash.ErrorKind.message(error) - rescue - Protocol.UndefinedError -> gettext("Failed to save member. Please try again.") - end + Ash.ErrorKind.message(error) + rescue + Protocol.UndefinedError -> gettext("Failed to save member. Please try again.") end # Checks if form has any errors diff --git a/lib/mv_web/live/member_live/index.ex b/lib/mv_web/live/member_live/index.ex index da1b6cf..c83a204 100644 --- a/lib/mv_web/live/member_live/index.ex +++ b/lib/mv_web/live/member_live/index.ex @@ -708,11 +708,9 @@ defmodule MvWeb.MemberLive.Index do end defp to_sort_id(field) when is_binary(field) do - try do - String.to_existing_atom("sort_#{field}") - rescue - ArgumentError -> :"sort_#{field}" - end + String.to_existing_atom("sort_#{field}") + rescue + ArgumentError -> :"sort_#{field}" end defp to_sort_id(field) when is_atom(field), do: :"sort_#{field}" diff --git a/lib/mv_web/live/member_live/show/membership_fees_component.ex b/lib/mv_web/live/member_live/show/membership_fees_component.ex index be72392..185de88 100644 --- a/lib/mv_web/live/member_live/show/membership_fees_component.ex +++ b/lib/mv_web/live/member_live/show/membership_fees_component.ex @@ -18,10 +18,10 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do alias Mv.Membership alias Mv.MembershipFees - alias Mv.MembershipFees.MembershipFeeType - alias Mv.MembershipFees.MembershipFeeCycle - alias Mv.MembershipFees.CycleGenerator alias Mv.MembershipFees.CalendarCycles + alias Mv.MembershipFees.CycleGenerator + alias Mv.MembershipFees.MembershipFeeCycle + alias Mv.MembershipFees.MembershipFeeType alias MvWeb.Helpers.MembershipFeeHelpers @impl true diff --git a/lib/mv_web/live/role_live/show.ex b/lib/mv_web/live/role_live/show.ex index ae390c3..a5402c4 100644 --- a/lib/mv_web/live/role_live/show.ex +++ b/lib/mv_web/live/role_live/show.ex @@ -21,49 +21,47 @@ defmodule MvWeb.RoleLive.Show do @impl true def mount(%{"id" => id}, _session, socket) do - try do - case Ash.get( - Mv.Authorization.Role, - id, - domain: Mv.Authorization, - actor: socket.assigns[:current_user] - ) do - {:ok, role} -> - user_count = load_user_count(role, socket.assigns[:current_user]) + case Ash.get( + Mv.Authorization.Role, + id, + domain: Mv.Authorization, + actor: socket.assigns[:current_user] + ) do + {:ok, role} -> + user_count = load_user_count(role, socket.assigns[:current_user]) - {:ok, - socket - |> assign(:page_title, gettext("Show Role")) - |> assign(:role, role) - |> assign(:user_count, user_count) - |> assign(:show_delete_modal, false)} + {:ok, + socket + |> assign(:page_title, gettext("Show Role")) + |> assign(:role, role) + |> assign(:user_count, user_count) + |> assign(:show_delete_modal, false)} - {:error, %Ash.Error.Invalid{errors: [%Ash.Error.Query.NotFound{} | _]}} -> + {:error, %Ash.Error.Invalid{errors: [%Ash.Error.Query.NotFound{} | _]}} -> + {:ok, + socket + |> put_flash(:error, gettext("Role not found.")) + |> redirect(to: ~p"/admin/roles")} + + {:error, error} -> + {:ok, + socket + |> put_flash(:error, format_error(error)) + |> redirect(to: ~p"/admin/roles")} + end + rescue + e in [Ash.Error.Invalid] -> + # Handle exceptions that Ash.get might throw (e.g., policy violations) + case e do + %Ash.Error.Invalid{errors: [%Ash.Error.Query.NotFound{} | _]} -> {:ok, socket |> put_flash(:error, gettext("Role not found.")) |> redirect(to: ~p"/admin/roles")} - {:error, error} -> - {:ok, - socket - |> put_flash(:error, format_error(error)) - |> redirect(to: ~p"/admin/roles")} + _ -> + reraise e, __STACKTRACE__ end - rescue - e in [Ash.Error.Invalid] -> - # Handle exceptions that Ash.get might throw (e.g., policy violations) - case e do - %Ash.Error.Invalid{errors: [%Ash.Error.Query.NotFound{} | _]} -> - {:ok, - socket - |> put_flash(:error, gettext("Role not found.")) - |> redirect(to: ~p"/admin/roles")} - - _ -> - reraise e, __STACKTRACE__ - end - end end @impl true diff --git a/lib/mv_web/live/statistics_live.ex b/lib/mv_web/live/statistics_live.ex index 63ed0c2..1ac613e 100644 --- a/lib/mv_web/live/statistics_live.ex +++ b/lib/mv_web/live/statistics_live.ex @@ -9,8 +9,8 @@ defmodule MvWeb.StatisticsLive do require Logger import MvWeb.LiveHelpers, only: [current_actor: 1] - alias Mv.Statistics alias Mv.MembershipFees.MembershipFeeType + alias Mv.Statistics alias MvWeb.Helpers.MembershipFeeHelpers @impl true diff --git a/lib/mv_web/plugs/check_page_permission.ex b/lib/mv_web/plugs/check_page_permission.ex index 616d7fc..cbbb76d 100644 --- a/lib/mv_web/plugs/check_page_permission.ex +++ b/lib/mv_web/plugs/check_page_permission.ex @@ -221,7 +221,8 @@ defmodule MvWeb.Plugs.CheckPagePermission do defp path_param_equals(_, _, _, _), do: false - # For own_data: only allow show/edit when :id is the user's linked member. For other permission sets: allow when not reserved. + # For own_data: only allow show/edit when :id is the user's linked member. + # For other permission sets: allow when not reserved. defp members_show_allowed?(pattern, request_path, user) do if permission_set_name_from_user(user) == "own_data" do path_param_equals(pattern, request_path, "id", user_member_id(user)) diff --git a/test/membership/member_cycle_calculations_test.exs b/test/membership/member_cycle_calculations_test.exs index 98cdb7c..9be1272 100644 --- a/test/membership/member_cycle_calculations_test.exs +++ b/test/membership/member_cycle_calculations_test.exs @@ -4,9 +4,9 @@ defmodule Mv.Membership.MemberCycleCalculationsTest do """ use Mv.DataCase, async: true - alias Mv.MembershipFees.MembershipFeeType - alias Mv.MembershipFees.MembershipFeeCycle alias Mv.MembershipFees.CalendarCycles + alias Mv.MembershipFees.MembershipFeeCycle + alias Mv.MembershipFees.MembershipFeeType setup do system_actor = Mv.Helpers.SystemActor.get_system_actor() diff --git a/test/membership/member_type_change_integration_test.exs b/test/membership/member_type_change_integration_test.exs index 6c252d6..35b3137 100644 --- a/test/membership/member_type_change_integration_test.exs +++ b/test/membership/member_type_change_integration_test.exs @@ -4,9 +4,9 @@ defmodule Mv.Membership.MemberTypeChangeIntegrationTest do """ use Mv.DataCase, async: true - alias Mv.MembershipFees.MembershipFeeType - alias Mv.MembershipFees.MembershipFeeCycle alias Mv.MembershipFees.CalendarCycles + alias Mv.MembershipFees.MembershipFeeCycle + alias Mv.MembershipFees.MembershipFeeType require Ash.Query diff --git a/test/membership_fees/changes/validate_same_interval_test.exs b/test/membership_fees/changes/validate_same_interval_test.exs index 2310537..31c2847 100644 --- a/test/membership_fees/changes/validate_same_interval_test.exs +++ b/test/membership_fees/changes/validate_same_interval_test.exs @@ -4,8 +4,8 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do """ use Mv.DataCase, async: true - alias Mv.MembershipFees.MembershipFeeType alias Mv.MembershipFees.Changes.ValidateSameInterval + alias Mv.MembershipFees.MembershipFeeType setup do system_actor = Mv.Helpers.SystemActor.get_system_actor() diff --git a/test/membership_fees/foreign_key_test.exs b/test/membership_fees/foreign_key_test.exs index 54a7cc5..6118d18 100644 --- a/test/membership_fees/foreign_key_test.exs +++ b/test/membership_fees/foreign_key_test.exs @@ -4,9 +4,9 @@ defmodule Mv.MembershipFees.ForeignKeyTest do """ use Mv.DataCase, async: true + alias Mv.Membership.Member alias Mv.MembershipFees.MembershipFeeCycle alias Mv.MembershipFees.MembershipFeeType - alias Mv.Membership.Member setup do system_actor = Mv.Helpers.SystemActor.get_system_actor() diff --git a/test/membership_fees/membership_fee_type_integration_test.exs b/test/membership_fees/membership_fee_type_integration_test.exs index 88f620d..f834094 100644 --- a/test/membership_fees/membership_fee_type_integration_test.exs +++ b/test/membership_fees/membership_fee_type_integration_test.exs @@ -4,9 +4,9 @@ defmodule Mv.MembershipFees.MembershipFeeTypeIntegrationTest do """ use Mv.DataCase, async: false - alias Mv.MembershipFees.MembershipFeeType - alias Mv.MembershipFees.MembershipFeeCycle alias Mv.Membership.Member + alias Mv.MembershipFees.MembershipFeeCycle + alias Mv.MembershipFees.MembershipFeeType require Ash.Query diff --git a/test/membership_fees/membership_fee_type_test.exs b/test/membership_fees/membership_fee_type_test.exs index 21f3100..e80b196 100644 --- a/test/membership_fees/membership_fee_type_test.exs +++ b/test/membership_fees/membership_fee_type_test.exs @@ -169,8 +169,8 @@ defmodule Mv.MembershipFees.MembershipFeeTypeTest do end test "cannot delete when cycles exist", %{actor: actor, fee_type: fee_type} do - alias Mv.MembershipFees.MembershipFeeCycle alias Mv.Membership.Member + alias Mv.MembershipFees.MembershipFeeCycle # Create a member with this fee type {:ok, member} = diff --git a/test/mv/helpers/system_actor_test.exs b/test/mv/helpers/system_actor_test.exs index add2ad5..96d38d8 100644 --- a/test/mv/helpers/system_actor_test.exs +++ b/test/mv/helpers/system_actor_test.exs @@ -4,9 +4,9 @@ defmodule Mv.Helpers.SystemActorTest do """ use Mv.DataCase, async: false - alias Mv.Helpers.SystemActor - alias Mv.Authorization alias Mv.Accounts + alias Mv.Authorization + alias Mv.Helpers.SystemActor require Ash.Query diff --git a/test/mv/membership/custom_field_value_policies_test.exs b/test/mv/membership/custom_field_value_policies_test.exs index 64d6ff2..a7b5f2b 100644 --- a/test/mv/membership/custom_field_value_policies_test.exs +++ b/test/mv/membership/custom_field_value_policies_test.exs @@ -9,8 +9,8 @@ defmodule Mv.Membership.CustomFieldValuePoliciesTest do # async: false because we need database commits to be visible across queries use Mv.DataCase, async: false - alias Mv.Membership.{CustomField, CustomFieldValue} alias Mv.Accounts + alias Mv.Membership.{CustomField, CustomFieldValue} require Ash.Query diff --git a/test/mv/membership/member_policies_test.exs b/test/mv/membership/member_policies_test.exs index f2d3084..d45bdd0 100644 --- a/test/mv/membership/member_policies_test.exs +++ b/test/mv/membership/member_policies_test.exs @@ -10,8 +10,8 @@ defmodule Mv.Membership.MemberPoliciesTest do # in the same test (especially for unlinked members) use Mv.DataCase, async: false - alias Mv.Membership alias Mv.Accounts + alias Mv.Membership require Ash.Query diff --git a/test/mv/membership_fees/membership_fee_cycle_policies_test.exs b/test/mv/membership_fees/membership_fee_cycle_policies_test.exs index 4d0badb..cf7e889 100644 --- a/test/mv/membership_fees/membership_fee_cycle_policies_test.exs +++ b/test/mv/membership_fees/membership_fee_cycle_policies_test.exs @@ -8,8 +8,8 @@ defmodule Mv.MembershipFees.MembershipFeeCyclePoliciesTest do """ use Mv.DataCase, async: false - alias Mv.MembershipFees alias Mv.Membership + alias Mv.MembershipFees setup do system_actor = Mv.Helpers.SystemActor.get_system_actor() diff --git a/test/mv/oidc_role_sync_test.exs b/test/mv/oidc_role_sync_test.exs index a4729ec..1f6a129 100644 --- a/test/mv/oidc_role_sync_test.exs +++ b/test/mv/oidc_role_sync_test.exs @@ -92,7 +92,7 @@ defmodule Mv.OidcRoleSyncTest do # Minimal JWT: header.payload.signature with "groups" in payload (Rauthy puts groups in access_token) payload = Jason.encode!(%{"groups" => ["mila-admin"], "sub" => "oidc-123"}) payload_b64 = Base.url_encode64(payload, padding: false) - header_b64 = Base.url_encode64("{\"alg\":\"HS256\",\"typ\":\"JWT\"}", padding: false) + header_b64 = Base.url_encode64(~s({"alg":"HS256","typ":"JWT"}), padding: false) sig_b64 = Base.url_encode64("sig", padding: false) access_token = "#{header_b64}.#{payload_b64}.#{sig_b64}" oauth_tokens = %{"access_token" => access_token} diff --git a/test/mv/statistics_test.exs b/test/mv/statistics_test.exs index d4b4e05..6b72ffb 100644 --- a/test/mv/statistics_test.exs +++ b/test/mv/statistics_test.exs @@ -8,10 +8,10 @@ defmodule Mv.StatisticsTest do import Ash.Expr alias Mv.Membership.Member - alias Mv.Statistics alias Mv.MembershipFees alias Mv.MembershipFees.MembershipFeeCycle alias Mv.MembershipFees.MembershipFeeType + alias Mv.Statistics setup do actor = Mv.Helpers.SystemActor.get_system_actor() diff --git a/test/mv_web/authorization_test.exs b/test/mv_web/authorization_test.exs index 7bb0b2a..d15b523 100644 --- a/test/mv_web/authorization_test.exs +++ b/test/mv_web/authorization_test.exs @@ -4,9 +4,9 @@ defmodule MvWeb.AuthorizationTest do """ use ExUnit.Case, async: true - alias MvWeb.Authorization - alias Mv.Membership.Member alias Mv.Accounts.User + alias Mv.Membership.Member + alias MvWeb.Authorization describe "can?/3 with resource atom" do test "returns true when user has permission for resource+action" do diff --git a/test/mv_web/controllers/auth_controller_test.exs b/test/mv_web/controllers/auth_controller_test.exs index f31327c..0841e68 100644 --- a/test/mv_web/controllers/auth_controller_test.exs +++ b/test/mv_web/controllers/auth_controller_test.exs @@ -199,7 +199,8 @@ defmodule MvWeb.AuthControllerTest do assert to =~ "/auth/user/password/sign_in_with_token" - # After login, user is redirected to /auth/user/password/sign_in_with_token. Session handling for protected routes should be tested in integration or E2E tests. + # After login, user is redirected to /auth/user/password/sign_in_with_token. + # Session handling for protected routes should be tested in integration or E2E tests. end # Edge cases diff --git a/test/mv_web/controllers/member_export_controller_test.exs b/test/mv_web/controllers/member_export_controller_test.exs index cfc89ec..4192a27 100644 --- a/test/mv_web/controllers/member_export_controller_test.exs +++ b/test/mv_web/controllers/member_export_controller_test.exs @@ -177,8 +177,8 @@ defmodule MvWeb.MemberExportControllerTest do assert body =~ "Alice" end - # Regression: when membership_fee_start_date is not in member_fields, Fee Type must still be exported (append fallback) - test "export includes Fee Type when only first_name and membership_fee_type are requested (no start_date)", + # Regression: when membership_fee_start_date is not in member_fields, Fee Type must still be exported. + test "export includes Fee Type when first_name and membership_fee_type only (no start_date)", %{ conn: conn, member1: m1 diff --git a/test/mv_web/helpers/membership_fee_helpers_test.exs b/test/mv_web/helpers/membership_fee_helpers_test.exs index 9cba825..773bd26 100644 --- a/test/mv_web/helpers/membership_fee_helpers_test.exs +++ b/test/mv_web/helpers/membership_fee_helpers_test.exs @@ -6,8 +6,8 @@ defmodule MvWeb.Helpers.MembershipFeeHelpersTest do require Ash.Query - alias MvWeb.Helpers.MembershipFeeHelpers alias Mv.MembershipFees.CalendarCycles + alias MvWeb.Helpers.MembershipFeeHelpers setup do system_actor = Mv.Helpers.SystemActor.get_system_actor() diff --git a/test/mv_web/live/group_live/index_test.exs b/test/mv_web/live/group_live/index_test.exs index 751b5c6..59e32a4 100644 --- a/test/mv_web/live/group_live/index_test.exs +++ b/test/mv_web/live/group_live/index_test.exs @@ -13,8 +13,8 @@ defmodule MvWeb.GroupLive.IndexTest do import Phoenix.LiveViewTest use Gettext, backend: MvWeb.Gettext - alias Mv.Membership alias Mv.Fixtures + alias Mv.Membership describe "mount and display" do test "page renders successfully for admin user", %{conn: conn} do diff --git a/test/mv_web/live/group_live/integration_test.exs b/test/mv_web/live/group_live/integration_test.exs index 96e9031..937ed1e 100644 --- a/test/mv_web/live/group_live/integration_test.exs +++ b/test/mv_web/live/group_live/integration_test.exs @@ -14,8 +14,8 @@ defmodule MvWeb.GroupLive.IntegrationTest do import Ash.Expr use Gettext, backend: MvWeb.Gettext - alias Mv.Membership alias Mv.Fixtures + alias Mv.Membership describe "complete workflow" do test "create → view via slug → edit → view via slug (slug unchanged)", %{ diff --git a/test/mv_web/live/group_live/show_accessibility_test.exs b/test/mv_web/live/group_live/show_accessibility_test.exs index fc63551..14866ef 100644 --- a/test/mv_web/live/group_live/show_accessibility_test.exs +++ b/test/mv_web/live/group_live/show_accessibility_test.exs @@ -8,8 +8,8 @@ defmodule MvWeb.GroupLive.ShowAccessibilityTest do import Phoenix.LiveViewTest use Gettext, backend: MvWeb.Gettext - alias Mv.Membership alias Mv.Fixtures + alias Mv.Membership describe "ARIA labels and roles" do test "search input has proper ARIA attributes", %{conn: conn} do diff --git a/test/mv_web/live/group_live/show_add_member_test.exs b/test/mv_web/live/group_live/show_add_member_test.exs index 0e1af32..761dc83 100644 --- a/test/mv_web/live/group_live/show_add_member_test.exs +++ b/test/mv_web/live/group_live/show_add_member_test.exs @@ -9,8 +9,8 @@ defmodule MvWeb.GroupLive.ShowAddMemberTest do import MvWeb.GroupLiveHelpers use Gettext, backend: MvWeb.Gettext - alias Mv.Membership alias Mv.Fixtures + alias Mv.Membership describe "successful add member" do test "member is added to group after selection and clicking Add", %{conn: conn} do diff --git a/test/mv_web/live/group_live/show_add_remove_members_test.exs b/test/mv_web/live/group_live/show_add_remove_members_test.exs index 047205d..ede25fd 100644 --- a/test/mv_web/live/group_live/show_add_remove_members_test.exs +++ b/test/mv_web/live/group_live/show_add_remove_members_test.exs @@ -8,8 +8,8 @@ defmodule MvWeb.GroupLive.ShowAddRemoveMembersTest do import Phoenix.LiveViewTest use Gettext, backend: MvWeb.Gettext - alias Mv.Membership alias Mv.Fixtures + alias Mv.Membership describe "Add Member button visibility" do @tag role: :read_only diff --git a/test/mv_web/live/group_live/show_authorization_test.exs b/test/mv_web/live/group_live/show_authorization_test.exs index 4bc2a49..31f90a9 100644 --- a/test/mv_web/live/group_live/show_authorization_test.exs +++ b/test/mv_web/live/group_live/show_authorization_test.exs @@ -8,8 +8,8 @@ defmodule MvWeb.GroupLive.ShowAuthorizationTest do import Phoenix.LiveViewTest use Gettext, backend: MvWeb.Gettext - alias Mv.Membership alias Mv.Fixtures + alias Mv.Membership describe "server-side authorization" do test "add member event handler checks :update permission", %{conn: conn} do diff --git a/test/mv_web/live/group_live/show_integration_test.exs b/test/mv_web/live/group_live/show_integration_test.exs index 13f8e5d..407ed1e 100644 --- a/test/mv_web/live/group_live/show_integration_test.exs +++ b/test/mv_web/live/group_live/show_integration_test.exs @@ -8,8 +8,8 @@ defmodule MvWeb.GroupLive.ShowIntegrationTest do import Phoenix.LiveViewTest use Gettext, backend: MvWeb.Gettext - alias Mv.Membership alias Mv.Fixtures + alias Mv.Membership describe "data consistency" do test "member appears in group after add (verified in database)", %{conn: conn} do diff --git a/test/mv_web/live/group_live/show_member_search_test.exs b/test/mv_web/live/group_live/show_member_search_test.exs index ed8a55d..8a3d191 100644 --- a/test/mv_web/live/group_live/show_member_search_test.exs +++ b/test/mv_web/live/group_live/show_member_search_test.exs @@ -8,8 +8,8 @@ defmodule MvWeb.GroupLive.ShowMemberSearchTest do import Phoenix.LiveViewTest use Gettext, backend: MvWeb.Gettext - alias Mv.Membership alias Mv.Fixtures + alias Mv.Membership # Helper to setup authenticated connection for admin defp setup_admin_conn(conn) do diff --git a/test/mv_web/live/group_live/show_remove_member_test.exs b/test/mv_web/live/group_live/show_remove_member_test.exs index 2b47941..1dfd290 100644 --- a/test/mv_web/live/group_live/show_remove_member_test.exs +++ b/test/mv_web/live/group_live/show_remove_member_test.exs @@ -8,8 +8,8 @@ defmodule MvWeb.GroupLive.ShowRemoveMemberTest do import Phoenix.LiveViewTest use Gettext, backend: MvWeb.Gettext - alias Mv.Membership alias Mv.Fixtures + alias Mv.Membership describe "successful remove member" do test "member is removed from group after clicking Remove", %{conn: conn} do diff --git a/test/mv_web/live/group_live/show_test.exs b/test/mv_web/live/group_live/show_test.exs index 07a0c98..1f0f1c2 100644 --- a/test/mv_web/live/group_live/show_test.exs +++ b/test/mv_web/live/group_live/show_test.exs @@ -15,8 +15,8 @@ defmodule MvWeb.GroupLive.ShowTest do require Ash.Query use Gettext, backend: MvWeb.Gettext - alias Mv.Membership alias Mv.Fixtures + alias Mv.Membership describe "mount and display" do test "page renders successfully", %{conn: conn} do diff --git a/test/mv_web/member_live/index/membership_fee_status_test.exs b/test/mv_web/member_live/index/membership_fee_status_test.exs index aa729ef..5d96e68 100644 --- a/test/mv_web/member_live/index/membership_fee_status_test.exs +++ b/test/mv_web/member_live/index/membership_fee_status_test.exs @@ -4,10 +4,10 @@ defmodule MvWeb.MemberLive.Index.MembershipFeeStatusTest do """ use Mv.DataCase, async: false - alias MvWeb.MemberLive.Index.MembershipFeeStatus alias Mv.Membership.Member - alias Mv.MembershipFees.MembershipFeeType alias Mv.MembershipFees.MembershipFeeCycle + alias Mv.MembershipFees.MembershipFeeType + alias MvWeb.MemberLive.Index.MembershipFeeStatus require Ash.Query diff --git a/test/mv_web/member_live/index_membership_fee_status_test.exs b/test/mv_web/member_live/index_membership_fee_status_test.exs index add2fba..ce6bee8 100644 --- a/test/mv_web/member_live/index_membership_fee_status_test.exs +++ b/test/mv_web/member_live/index_membership_fee_status_test.exs @@ -6,8 +6,8 @@ defmodule MvWeb.MemberLive.IndexMembershipFeeStatusTest do import Phoenix.LiveViewTest - alias Mv.MembershipFees.MembershipFeeType alias Mv.MembershipFees.MembershipFeeCycle + alias Mv.MembershipFees.MembershipFeeType require Ash.Query diff --git a/test/mv_web/member_live/index_test.exs b/test/mv_web/member_live/index_test.exs index ec35f4d..7642067 100644 --- a/test/mv_web/member_live/index_test.exs +++ b/test/mv_web/member_live/index_test.exs @@ -3,8 +3,8 @@ defmodule MvWeb.MemberLive.IndexTest do import Phoenix.LiveViewTest require Ash.Query - alias Mv.MembershipFees.MembershipFeeType alias Mv.MembershipFees.MembershipFeeCycle + alias Mv.MembershipFees.MembershipFeeType # Helper to create a membership fee type (shared across all tests) defp create_fee_type(attrs, actor) do diff --git a/test/mv_web/member_live/membership_fee_integration_test.exs b/test/mv_web/member_live/membership_fee_integration_test.exs index ca9d658..ac60220 100644 --- a/test/mv_web/member_live/membership_fee_integration_test.exs +++ b/test/mv_web/member_live/membership_fee_integration_test.exs @@ -6,8 +6,8 @@ defmodule MvWeb.MemberLive.MembershipFeeIntegrationTest do import Phoenix.LiveViewTest - alias Mv.MembershipFees.MembershipFeeType alias Mv.MembershipFees.MembershipFeeCycle + alias Mv.MembershipFees.MembershipFeeType require Ash.Query diff --git a/test/mv_web/member_live/show_membership_fees_test.exs b/test/mv_web/member_live/show_membership_fees_test.exs index 57abfd1..2abb0cb 100644 --- a/test/mv_web/member_live/show_membership_fees_test.exs +++ b/test/mv_web/member_live/show_membership_fees_test.exs @@ -6,8 +6,8 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do import Phoenix.LiveViewTest - alias Mv.MembershipFees.MembershipFeeType alias Mv.MembershipFees.MembershipFeeCycle + alias Mv.MembershipFees.MembershipFeeType require Ash.Query diff --git a/test/mv_web/plugs/check_page_permission_test.exs b/test/mv_web/plugs/check_page_permission_test.exs index 6dd8022..1b3f827 100644 --- a/test/mv_web/plugs/check_page_permission_test.exs +++ b/test/mv_web/plugs/check_page_permission_test.exs @@ -4,8 +4,8 @@ defmodule MvWeb.Plugs.CheckPagePermissionTest do """ use MvWeb.ConnCase, async: true - alias MvWeb.Plugs.CheckPagePermission alias Mv.Fixtures + alias MvWeb.Plugs.CheckPagePermission defp conn_with_user(path, user) do build_conn(:get, path) @@ -46,21 +46,21 @@ defmodule MvWeb.Plugs.CheckPagePermissionTest do end describe "dynamic routes" do - test "user with \"/members/:id\" permission can access \"/members/123\"" do + test ~s(user with "/members/:id" permission can access "/members/123") do user = Fixtures.user_with_role_fixture("read_only") conn = conn_with_user("/members/123", user) |> CheckPagePermission.call([]) refute conn.halted end - test "user with \"/members/:id/edit\" permission can access \"/members/456/edit\"" do + test ~s(user with "/members/:id/edit" permission can access "/members/456/edit") do user = Fixtures.user_with_role_fixture("normal_user") conn = conn_with_user("/members/456/edit", user) |> CheckPagePermission.call([]) refute conn.halted end - test "user with only \"/members/:id\" cannot access \"/members/123/edit\"" do + test ~s(user with only "/members/:id" cannot access "/members/123/edit") do user = Fixtures.user_with_role_fixture("read_only") conn = conn_with_user("/members/123/edit", user) |> CheckPagePermission.call([]) @@ -456,7 +456,8 @@ defmodule MvWeb.Plugs.CheckPagePermissionTest do assert conn.status == 200 end - # Full-router test: session may not preserve member_id; plug logic covered by unit test "own_data user with linked member can access /members/:id/edit (plug direct call)" + # Full-router test: session may not preserve member_id; plug logic covered by unit test + # "own_data user with linked member can access /members/:id/edit (plug direct call)". @tag role: :member @tag :skip test "GET /members/:id/edit (linked member edit) returns 200 when user has linked member", %{ @@ -512,7 +513,8 @@ defmodule MvWeb.Plugs.CheckPagePermissionTest do assert conn.status == 200 end - # Skipped: MemberLive.Show requires membership fee cycle data; plug allows access (page loads then LiveView may error). + # Skipped: MemberLive.Show requires membership fee cycle data; plug allows access + # (page loads then LiveView may error). @tag role: :member @tag :skip test "GET /members/:id for linked member returns 200", %{conn: conn, current_user: user} do diff --git a/test/mv_web/user_live/index_test.exs b/test/mv_web/user_live/index_test.exs index c0be795..c75196e 100644 --- a/test/mv_web/user_live/index_test.exs +++ b/test/mv_web/user_live/index_test.exs @@ -116,7 +116,8 @@ defmodule MvWeb.UserLive.IndexTest do end describe "delete functionality" do - # Delete is only on user show page (Danger zone), not on index (per CODE_GUIDELINES: at most one UI smoke test for delete) + # Delete is only on user show page (Danger zone), not on index + # (per CODE_GUIDELINES: at most one UI smoke test for delete). test "can delete a user from show page", %{conn: conn} do user = create_test_user(%{email: "delete-me@example.com"}) conn = conn_with_oidc_user(conn)