Tests: member required fields, setting, member field live, sync_contact

Add tests for required validation, update_single_member_field, form
required map. Add street/postal_code/city to sync_contact when Vereinfacht configured.
This commit is contained in:
Moritz 2026-02-23 22:11:15 +01:00
parent 27b9cbe814
commit d44c5bdf94
Signed by: moritz
GPG key ID: 1020A035E5DD0824
5 changed files with 208 additions and 34 deletions

View file

@ -5,8 +5,8 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
Tests cover:
- Rendering all member fields from Mv.Constants.member_fields()
- Displaying show_in_overview status as badge (Yes/No)
- Displaying required status for required fields (first_name, last_name, email)
- Current status is displayed based on settings.member_field_visibility
- Displaying required status from settings.member_field_required (email is always required)
- Current status is displayed based on settings.member_field_visibility and member_field_required
- Default status is "Yes" (visible) when not configured in settings
"""
use MvWeb.ConnCase, async: false
@ -45,11 +45,10 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
assert html =~ "badge" or html =~ "Yes" or html =~ "No"
end
test "displays required status for required fields", %{conn: conn} do
test "displays required status column", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
# Required fields: first_name, last_name, email
# Should have "Required" column or indicator
# Should have "Required" column; email is always required
assert html =~ "Required" or html =~ "required"
end
@ -85,40 +84,46 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
end
describe "required fields" do
test "marks first_name as required", %{conn: conn} do
test "marks email as required (always from settings)", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
# first_name should be marked as required
assert html =~ "first_name" or html =~ "First name"
# Should have required indicator
assert html =~ "required" or html =~ "Required"
end
test "marks last_name as required", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
# last_name should be marked as required
assert html =~ "last_name" or html =~ "Last name"
# Should have required indicator
assert html =~ "required" or html =~ "Required"
end
test "marks email as required", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
# email should be marked as required
# Email is always required
assert html =~ "email" or html =~ "Email"
# Should have required indicator
assert html =~ "required" or html =~ "Required"
assert html =~ "Required" or html =~ "Optional"
end
test "does not mark optional fields as required", %{conn: conn} do
test "when first_name is set required in settings, table shows Required", %{conn: conn} do
{:ok, settings} = Membership.get_settings()
{:ok, _} =
Membership.update_single_member_field(settings,
field: "first_name",
show_in_overview: true,
required: true
)
{:ok, _view, html} = live(conn, ~p"/settings")
# Optional fields should not have required indicator
# Check that street (optional) doesn't have required badge
# This test verifies that only required fields show the indicator
assert html =~ "street" or html =~ "Street"
# First name row should show Required (and Optional for others)
assert html =~ "First name" or html =~ "first_name"
assert html =~ "Required"
# Reset
{:ok, settings} = Membership.get_settings()
Membership.update_single_member_field(settings,
field: "first_name",
show_in_overview: true,
required: false
)
end
test "optional fields show Optional when not required in settings", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
# Email is required; other fields default to optional
assert html =~ "Optional"
assert html =~ "Required"
end
end
end