test: added tests
This commit is contained in:
parent
9ff7d7d17b
commit
eea3f28cc5
3 changed files with 363 additions and 0 deletions
157
test/mv_web/member_live/index_required_display_test.exs
Normal file
157
test/mv_web/member_live/index_required_display_test.exs
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue