From b55f3567627aa63ceb8777ebcaac4fd5e218859d Mon Sep 17 00:00:00 2001 From: Moritz Date: Thu, 29 Jan 2026 23:56:15 +0100 Subject: [PATCH] fix: handle nil member in MembershipFeeHelpers - get_last_completed_cycle/2 and get_current_cycle/2 return nil when member is nil. - Avoids FunctionClauseError when MemberLive.Show receives no member (e.g. after redirect or policy filter). Add unit tests for nil member. --- lib/mv_web/helpers/membership_fee_helpers.ex | 8 ++++++-- test/mv_web/helpers/membership_fee_helpers_test.exs | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/mv_web/helpers/membership_fee_helpers.ex b/lib/mv_web/helpers/membership_fee_helpers.ex index 4986ca6..27c99f5 100644 --- a/lib/mv_web/helpers/membership_fee_helpers.ex +++ b/lib/mv_web/helpers/membership_fee_helpers.ex @@ -125,9 +125,11 @@ defmodule MvWeb.Helpers.MembershipFeeHelpers do iex> cycle = MvWeb.Helpers.MembershipFeeHelpers.get_last_completed_cycle(member) # => %MembershipFeeCycle{cycle_start: ~D[2024-01-01], ...} """ - @spec get_last_completed_cycle(Member.t(), Date.t() | nil) :: MembershipFeeCycle.t() | nil + @spec get_last_completed_cycle(Member.t() | nil, Date.t() | nil) :: MembershipFeeCycle.t() | nil def get_last_completed_cycle(member, today \\ nil) + def get_last_completed_cycle(nil, _today), do: nil + def get_last_completed_cycle(%Member{} = member, today) do today = today || Date.utc_today() @@ -174,9 +176,11 @@ defmodule MvWeb.Helpers.MembershipFeeHelpers do iex> cycle = MvWeb.Helpers.MembershipFeeHelpers.get_current_cycle(member) # => %MembershipFeeCycle{cycle_start: ~D[2024-04-01], ...} """ - @spec get_current_cycle(Member.t(), Date.t() | nil) :: MembershipFeeCycle.t() | nil + @spec get_current_cycle(Member.t() | nil, Date.t() | nil) :: MembershipFeeCycle.t() | nil def get_current_cycle(member, today \\ nil) + def get_current_cycle(nil, _today), do: nil + def get_current_cycle(%Member{} = member, today) do today = today || Date.utc_today() diff --git a/test/mv_web/helpers/membership_fee_helpers_test.exs b/test/mv_web/helpers/membership_fee_helpers_test.exs index 7f9afaf..530143f 100644 --- a/test/mv_web/helpers/membership_fee_helpers_test.exs +++ b/test/mv_web/helpers/membership_fee_helpers_test.exs @@ -68,6 +68,11 @@ defmodule MvWeb.Helpers.MembershipFeeHelpersTest do end describe "get_last_completed_cycle/2" do + test "returns nil when member is nil" do + assert MembershipFeeHelpers.get_last_completed_cycle(nil) == nil + assert MembershipFeeHelpers.get_last_completed_cycle(nil, Date.utc_today()) == nil + end + test "returns last completed cycle for member", %{actor: actor} do # Create test data fee_type = @@ -184,6 +189,11 @@ defmodule MvWeb.Helpers.MembershipFeeHelpersTest do end describe "get_current_cycle/2" do + test "returns nil when member is nil" do + assert MembershipFeeHelpers.get_current_cycle(nil) == nil + assert MembershipFeeHelpers.get_current_cycle(nil, Date.utc_today()) == nil + end + test "returns current cycle for member", %{actor: actor} do fee_type = Mv.MembershipFees.MembershipFeeType