test: add tests for atomic member field visibility updates
This commit is contained in:
parent
b139d85791
commit
e565d1748e
1 changed files with 68 additions and 0 deletions
|
|
@ -80,4 +80,72 @@ defmodule Mv.Membership.MemberFieldVisibilityTest do
|
|||
end)
|
||||
end
|
||||
end
|
||||
|
||||
describe "update_single_member_field_visibility/3" do
|
||||
test "atomically updates a single field in member_field_visibility" do
|
||||
{:ok, settings} = Mv.Membership.get_settings()
|
||||
field_string = "street"
|
||||
|
||||
# Update single field
|
||||
{:ok, updated_settings} =
|
||||
Mv.Membership.update_single_member_field_visibility(
|
||||
settings,
|
||||
field: field_string,
|
||||
show_in_overview: false
|
||||
)
|
||||
|
||||
# Verify the field was updated
|
||||
assert updated_settings.member_field_visibility[field_string] == false
|
||||
|
||||
# Verify other fields are not affected
|
||||
other_fields =
|
||||
Mv.Constants.member_fields()
|
||||
|> Enum.reject(&(&1 == String.to_existing_atom(field_string)))
|
||||
|
||||
Enum.each(other_fields, fn field ->
|
||||
field_string = Atom.to_string(field)
|
||||
# Fields not explicitly set should default to true (except exit_date)
|
||||
expected = if field == :exit_date, do: false, else: true
|
||||
|
||||
assert Map.get(updated_settings.member_field_visibility, field_string, expected) ==
|
||||
expected
|
||||
end)
|
||||
end
|
||||
|
||||
test "returns error for invalid field name" do
|
||||
{:ok, settings} = Mv.Membership.get_settings()
|
||||
|
||||
assert {:error, %Ash.Error.Invalid{errors: [%{field: :member_field_visibility}]}} =
|
||||
Mv.Membership.update_single_member_field_visibility(
|
||||
settings,
|
||||
field: "invalid_field",
|
||||
show_in_overview: false
|
||||
)
|
||||
end
|
||||
|
||||
test "handles concurrent updates atomically" do
|
||||
{:ok, settings} = Mv.Membership.get_settings()
|
||||
field1 = "street"
|
||||
field2 = "house_number"
|
||||
|
||||
# Simulate concurrent updates by updating different fields
|
||||
{:ok, updated1} =
|
||||
Mv.Membership.update_single_member_field_visibility(
|
||||
settings,
|
||||
field: field1,
|
||||
show_in_overview: false
|
||||
)
|
||||
|
||||
{:ok, updated2} =
|
||||
Mv.Membership.update_single_member_field_visibility(
|
||||
updated1,
|
||||
field: field2,
|
||||
show_in_overview: true
|
||||
)
|
||||
|
||||
# Both fields should be correctly updated
|
||||
assert updated2.member_field_visibility[field1] == false
|
||||
assert updated2.member_field_visibility[field2] == true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue