feat: add groups resource #371
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Simon 2026-01-27 16:03:21 +01:00
parent 8e9fbe76cf
commit 6db64bf996
Signed by: simon
GPG key ID: 40E7A58C4AA1EDB2
12 changed files with 742 additions and 18 deletions

View file

@ -50,7 +50,7 @@ defmodule Mv.Membership.GroupTest do
assert {:error, %Ash.Error.Invalid{errors: errors}} =
Membership.create_group(attrs, actor: actor)
assert error_message(errors, :name) =~ "must be at most 100"
assert error_message(errors, :name) =~ "100" or error_message(errors, :name) =~ "length"
end
test "return error when name is not unique (case-insensitive) - application level validation",
@ -77,7 +77,8 @@ defmodule Mv.Membership.GroupTest do
assert {:error, %Ash.Error.Invalid{errors: errors}} =
Membership.create_group(attrs, actor: actor)
assert error_message(errors, :description) =~ "must be at most 500"
assert error_message(errors, :description) =~ "500" or
error_message(errors, :description) =~ "length"
end
end
@ -123,9 +124,13 @@ defmodule Mv.Membership.GroupTest do
Membership.create_group(%{name: "!!!"}, actor: actor)
assert Enum.any?(errors, fn err ->
(err.field == :slug or err.field == :name) and
(String.contains?(err.message, "cannot be empty") or
String.contains?(err.message, "is required"))
field = Map.get(err, :field)
message = Map.get(err, :message, Exception.message(err))
(field == :slug or field == :name) and
(String.contains?(message, "cannot be empty") or
String.contains?(message, "is required") or
String.contains?(message, "must be present"))
end)
end
end
@ -277,8 +282,15 @@ defmodule Mv.Membership.GroupTest do
# Returns the error message for a given field, or empty string if not found
defp error_message(errors, field) do
case Enum.find(errors, fn err -> Map.get(err, :field) == field end) do
nil -> ""
err -> Map.get(err, :message, "")
nil ->
""
err ->
# Handle different error types (Ash.Error.Changes.Required doesn't have :message)
case Map.get(err, :message) do
nil -> Exception.message(err)
message -> message
end
end
end
end

View file

@ -44,10 +44,14 @@ defmodule Mv.Membership.MemberGroupTest do
)
assert Enum.any?(errors, fn err ->
((err.field == :member_id or err.field == :group_id) and
String.contains?(err.message, "already been taken")) or
String.contains?(err.message, "already exists") or
String.contains?(err.message, "duplicate")
field = Map.get(err, :field)
message = Map.get(err, :message, "")
(field == :member_id or field == :group_id) and
(String.contains?(message, "already been taken") or
String.contains?(message, "already exists") or
String.contains?(message, "duplicate") or
String.contains?(message, "already in this group"))
end)
end
end