80 lines
2.8 KiB
Elixir
80 lines
2.8 KiB
Elixir
defmodule Mv.Membership.MemberFieldVisibilityTest do
|
|
@moduledoc """
|
|
Tests for member field visibility configuration.
|
|
|
|
Tests cover:
|
|
- Member fields are visible by default (show_in_overview: true)
|
|
- Member fields can be hidden (show_in_overview: false)
|
|
- Checking if a specific field is visible
|
|
- Configuration is stored in Settings resource
|
|
"""
|
|
use Mv.DataCase, async: true
|
|
|
|
alias Mv.Membership.Member
|
|
|
|
describe "show_in_overview?/1" do
|
|
test "returns true for all member fields by default" do
|
|
# When no settings exist or member_field_visibility is not configured
|
|
# Test with fields from constants
|
|
member_fields = Mv.Constants.member_fields()
|
|
|
|
Enum.each(member_fields, fn field ->
|
|
assert Member.show_in_overview?(field) == true,
|
|
"Field #{field} should be visible by default"
|
|
end)
|
|
end
|
|
|
|
test "returns false for fields with show_in_overview: false in settings" do
|
|
# Get or create settings
|
|
{:ok, settings} = Mv.Membership.get_settings()
|
|
|
|
# Use a field that exists in member fields
|
|
member_fields = Mv.Constants.member_fields()
|
|
field_to_hide = List.first(member_fields)
|
|
field_to_show = List.last(member_fields)
|
|
|
|
# Update settings to hide a field (use string keys for JSONB)
|
|
{:ok, _updated_settings} =
|
|
Mv.Membership.update_settings(settings, %{
|
|
member_field_visibility: %{Atom.to_string(field_to_hide) => false}
|
|
})
|
|
|
|
# JSONB may convert atom keys to string keys, so we check via show_in_overview? instead
|
|
assert Member.show_in_overview?(field_to_hide) == false
|
|
assert Member.show_in_overview?(field_to_show) == true
|
|
end
|
|
|
|
test "returns true for non-configured fields (default)" do
|
|
# Get or create settings
|
|
{:ok, settings} = Mv.Membership.get_settings()
|
|
|
|
# Use fields that exist in member fields
|
|
member_fields = Mv.Constants.member_fields()
|
|
fields_to_hide = Enum.take(member_fields, 2)
|
|
fields_to_show = Enum.take(member_fields, -2)
|
|
|
|
# Update settings to hide some fields (use string keys for JSONB)
|
|
visibility_config =
|
|
Enum.reduce(fields_to_hide, %{}, fn field, acc ->
|
|
Map.put(acc, Atom.to_string(field), false)
|
|
end)
|
|
|
|
{:ok, _updated_settings} =
|
|
Mv.Membership.update_settings(settings, %{
|
|
member_field_visibility: visibility_config
|
|
})
|
|
|
|
# Hidden fields should be false
|
|
Enum.each(fields_to_hide, fn field ->
|
|
assert Member.show_in_overview?(field) == false,
|
|
"Field #{field} should be hidden"
|
|
end)
|
|
|
|
# Unconfigured fields should still be true (default)
|
|
Enum.each(fields_to_show, fn field ->
|
|
assert Member.show_in_overview?(field) == true,
|
|
"Field #{field} should be visible by default"
|
|
end)
|
|
end
|
|
end
|
|
end
|