fix: add error message to form
This commit is contained in:
parent
c31392e4fe
commit
584442076e
2 changed files with 222 additions and 1 deletions
140
test/mv_web/member_live/form_error_handling_test.exs
Normal file
140
test/mv_web/member_live/form_error_handling_test.exs
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
defmodule MvWeb.MemberLive.FormErrorHandlingTest do
|
||||
@moduledoc """
|
||||
Tests for error handling in the member form, specifically flash message display.
|
||||
"""
|
||||
use MvWeb.ConnCase, async: false
|
||||
|
||||
import Phoenix.LiveViewTest
|
||||
|
||||
alias Mv.Membership.Member
|
||||
|
||||
require Ash.Query
|
||||
|
||||
describe "error handling - flash messages" do
|
||||
test "shows flash message when member creation fails with validation error", %{conn: conn} do
|
||||
# Create a member with the same email to trigger uniqueness error
|
||||
{:ok, _existing_member} =
|
||||
Member
|
||||
|> Ash.Changeset.for_create(:create_member, %{
|
||||
first_name: "Existing",
|
||||
last_name: "Member",
|
||||
email: "duplicate@example.com"
|
||||
})
|
||||
|> Ash.create()
|
||||
|
||||
conn = conn_with_oidc_user(conn)
|
||||
{:ok, view, _html} = live(conn, "/members/new")
|
||||
|
||||
# Try to create member with duplicate email
|
||||
form_data = %{
|
||||
"member[first_name]" => "New",
|
||||
"member[last_name]" => "Member",
|
||||
"member[email]" => "duplicate@example.com"
|
||||
}
|
||||
|
||||
html =
|
||||
view
|
||||
|> form("#member-form", form_data)
|
||||
|> render_submit()
|
||||
|
||||
# Should show flash error message
|
||||
assert has_element?(view, "#flash-group")
|
||||
assert html =~ "error" or html =~ "Error" or html =~ "Fehler" or
|
||||
html =~ "failed" or html =~ "fehlgeschlagen" or
|
||||
html =~ "Validation failed" or html =~ "Validierung fehlgeschlagen"
|
||||
end
|
||||
|
||||
test "shows flash message when member creation fails with missing required fields", %{
|
||||
conn: conn
|
||||
} do
|
||||
conn = conn_with_oidc_user(conn)
|
||||
{:ok, view, _html} = live(conn, "/members/new")
|
||||
|
||||
# Submit form with missing required fields (e.g., email)
|
||||
form_data = %{
|
||||
"member[first_name]" => "Test",
|
||||
"member[last_name]" => "User"
|
||||
# email is missing
|
||||
}
|
||||
|
||||
html =
|
||||
view
|
||||
|> form("#member-form", form_data)
|
||||
|> render_submit()
|
||||
|
||||
# Should show flash error message
|
||||
assert has_element?(view, "#flash-group")
|
||||
assert html =~ "error" or html =~ "Error" or html =~ "Fehler" or
|
||||
html =~ "failed" or html =~ "fehlgeschlagen" or
|
||||
html =~ "Validation failed" or html =~ "Validierung fehlgeschlagen" or
|
||||
html =~ "Please correct" or html =~ "Bitte korrigieren"
|
||||
end
|
||||
|
||||
test "shows flash message when member update fails", %{conn: conn} do
|
||||
# Create a member to edit
|
||||
{:ok, member} =
|
||||
Member
|
||||
|> Ash.Changeset.for_create(:create_member, %{
|
||||
first_name: "Original",
|
||||
last_name: "Member",
|
||||
email: "original@example.com"
|
||||
})
|
||||
|> Ash.create()
|
||||
|
||||
# Create another member with different email
|
||||
{:ok, _other_member} =
|
||||
Member
|
||||
|> Ash.Changeset.for_create(:create_member, %{
|
||||
first_name: "Other",
|
||||
last_name: "Member",
|
||||
email: "other@example.com"
|
||||
})
|
||||
|> Ash.create()
|
||||
|
||||
conn = conn_with_oidc_user(conn)
|
||||
{:ok, view, _html} = live(conn, "/members/#{member.id}/edit")
|
||||
|
||||
# Try to update with duplicate email
|
||||
form_data = %{
|
||||
"member[first_name]" => "Updated",
|
||||
"member[last_name]" => "Member",
|
||||
"member[email]" => "other@example.com"
|
||||
}
|
||||
|
||||
html =
|
||||
view
|
||||
|> form("#member-form", form_data)
|
||||
|> render_submit()
|
||||
|
||||
# Should show flash error message
|
||||
assert has_element?(view, "#flash-group")
|
||||
assert html =~ "error" or html =~ "Error" or html =~ "Fehler" or
|
||||
html =~ "failed" or html =~ "fehlgeschlagen" or
|
||||
html =~ "Validation failed" or html =~ "Validierung fehlgeschlagen"
|
||||
end
|
||||
|
||||
test "form still displays field-level validation errors when flash message is shown", %{
|
||||
conn: conn
|
||||
} do
|
||||
conn = conn_with_oidc_user(conn)
|
||||
{:ok, view, _html} = live(conn, "/members/new")
|
||||
|
||||
# Submit form with invalid email format
|
||||
form_data = %{
|
||||
"member[first_name]" => "Test",
|
||||
"member[last_name]" => "User",
|
||||
"member[email]" => "invalid-email-format"
|
||||
}
|
||||
|
||||
html =
|
||||
view
|
||||
|> form("#member-form", form_data)
|
||||
|> render_submit()
|
||||
|
||||
# Should show both flash message and field-level error
|
||||
assert has_element?(view, "#flash-group")
|
||||
# Field-level errors should also be visible in the form
|
||||
assert html =~ "email" or html =~ "Email"
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue