81 lines
2.5 KiB
Elixir
81 lines
2.5 KiB
Elixir
defmodule MvWeb.UserLive.AdminMemberAssignmentTest do
|
|
use MvWeb.ConnCase, async: true
|
|
import Phoenix.LiveViewTest
|
|
|
|
test "admin can assign existing member without user to new user", %{conn: conn} do
|
|
{:ok, member} =
|
|
Mv.Membership.create_member(%{
|
|
first_name: "Admin",
|
|
last_name: "Choice",
|
|
email: "adminchoice@example.com"
|
|
})
|
|
|
|
conn = conn_with_oidc_user(conn, %{email: "admin@example.com"})
|
|
{:ok, view, _html} = live(conn, "/users/new")
|
|
|
|
# First click the "assign existing member" radio button
|
|
view
|
|
|> element("input[value='assign_existing']")
|
|
|> render_click()
|
|
|
|
# Then submit the form with member_id
|
|
view
|
|
|> form("#user-form", user: %{email: "adminuser@example.com", member_id: member.id})
|
|
|> render_submit()
|
|
|
|
user =
|
|
Ash.get!(Mv.Accounts.User, [email: Ash.CiString.new("adminuser@example.com")],
|
|
domain: Mv.Accounts
|
|
)
|
|
|
|
assert user.member_id == member.id
|
|
end
|
|
|
|
test "admin can create new member for user if none selected", %{conn: conn} do
|
|
conn = conn_with_oidc_user(conn, %{email: "admin2@example.com"})
|
|
{:ok, view, _html} = live(conn, "/users/new")
|
|
|
|
# Default mode is "create_new", so just submit
|
|
view
|
|
|> form("#user-form", user: %{email: "adminnewmember@example.com"})
|
|
|> render_submit()
|
|
|
|
user =
|
|
Ash.get!(Mv.Accounts.User, [email: Ash.CiString.new("adminnewmember@example.com")],
|
|
domain: Mv.Accounts
|
|
)
|
|
|
|
assert user.member_id
|
|
{:ok, member} = Mv.Membership.get_member!(user.member_id)
|
|
assert member.email == "adminnewmember@example.com"
|
|
end
|
|
|
|
test "admin cannot assign member that already has a user", %{conn: conn} do
|
|
{:ok, member} =
|
|
Mv.Membership.create_member(%{
|
|
first_name: "Taken",
|
|
last_name: "Member",
|
|
email: "taken@example.com"
|
|
})
|
|
|
|
{:ok, _user} =
|
|
Mv.Accounts.create_user(%{email: "takenuser@example.com", member_id: member.id})
|
|
|
|
conn = conn_with_oidc_user(conn, %{email: "admin3@example.com"})
|
|
{:ok, view, _html} = live(conn, "/users/new")
|
|
|
|
# First click the "assign existing member" radio button
|
|
view
|
|
|> element("input[value='assign_existing']")
|
|
|> render_click()
|
|
|
|
# Check that the already assigned member is NOT in the dropdown options
|
|
html = render(view)
|
|
# Member should not be available for selection
|
|
refute html =~ "Taken Member"
|
|
|
|
# The dropdown should have limited or no options since member is already taken
|
|
# Placeholder should be visible
|
|
assert html =~ "Choose a member..."
|
|
end
|
|
end
|