refactor: implement proper notification handling via after_action hooks

Refactor notification handling according to Ash best practices
This commit is contained in:
Moritz 2025-12-15 15:56:32 +01:00
parent f7c33bfc7d
commit 4997493139
Signed by: moritz
GPG key ID: 1020A035E5DD0824
5 changed files with 106 additions and 164 deletions

View file

@ -78,7 +78,7 @@ defmodule Mv.MembershipFees.CycleGeneratorTest do
# Explicitly generate cycles with fixed "today" date to avoid date dependency
today = ~D[2024-06-15]
{:ok, _} = CycleGenerator.generate_cycles_for_member(member.id, today: today)
{:ok, _, _} = CycleGenerator.generate_cycles_for_member(member.id, today: today)
# Verify cycles were generated
all_cycles = get_member_cycles(member.id)
@ -122,7 +122,7 @@ defmodule Mv.MembershipFees.CycleGeneratorTest do
# Generate cycles with specific "today" date
today = ~D[2024-06-15]
{:ok, new_cycles} = CycleGenerator.generate_cycles_for_member(member.id, today: today)
{:ok, new_cycles, _} = CycleGenerator.generate_cycles_for_member(member.id, today: today)
# Should generate only 2023 and 2024 (2022 already exists)
new_cycle_years = Enum.map(new_cycles, & &1.cycle_start.year) |> Enum.sort()
@ -144,7 +144,7 @@ defmodule Mv.MembershipFees.CycleGeneratorTest do
# Generate cycles with specific "today" date far in the future
today = ~D[2025-06-15]
{:ok, cycles} = CycleGenerator.generate_cycles_for_member(member.id, today: today)
{:ok, cycles, _} = CycleGenerator.generate_cycles_for_member(member.id, today: today)
# With exit_date in 2023, should only generate 2022 and 2023 cycles
cycle_years = Enum.map(cycles, & &1.cycle_start.year) |> Enum.sort()
@ -168,10 +168,10 @@ defmodule Mv.MembershipFees.CycleGeneratorTest do
today = ~D[2024-06-15]
# First generation
{:ok, _first_cycles} = CycleGenerator.generate_cycles_for_member(member.id, today: today)
{:ok, _first_cycles, _} = CycleGenerator.generate_cycles_for_member(member.id, today: today)
# Second generation (should be idempotent)
{:ok, second_cycles} = CycleGenerator.generate_cycles_for_member(member.id, today: today)
{:ok, second_cycles, _} = CycleGenerator.generate_cycles_for_member(member.id, today: today)
# Second call should return empty list (no new cycles)
assert second_cycles == []
@ -411,12 +411,12 @@ defmodule Mv.MembershipFees.CycleGeneratorTest do
result2 = Task.await(task2)
# Both should succeed
assert match?({:ok, _}, result1)
assert match?({:ok, _}, result2)
assert match?({:ok, _, _}, result1)
assert match?({:ok, _, _}, result2)
# One should have created cycles, the other should have empty list (idempotent)
{:ok, cycles1} = result1
{:ok, cycles2} = result2
{:ok, cycles1, _} = result1
{:ok, cycles2, _} = result2
# Combined should not have duplicates
all_cycles = cycles1 ++ cycles2