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:
simon 2026-01-19 14:17:12 +01:00
commit b84431879c
5 changed files with 298 additions and 21 deletions

View file

@ -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

View 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