test: add LiveView tests for member linking UI (#168)
This commit is contained in:
parent
af193840e2
commit
48b0823091
3 changed files with 561 additions and 0 deletions
|
|
@ -281,4 +281,101 @@ defmodule MvWeb.UserLive.FormTest do
|
|||
assert edit_html =~ "Change Password"
|
||||
end
|
||||
end
|
||||
|
||||
describe "member linking - display" do
|
||||
test "shows linked member with unlink button when user has member", %{conn: conn} do
|
||||
# Create member
|
||||
{:ok, member} =
|
||||
Mv.Membership.create_member(%{
|
||||
first_name: "John",
|
||||
last_name: "Doe",
|
||||
email: "john@example.com"
|
||||
})
|
||||
|
||||
# Create user linked to member
|
||||
user = create_test_user(%{email: "user@example.com"})
|
||||
{:ok, _updated_user} = Mv.Accounts.update_user(user, %{member: %{id: member.id}})
|
||||
|
||||
# Load form
|
||||
{:ok, view, html} = setup_live_view(conn, "/users/#{user.id}/edit")
|
||||
|
||||
# Should show linked member section
|
||||
assert html =~ "Linked Member"
|
||||
assert html =~ "John Doe"
|
||||
assert html =~ "user@example.com"
|
||||
assert has_element?(view, "button[phx-click='unlink_member']")
|
||||
assert html =~ "Unlink Member"
|
||||
end
|
||||
|
||||
test "shows member search field when user has no member", %{conn: conn} do
|
||||
user = create_test_user(%{email: "user@example.com"})
|
||||
{:ok, view, html} = setup_live_view(conn, "/users/#{user.id}/edit")
|
||||
|
||||
# Should show member search section
|
||||
assert html =~ "Linked Member"
|
||||
assert has_element?(view, "input[phx-change='search_members']")
|
||||
# Should not show unlink button
|
||||
refute has_element?(view, "button[phx-click='unlink_member']")
|
||||
end
|
||||
end
|
||||
|
||||
describe "member linking - workflow" do
|
||||
test "selecting member and saving links member to user", %{conn: conn} do
|
||||
# Create unlinked member
|
||||
{:ok, member} =
|
||||
Mv.Membership.create_member(%{
|
||||
first_name: "Jane",
|
||||
last_name: "Smith",
|
||||
email: "jane@example.com"
|
||||
})
|
||||
|
||||
# Create user without member
|
||||
user = create_test_user(%{email: "user@example.com"})
|
||||
{:ok, view, _html} = setup_live_view(conn, "/users/#{user.id}/edit")
|
||||
|
||||
# Select member
|
||||
view |> element("div[data-member-id='#{member.id}']") |> render_click()
|
||||
|
||||
# Submit form
|
||||
view
|
||||
|> form("#user-form", user: %{email: "user@example.com"})
|
||||
|> render_submit()
|
||||
|
||||
assert_redirected(view, "/users")
|
||||
|
||||
# Verify member is linked
|
||||
updated_user = Ash.get!(Mv.Accounts.User, user.id, domain: Mv.Accounts, load: [:member])
|
||||
assert updated_user.member.id == member.id
|
||||
end
|
||||
|
||||
test "unlinking member and saving removes member from user", %{conn: conn} do
|
||||
# Create member
|
||||
{:ok, member} =
|
||||
Mv.Membership.create_member(%{
|
||||
first_name: "Bob",
|
||||
last_name: "Wilson",
|
||||
email: "bob@example.com"
|
||||
})
|
||||
|
||||
# Create user linked to member
|
||||
user = create_test_user(%{email: "user@example.com"})
|
||||
{:ok, _} = Mv.Accounts.update_user(user, %{member: %{id: member.id}})
|
||||
|
||||
{:ok, view, _html} = setup_live_view(conn, "/users/#{user.id}/edit")
|
||||
|
||||
# Click unlink button
|
||||
view |> element("button[phx-click='unlink_member']") |> render_click()
|
||||
|
||||
# Submit form
|
||||
view
|
||||
|> form("#user-form", user: %{email: "user@example.com"})
|
||||
|> render_submit()
|
||||
|
||||
assert_redirected(view, "/users")
|
||||
|
||||
# Verify member is unlinked
|
||||
updated_user = Ash.get!(Mv.Accounts.User, user.id, domain: Mv.Accounts, load: [:member])
|
||||
assert is_nil(updated_user.member)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue