From 6987733707f89ede8e8dffd85f76297d366f727b Mon Sep 17 00:00:00 2001 From: Moritz Date: Wed, 4 Mar 2026 17:08:32 +0100 Subject: [PATCH] MembersPDF test: async false and try/after to avoid flakiness Tests that remove the template file run sequentially; restore template in after block so it is restored even when assertion fails. --- test/mv/membership/members_pdf_test.exs | 26 +++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/test/mv/membership/members_pdf_test.exs b/test/mv/membership/members_pdf_test.exs index 0ca259a..78a8ca6 100644 --- a/test/mv/membership/members_pdf_test.exs +++ b/test/mv/membership/members_pdf_test.exs @@ -8,7 +8,9 @@ defmodule Mv.Membership.MembersPDFTest do - Generates valid PDF binary (starts with "%PDF") - Handles errors gracefully """ - use ExUnit.Case, async: true + # async: false so tests that manipulate the template file (e.g. "returns error when template file is missing") + # do not run in parallel and cannot leave the template removed on failure + use ExUnit.Case, async: false alias Mv.Config alias Mv.Membership.MembersPDF @@ -162,25 +164,25 @@ defmodule Mv.Membership.MembersPDFTest do end test "returns error when template file is missing" do - # Temporarily rename template to simulate missing file template_path = Path.join(Application.app_dir(:mv, "priv"), "pdf_templates/members_export.typ") original_content = File.read!(template_path) File.rm(template_path) - export_data = %{ - columns: [%{key: "first_name", kind: :member_field, label: "Vorname"}], - rows: [["Max"]], - meta: %{generated_at: "2024-01-15T14:30:00Z", member_count: 1} - } + try do + export_data = %{ + columns: [%{key: "first_name", kind: :member_field, label: "Vorname"}], + rows: [["Max"]], + meta: %{generated_at: "2024-01-15T14:30:00Z", member_count: 1} + } - result = MembersPDF.render(export_data) + result = MembersPDF.render(export_data) - assert {:error, {:template_not_found, _reason}} = result - - # Restore template - File.write!(template_path, original_content) + assert {:error, {:template_not_found, _reason}} = result + after + File.write!(template_path, original_content) + end end test "handles empty rows gracefully" do