From a6f6f402af6fb4780026e69a484f08861a9dd4e6 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 5 May 2026 17:01:10 +0200 Subject: [PATCH] test: add tests for custom field labels --- test/mv_web/live/join_live_test.exs | 28 ++++++++ .../live/join_request_live/show_test.exs | 71 +++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 test/mv_web/live/join_request_live/show_test.exs diff --git a/test/mv_web/live/join_live_test.exs b/test/mv_web/live/join_live_test.exs index 4772e48..383b413 100644 --- a/test/mv_web/live/join_live_test.exs +++ b/test/mv_web/live/join_live_test.exs @@ -135,6 +135,34 @@ defmodule MvWeb.JoinLiveTest do end end + describe "join field labels" do + @tag role: :unauthenticated + test "renders custom field name as label for custom field IDs", %{conn: conn} do + {:ok, settings} = Membership.get_settings() + system_actor = Mv.Helpers.SystemActor.get_system_actor() + + {:ok, custom_field} = + Membership.create_custom_field( + %{ + name: "Preferred Pronouns", + value_type: :string + }, + actor: system_actor + ) + + {:ok, _} = + Membership.update_settings(settings, %{ + join_form_enabled: true, + join_form_field_ids: ["email", custom_field.id], + join_form_field_required: %{"email" => true, custom_field.id => false} + }) + + {:ok, view, _html} = live(conn, "/join") + + assert has_element?(view, "label[for='join-field-#{custom_field.id}'] .label-text", custom_field.name) + end + end + defp enable_join_form(enabled) do {:ok, settings} = Membership.get_settings() {:ok, _} = Membership.update_settings(settings, %{join_form_enabled: enabled}) diff --git a/test/mv_web/live/join_request_live/show_test.exs b/test/mv_web/live/join_request_live/show_test.exs new file mode 100644 index 0000000..35e87dc --- /dev/null +++ b/test/mv_web/live/join_request_live/show_test.exs @@ -0,0 +1,71 @@ +defmodule MvWeb.JoinRequestLive.ShowTest do + @moduledoc """ + Tests for join request detail view label rendering. + + Focus: applicant data labels for custom fields should use custom field names, + not raw UUIDs. + """ + use MvWeb.ConnCase, async: false + + import Phoenix.LiveViewTest + + alias Mv.Fixtures + alias Mv.Membership + + setup do + {:ok, settings} = Membership.get_settings() + + saved = %{ + join_form_enabled: settings.join_form_enabled, + join_form_field_ids: settings.join_form_field_ids, + join_form_field_required: settings.join_form_field_required + } + + on_exit(fn -> + {:ok, current_settings} = Membership.get_settings() + + Membership.update_settings(current_settings, %{ + join_form_enabled: saved.join_form_enabled, + join_form_field_ids: saved.join_form_field_ids || [], + join_form_field_required: saved.join_form_field_required || %{} + }) + end) + + :ok + end + + describe "custom field labels in applicant data" do + @tag role: :normal_user + test "renders custom field name instead of custom field UUID", %{conn: conn} do + system_actor = Mv.Helpers.SystemActor.get_system_actor() + {:ok, settings} = Membership.get_settings() + + {:ok, custom_field} = + Membership.create_custom_field( + %{ + name: "Emergency contact", + value_type: :string + }, + actor: system_actor + ) + + {:ok, _} = + Membership.update_settings(settings, %{ + join_form_enabled: true, + join_form_field_ids: ["email", custom_field.id], + join_form_field_required: %{"email" => true, custom_field.id => false} + }) + + join_request = + Fixtures.submitted_join_request_fixture(%{ + form_data: %{custom_field.id => "Alice Example"} + }) + + {:ok, view, _html} = live(conn, "/join_requests/#{join_request.id}") + + assert has_element?(view, "span", "#{custom_field.name}:") + assert has_element?(view, "span", "Alice Example") + refute has_element?(view, "span", "#{custom_field.id}:") + end + end +end