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