feat: Datafields page, merge fee types into membership_fee_settings, sidebar

- Add /admin/datafields (DatafieldsLive) for member and custom field config
- Remove Memberdata block from GlobalSettingsLive
- Router: drop /membership_fee_types, add new_fee_type and edit_fee_type under membership_fee_settings
- MembershipFeeSettingsLive: fee types table, collapsible examples; Index links updated
- PagePaths: admin_datafields, admin_import; remove membership_fee_types
- Sidebar: order and labels (Basic settings, Datafields, Membership fee settings, Import, Users, Roles)
- Gettext: German translations for sidebar and OIDC
- Tests: datafields and fee routes, permission and form tests updated
This commit is contained in:
Moritz 2026-02-24 13:55:33 +01:00
parent 8edbbac95f
commit 62b37b9aa2
Signed by: moritz
GPG key ID: 1020A035E5DD0824
18 changed files with 886 additions and 251 deletions

View file

@ -23,7 +23,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
describe "rendering" do
test "renders all member fields from Constants", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Check that all member fields are displayed
member_fields = Mv.Constants.member_fields()
@ -36,7 +36,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
end
test "displays show_in_overview status as badge", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Should have "Show in overview" column header
assert html =~ "Show in overview" or html =~ "Show in Overview"
@ -46,7 +46,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
end
test "displays required status column", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Should have "Required" column; email is always required
assert html =~ "Required" or html =~ "required"
@ -59,7 +59,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
{:ok, _updated} =
Membership.update_settings(settings, %{member_field_visibility: %{}})
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# All fields should show as visible (Yes) by default
# Check for "Yes" badge or similar indicator
@ -74,7 +74,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
{:ok, _updated} =
Membership.update_member_field_visibility(settings, visibility_config)
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Street and house_number should show as hidden (No)
# Other fields should show as visible (Yes)
@ -102,7 +102,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
end
test "marks email as required (always from settings)", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Email is always required
assert html =~ "email" or html =~ "Email"
@ -119,7 +119,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
required: true
)
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# First name row should show Required (and Optional for others)
assert html =~ "First name" or html =~ "first_name"
@ -127,7 +127,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
end
test "optional fields show Optional when not required in settings", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Email is required; other fields default to optional
assert html =~ "Optional"