test: added tests

This commit is contained in:
carla 2025-12-15 09:33:47 +01:00
parent 9ff7d7d17b
commit eea3f28cc5
3 changed files with 363 additions and 0 deletions

View file

@ -0,0 +1,157 @@
defmodule MvWeb.MemberLive.IndexRequiredDisplayTest do
@moduledoc """
Tests for displaying "required" badge in member overview.
Tests cover:
- "required" badge for required member fields (first_name, last_name, email)
- "required" badge for required custom fields
- No "required" badge for optional member fields
- No "required" badge for optional custom fields
- Badge is positioned in column header
"""
# async: false to prevent PostgreSQL deadlocks when creating members and custom fields
use MvWeb.ConnCase, async: false
import Phoenix.LiveViewTest
require Ash.Query
alias Mv.Membership.{CustomField, CustomFieldValue, Member}
setup do
# Create test member
{:ok, member} =
Member
|> Ash.Changeset.for_create(:create_member, %{
first_name: "Alice",
last_name: "Anderson",
email: "alice@example.com"
})
|> Ash.create()
# Create required custom field
{:ok, required_field} =
CustomField
|> Ash.Changeset.for_create(:create, %{
name: "emergency_contact",
value_type: :string,
required: true,
show_in_overview: true
})
|> Ash.create()
# Create optional custom field
{:ok, optional_field} =
CustomField
|> Ash.Changeset.for_create(:create, %{
name: "hobby",
value_type: :string,
required: false,
show_in_overview: true
})
|> Ash.create()
# Create custom field values
{:ok, _cfv1} =
CustomFieldValue
|> Ash.Changeset.for_create(:create, %{
member_id: member.id,
custom_field_id: required_field.id,
value: %{"_union_type" => "string", "_union_value" => "John Doe"}
})
|> Ash.create()
{:ok, _cfv2} =
CustomFieldValue
|> Ash.Changeset.for_create(:create, %{
member_id: member.id,
custom_field_id: optional_field.id,
value: %{"_union_type" => "string", "_union_value" => "Reading"}
})
|> Ash.create()
%{
member: member,
required_field: required_field,
optional_field: optional_field
}
end
describe "required badge for member fields" do
test "displays required badge for first_name column", %{conn: conn} do
conn = conn_with_oidc_user(conn)
{:ok, _view, html} = live(conn, "/members")
# Check that first_name column header has required badge
assert html =~ "first_name" or html =~ "First name" or html =~ "First Name"
# Should have required indicator in header
assert html =~ "required" or html =~ "Required"
end
test "displays required badge for last_name column", %{conn: conn} do
conn = conn_with_oidc_user(conn)
{:ok, _view, html} = live(conn, "/members")
# Check that last_name column header has required badge
assert html =~ "last_name" or html =~ "Last name" or html =~ "Last Name"
# Should have required indicator in header
assert html =~ "required" or html =~ "Required"
end
test "displays required badge for email column", %{conn: conn} do
conn = conn_with_oidc_user(conn)
{:ok, _view, html} = live(conn, "/members")
# Check that email column header has required badge
assert html =~ "email" or html =~ "Email"
# Should have required indicator in header
assert html =~ "required" or html =~ "Required"
end
test "does not display required badge for optional member fields", %{conn: conn} do
conn = conn_with_oidc_user(conn)
{:ok, _view, html} = live(conn, "/members")
# Optional fields: street, city, phone_number, etc.
# These should not have required badge
# We check that street is present but doesn't have required indicator nearby
assert html =~ "street" or html =~ "Street"
end
end
describe "required badge for custom fields" do
test "displays required badge for required custom field column", %{
conn: conn,
required_field: field
} do
conn = conn_with_oidc_user(conn)
{:ok, _view, html} = live(conn, "/members")
# Check that required custom field column header has required badge
assert html =~ field.name
# Should have required indicator in header
assert html =~ "required" or html =~ "Required"
end
test "does not display required badge for optional custom field column", %{
conn: conn,
optional_field: field
} do
conn = conn_with_oidc_user(conn)
{:ok, _view, html} = live(conn, "/members")
# Check that optional custom field column header does not have required badge
assert html =~ field.name
# Should not have required indicator (or it should be clear it's optional)
end
end
describe "badge positioning" do
test "required badge is in column header, not in cell content", %{conn: conn} do
conn = conn_with_oidc_user(conn)
{:ok, _view, html} = live(conn, "/members")
# Required badge should be in thead (header), not in tbody (data rows)
# This is verified by checking that required appears near column headers
assert html =~ "thead" or html =~ "th"
end
end
end