tests: adds tests
This commit is contained in:
parent
d10f2ecc90
commit
944b868478
2 changed files with 155 additions and 0 deletions
80
test/membership/member_field_visibility_test.exs
Normal file
80
test/membership/member_field_visibility_test.exs
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
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
|
||||||
|
{:ok, _updated_settings} =
|
||||||
|
Mv.Membership.update_settings(settings, %{
|
||||||
|
member_field_visibility: %{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
|
||||||
|
visibility_config =
|
||||||
|
Enum.reduce(fields_to_hide, %{}, fn field, acc ->
|
||||||
|
Map.put(acc, 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
|
||||||
75
test/mv_web/member_live/index_member_fields_display_test.exs
Normal file
75
test/mv_web/member_live/index_member_fields_display_test.exs
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
defmodule MvWeb.MemberLive.IndexMemberFieldsDisplayTest do
|
||||||
|
use MvWeb.ConnCase, async: true
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
|
alias Mv.Membership.Member
|
||||||
|
|
||||||
|
setup do
|
||||||
|
{:ok, member1} =
|
||||||
|
Member
|
||||||
|
|> Ash.Changeset.for_create(:create_member, %{
|
||||||
|
first_name: "Alice",
|
||||||
|
last_name: "Anderson",
|
||||||
|
email: "alice@example.com",
|
||||||
|
street: "Main Street",
|
||||||
|
house_number: "123",
|
||||||
|
postal_code: "12345",
|
||||||
|
city: "Berlin",
|
||||||
|
phone_number: "+49123456789",
|
||||||
|
join_date: ~D[2020-01-15]
|
||||||
|
})
|
||||||
|
|> Ash.create()
|
||||||
|
|
||||||
|
{:ok, member2} =
|
||||||
|
Member
|
||||||
|
|> Ash.Changeset.for_create(:create_member, %{
|
||||||
|
first_name: "Bob",
|
||||||
|
last_name: "Brown",
|
||||||
|
email: "bob@example.com"
|
||||||
|
})
|
||||||
|
|> Ash.create()
|
||||||
|
|
||||||
|
%{
|
||||||
|
member1: member1,
|
||||||
|
member2: member2
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
test "shows multiple members correctly", %{conn: conn, member1: m1, member2: m2} do
|
||||||
|
conn = conn_with_oidc_user(conn)
|
||||||
|
{:ok, _view, html} = live(conn, "/members")
|
||||||
|
|
||||||
|
for m <- [m1, m2], field <- [m.first_name, m.last_name, m.email] do
|
||||||
|
assert html =~ field
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "respects show_in_overview config", %{conn: conn, member1: m} do
|
||||||
|
{:ok, settings} = Mv.Membership.get_settings()
|
||||||
|
fields_to_hide = [:street, :house_number]
|
||||||
|
|
||||||
|
{:ok, _} =
|
||||||
|
Mv.Membership.update_settings(settings, %{
|
||||||
|
member_field_visibility: Map.new(fields_to_hide, &{&1, false})
|
||||||
|
})
|
||||||
|
|
||||||
|
conn = conn_with_oidc_user(conn)
|
||||||
|
{:ok, _view, html} = live(conn, "/members")
|
||||||
|
|
||||||
|
assert html =~ "Email"
|
||||||
|
assert html =~ m.email
|
||||||
|
refute html =~ m.street
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_field_label(:street), do: "Street"
|
||||||
|
defp get_field_label(:house_number), do: "House Number"
|
||||||
|
defp get_field_label(:postal_code), do: "Postal Code"
|
||||||
|
defp get_field_label(:city), do: "City"
|
||||||
|
defp get_field_label(:phone_number), do: "Phone Number"
|
||||||
|
defp get_field_label(:join_date), do: "Join Date"
|
||||||
|
defp get_field_label(:email), do: "Email"
|
||||||
|
defp get_field_label(:first_name), do: "First name"
|
||||||
|
defp get_field_label(:last_name), do: "Last name"
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue