From d5df2338a7a91ec700039a56112acc3f40cd0b33 Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 24 Feb 2026 09:15:41 +0100 Subject: [PATCH] test: export and PDF regression for Fee Type without start_date Add test for CSV export with only first_name and membership_fee_type. Add test for PDF export with same field set (status and content-type). --- priv/gettext/de/LC_MESSAGES/default.po | 2 +- priv/gettext/en/LC_MESSAGES/default.po | 2 +- .../member_export_controller_test.exs | 69 +++++++++++++++++++ 3 files changed, 71 insertions(+), 2 deletions(-) diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index 9825efd..2f4c1b8 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -2917,6 +2917,6 @@ msgstr "Für die Vereinfacht-Integration erforderlich und kann nicht deaktiviert #: lib/mv_web/live/member_live/index.html.heex #: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format, fuzzy +#, elixir-autogen, elixir-format msgid "Fee Type" msgstr "Beitragsart" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index b69f3df..a76c9f6 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -2917,6 +2917,6 @@ msgstr "Required for Vereinfacht integration and cannot be disabled." #: lib/mv_web/live/member_live/index.html.heex #: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format, fuzzy +#, elixir-autogen, elixir-format msgid "Fee Type" msgstr "Fee Type" diff --git a/test/mv_web/controllers/member_export_controller_test.exs b/test/mv_web/controllers/member_export_controller_test.exs index de7b417..cfc89ec 100644 --- a/test/mv_web/controllers/member_export_controller_test.exs +++ b/test/mv_web/controllers/member_export_controller_test.exs @@ -177,6 +177,39 @@ 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)", + %{ + conn: conn, + member1: m1 + } do + payload = %{ + "selected_ids" => [m1.id], + "member_fields" => ["first_name", "membership_fee_type"], + "custom_field_ids" => [], + "query" => nil, + "sort_field" => nil, + "sort_order" => nil + } + + conn = get(conn, "/members") + csrf_token = csrf_token_from_conn(conn) + + conn = + post(conn, "/members/export.csv", %{ + "payload" => Jason.encode!(payload), + "_csrf_token" => csrf_token + }) + + assert conn.status == 200 + body = response(conn, 200) + header = body |> export_lines() |> hd() + + assert header =~ "Fee Type" + assert header =~ "First Name" + assert body =~ "Alice" + end + test "export includes membership_fee_status computed field when requested", %{ conn: conn, member1: m1 @@ -532,4 +565,40 @@ defmodule MvWeb.MemberExportControllerTest do assert membership_idx < active_idx end end + + describe "POST /members/export.pdf" do + test "PDF export includes Fee Type column when requested without membership_fee_start_date", + %{ + conn: conn + } do + m = + Fixtures.member_fixture(%{first_name: "PDF", last_name: "Test", email: "pdf@example.com"}) + + payload = %{ + "selected_ids" => [m.id], + "member_fields" => ["first_name", "membership_fee_type"], + "custom_field_ids" => [], + "query" => nil, + "sort_field" => nil, + "sort_order" => nil + } + + conn = get(conn, "/members") + csrf_token = csrf_token_from_conn(conn) + + conn = + post(conn, "/members/export.pdf", %{ + "payload" => Jason.encode!(payload), + "_csrf_token" => csrf_token + }) + + assert conn.status == 200 + assert get_resp_header(conn, "content-type") |> List.first() =~ "application/pdf" + + body = response(conn, 200) + + # PDF is generated successfully with Fee Type in columns (regression: fee type without start_date) + assert is_binary(body) and byte_size(body) > 0 + end + end end