test: fee type column visibility, CSV export, export controller

FieldVisibility pseudo fields and visible selection; MembersCSV fee type
column; export accepts membership_fee_type and returns Fee Type column.
This commit is contained in:
Moritz 2026-02-23 23:53:54 +01:00
parent f3b213ecec
commit 8db24405fa
Signed by: moritz
GPG key ID: 1020A035E5DD0824
3 changed files with 90 additions and 0 deletions

View file

@ -199,6 +199,43 @@ defmodule Mv.Membership.MembersCSVTest do
assert csv =~ "M,m@m.com,Paid"
end
test "membership_fee_type column exports fee type name" do
columns = [
%{header: "First Name", kind: :member_field, key: "first_name"},
%{header: "Email", kind: :member_field, key: "email"},
%{header: "Fee Type", kind: :membership_fee_type, key: :membership_fee_type}
]
member = %{
first_name: "M",
email: "m@m.com",
membership_fee_type: %{id: "ft-1", name: "Standard"}
}
iodata = MembersCSV.export([member], columns)
csv = IO.iodata_to_binary(iodata)
assert csv =~ "Fee Type"
assert csv =~ "Standard"
assert csv =~ "M,m@m.com,Standard"
end
test "membership_fee_type column exports empty when no fee type" do
columns = [
%{header: "First Name", kind: :member_field, key: "first_name"},
%{header: "Fee Type", kind: :membership_fee_type, key: :membership_fee_type}
]
member = %{first_name: "M", email: "m@m.com", membership_fee_type: nil}
iodata = MembersCSV.export([member], columns)
csv = IO.iodata_to_binary(iodata)
assert csv =~ "Fee Type"
assert csv =~ "M,"
refute csv =~ "Standard"
end
test "CSV injection: formula-like and dangerous prefixes are escaped with apostrophe" do
member = %{
first_name: "=SUM(A1:A10)",