Merge pull request 'fix admin database seeding closes #357' (#358) from bugfix/reseeding-database-not-working into main
Reviewed-on: #358
This commit is contained in:
commit
b84431879c
5 changed files with 298 additions and 21 deletions
|
|
@ -73,6 +73,26 @@ defmodule Mv.Membership.MemberTest do
|
|||
end
|
||||
end
|
||||
|
||||
describe "Authorization" do
|
||||
@valid_attrs %{
|
||||
first_name: "John",
|
||||
last_name: "Doe",
|
||||
email: "john@example.com"
|
||||
}
|
||||
|
||||
test "user without role cannot create member" do
|
||||
# Create a user without a role
|
||||
user = Mv.Fixtures.user_fixture()
|
||||
# Ensure user has no role (nil role)
|
||||
user_without_role = %{user | role: nil}
|
||||
|
||||
# Attempt to create a member with user without role as actor
|
||||
# This should fail with Ash.Error.Forbidden containing a Policy error
|
||||
assert {:error, %Ash.Error.Forbidden{errors: [%Ash.Error.Forbidden.Policy{}]}} =
|
||||
Membership.create_member(@valid_attrs, actor: user_without_role)
|
||||
end
|
||||
end
|
||||
|
||||
# Helper function for error evaluation
|
||||
defp error_message(errors, field) do
|
||||
errors
|
||||
|
|
|
|||
143
test/mv_web/member_live/form_error_handling_test.exs
Normal file
143
test/mv_web/member_live/form_error_handling_test.exs
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
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