fix: normalize checkbox value and improve UI layout

- Normalize checkbox 'on' value to boolean true in settings
- Change Payment Data layout to flex-nowrap for horizontal display
- Replace membership fee type dropdown with display-only view
- Fix tests to use correct button selectors and switch to membership fees tab
This commit is contained in:
Moritz 2025-12-16 12:32:04 +01:00
parent 3f723a3c3a
commit 803d9a0a94
Signed by: moritz
GPG key ID: 1020A035E5DD0824
10 changed files with 262 additions and 91 deletions

View file

@ -12,7 +12,7 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
require Ash.Query
setup do
setup %{conn: conn} do
# Create admin user
{:ok, user} =
Mv.Accounts.User
@ -22,7 +22,7 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
})
|> Ash.create()
conn = log_in_user(build_conn(), user)
conn = conn_with_password_user(conn, user)
%{conn: conn, user: user}
end
@ -98,7 +98,14 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
status: :paid
})
{:ok, _view, html} = live(conn, "/members/#{member.id}")
{:ok, view, _html} = live(conn, "/members/#{member.id}")
# Switch to membership fees tab
view
|> element("button[phx-click='switch_tab'][phx-value-tab='membership_fees']")
|> render_click()
html = render(view)
# Should show interval, amount, status
assert html =~ "Yearly" || html =~ "Jährlich"
@ -107,8 +114,8 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
end
end
describe "membership fee type dropdown" do
test "shows only same-interval types", %{conn: conn} do
describe "membership fee type display" do
test "shows assigned membership fee type", %{conn: conn} do
yearly_type = create_fee_type(%{interval: :yearly, name: "Yearly Type"})
_monthly_type = create_fee_type(%{interval: :monthly, name: "Monthly Type"})
@ -116,27 +123,17 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
{:ok, _view, html} = live(conn, "/members/#{member.id}")
# Should show yearly type but not monthly
# Should show yearly type name
assert html =~ "Yearly Type"
refute html =~ "Monthly Type"
end
test "shows warning if different interval selected", %{conn: conn} do
yearly_type = create_fee_type(%{interval: :yearly, name: "Yearly Type"})
monthly_type = create_fee_type(%{interval: :monthly, name: "Monthly Type"})
test "shows no type message when no type assigned", %{conn: conn} do
member = create_member(%{})
member = create_member(%{membership_fee_type_id: yearly_type.id})
{:ok, _view, html} = live(conn, "/members/#{member.id}")
{:ok, view, _html} = live(conn, "/members/#{member.id}")
# Try to select monthly type (should show warning)
# Note: This test may need adjustment based on actual implementation
html =
view
|> form("form", %{"membership_fee_type_id" => monthly_type.id})
|> render_change()
assert html =~ "Warning" || html =~ "Warnung" || html =~ "not allowed"
# Should show message about no type assigned
assert html =~ "No membership fee type assigned" || html =~ "No type"
end
end
@ -149,9 +146,14 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
{:ok, view, _html} = live(conn, "/members/#{member.id}")
# Switch to membership fees tab
view
|> element("button[phx-click='switch_tab'][phx-value-tab='membership_fees']")
|> render_click()
# Mark as paid
view
|> element("button[phx-click='mark_as_paid'][phx-value-cycle-id='#{cycle.id}']")
|> element("button[phx-click='mark_cycle_status'][phx-value-cycle_id='#{cycle.id}'][phx-value-status='paid']")
|> render_click()
# Verify cycle is now paid
@ -167,9 +169,14 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
{:ok, view, _html} = live(conn, "/members/#{member.id}")
# Switch to membership fees tab
view
|> element("button[phx-click='switch_tab'][phx-value-tab='membership_fees']")
|> render_click()
# Mark as suspended
view
|> element("button[phx-click='mark_as_suspended'][phx-value-cycle-id='#{cycle.id}']")
|> element("button[phx-click='mark_cycle_status'][phx-value-cycle_id='#{cycle.id}'][phx-value-status='suspended']")
|> render_click()
# Verify cycle is now suspended
@ -185,9 +192,14 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
{:ok, view, _html} = live(conn, "/members/#{member.id}")
# Switch to membership fees tab
view
|> element("button[phx-click='switch_tab'][phx-value-tab='membership_fees']")
|> render_click()
# Mark as unpaid
view
|> element("button[phx-click='mark_as_unpaid'][phx-value-cycle-id='#{cycle.id}']")
|> element("button[phx-click='mark_cycle_status'][phx-value-cycle_id='#{cycle.id}'][phx-value-status='unpaid']")
|> render_click()
# Verify cycle is now unpaid