Membership Fee 6 - UI Components & LiveViews closes #280 #304
4 changed files with 34 additions and 37 deletions
|
|
@ -117,13 +117,13 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
|
||||||
{:ok, view, _html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
|
{:ok, view, _html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
|
||||||
|
|
||||||
# Change amount
|
# Change amount
|
||||||
html =
|
|
||||||
view
|
view
|
||||||
|> form("#membership-fee-type-form", %{"membership_fee_type[amount]" => "75.00"})
|
|> form("#membership-fee-type-form", %{"membership_fee_type[amount]" => "75.00"})
|
||||||
|> render_change()
|
|> render_change()
|
||||||
|
|
||||||
# Should show warning
|
# Should show warning in rendered view
|
||||||
assert html =~ "Warning" || html =~ "Warnung" || html =~ "affected"
|
html = render(view)
|
||||||
|
assert html =~ "affect" || html =~ "Change Amount"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "amount change warning shows correct affected member count", %{conn: conn} do
|
test "amount change warning shows correct affected member count", %{conn: conn} do
|
||||||
|
|
|
||||||
|
|
@ -133,9 +133,8 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
|
||||||
|> render_click()
|
|> render_click()
|
||||||
|
|
||||||
# Type should be deleted
|
# Type should be deleted
|
||||||
assert_raise Ash.Error.Query.NotFound, fn ->
|
assert {:error, %Ash.Error.Invalid{errors: [%Ash.Error.Query.NotFound{}]}} =
|
||||||
Ash.read_one!(MembershipFeeType |> Ash.Query.filter(id == ^fee_type.id))
|
Ash.get(MembershipFeeType, fee_type.id, domain: Mv.MembershipFees)
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -93,15 +93,13 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
||||||
|
|
||||||
member = create_member(%{membership_fee_type_id: yearly_type.id})
|
member = create_member(%{membership_fee_type_id: yearly_type.id})
|
||||||
|
|
||||||
{:ok, view, _html} = live(conn, "/members/#{member.id}/edit")
|
{:ok, _view, html} = live(conn, "/members/#{member.id}/edit")
|
||||||
|
|
||||||
# Try to select monthly type (should show warning)
|
# Monthly type should not be in the dropdown (filtered by interval)
|
||||||
html =
|
refute html =~ monthly_type.id
|
||||||
view
|
|
||||||
|> form("form", %{"member[membership_fee_type_id]" => monthly_type.id})
|
|
||||||
|> render_change()
|
|
||||||
|
|
||||||
assert html =~ "Warning" || html =~ "Warnung" || html =~ "not allowed"
|
# Only yearly types should be available
|
||||||
|
assert html =~ yearly_type.id
|
||||||
end
|
end
|
||||||
|
|
||||||
test "warning cleared if same interval selected", %{conn: conn} do
|
test "warning cleared if same interval selected", %{conn: conn} do
|
||||||
|
|
@ -115,7 +113,7 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
||||||
# Select another yearly type (should not show warning)
|
# Select another yearly type (should not show warning)
|
||||||
html =
|
html =
|
||||||
view
|
view
|
||||||
|> form("form", %{"member[membership_fee_type_id]" => yearly_type2.id})
|
|> form("#member-form", %{"member[membership_fee_type_id]" => yearly_type2.id})
|
||||||
|> render_change()
|
|> render_change()
|
||||||
|
|
||||||
refute html =~ "Warning" || html =~ "Warnung"
|
refute html =~ "Warning" || html =~ "Warnung"
|
||||||
|
|
@ -135,7 +133,7 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
||||||
|
|
||||||
{:error, {:live_redirect, %{to: _to}}} =
|
{:error, {:live_redirect, %{to: _to}}} =
|
||||||
view
|
view
|
||||||
|> form("form", form_data)
|
|> form("#member-form", form_data)
|
||||||
|> render_submit()
|
|> render_submit()
|
||||||
|
|
||||||
# Verify member was created with fee type
|
# Verify member was created with fee type
|
||||||
|
|
@ -151,7 +149,9 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
||||||
# Set default fee type in settings
|
# Set default fee type in settings
|
||||||
fee_type = create_fee_type(%{interval: :yearly})
|
fee_type = create_fee_type(%{interval: :yearly})
|
||||||
|
|
||||||
Mv.Membership.Setting
|
{:ok, settings} = Mv.Membership.get_settings()
|
||||||
|
|
||||||
|
settings
|
||||||
|> Ash.Changeset.for_update(:update_membership_fee_settings, %{
|
|> Ash.Changeset.for_update(:update_membership_fee_settings, %{
|
||||||
default_membership_fee_type_id: fee_type.id
|
default_membership_fee_type_id: fee_type.id
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -118,9 +118,9 @@ defmodule MvWeb.MemberLive.IndexMembershipFeeStatusTest do
|
||||||
|
|
||||||
{:ok, view, _html} = live(conn, "/members")
|
{:ok, view, _html} = live(conn, "/members")
|
||||||
|
|
||||||
# Toggle to current cycle
|
# Toggle to current cycle (use the button in the header, not the one in the column)
|
||||||
view
|
view
|
||||||
|> element("button[phx-click='toggle_current_cycle']")
|
|> element("button[phx-click='toggle_cycle_view'].btn-sm")
|
||||||
|> render_click()
|
|> render_click()
|
||||||
|
|
||||||
html = render(view)
|
html = render(view)
|
||||||
|
|
@ -179,11 +179,11 @@ defmodule MvWeb.MemberLive.IndexMembershipFeeStatusTest do
|
||||||
fee_type = create_fee_type(%{interval: :yearly})
|
fee_type = create_fee_type(%{interval: :yearly})
|
||||||
|
|
||||||
# Member with unpaid last cycle
|
# Member with unpaid last cycle
|
||||||
member1 = create_member(%{membership_fee_type_id: fee_type.id})
|
member1 = create_member(%{first_name: "UnpaidMember", membership_fee_type_id: fee_type.id})
|
||||||
create_cycle(member1, fee_type, %{cycle_start: ~D[2023-01-01], status: :unpaid})
|
create_cycle(member1, fee_type, %{cycle_start: ~D[2023-01-01], status: :unpaid})
|
||||||
|
|
||||||
# Member with paid last cycle
|
# Member with paid last cycle
|
||||||
member2 = create_member(%{membership_fee_type_id: fee_type.id})
|
member2 = create_member(%{first_name: "PaidMember", membership_fee_type_id: fee_type.id})
|
||||||
create_cycle(member2, fee_type, %{cycle_start: ~D[2023-01-01], status: :paid})
|
create_cycle(member2, fee_type, %{cycle_start: ~D[2023-01-01], status: :paid})
|
||||||
|
|
||||||
# Verify cycles exist in database
|
# Verify cycles exist in database
|
||||||
|
|
@ -197,14 +197,13 @@ defmodule MvWeb.MemberLive.IndexMembershipFeeStatusTest do
|
||||||
|> Ash.Query.filter(member_id == ^member2.id)
|
|> Ash.Query.filter(member_id == ^member2.id)
|
||||||
|> Ash.read!()
|
|> Ash.read!()
|
||||||
|
|
||||||
assert length(cycles1) > 0
|
refute Enum.empty?(cycles1)
|
||||||
assert length(cycles2) > 0
|
refute Enum.empty?(cycles2)
|
||||||
|
|
||||||
{:ok, view, _html} = live(conn, "/members?membership_fee_filter=unpaid_last")
|
{:ok, _view, html} = live(conn, "/members?membership_fee_filter=unpaid_last")
|
||||||
|
|
||||||
html = render(view)
|
assert html =~ "UnpaidMember"
|
||||||
assert html =~ member1.first_name
|
refute html =~ "PaidMember"
|
||||||
refute html =~ member2.first_name
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "filter unpaid in current cycle works", %{conn: conn} do
|
test "filter unpaid in current cycle works", %{conn: conn} do
|
||||||
|
|
@ -214,11 +213,11 @@ defmodule MvWeb.MemberLive.IndexMembershipFeeStatusTest do
|
||||||
current_year_start = %{today | month: 1, day: 1}
|
current_year_start = %{today | month: 1, day: 1}
|
||||||
|
|
||||||
# Member with unpaid current cycle
|
# Member with unpaid current cycle
|
||||||
member1 = create_member(%{membership_fee_type_id: fee_type.id})
|
member1 = create_member(%{first_name: "UnpaidCurrent", membership_fee_type_id: fee_type.id})
|
||||||
create_cycle(member1, fee_type, %{cycle_start: current_year_start, status: :unpaid})
|
create_cycle(member1, fee_type, %{cycle_start: current_year_start, status: :unpaid})
|
||||||
|
|
||||||
# Member with paid current cycle
|
# Member with paid current cycle
|
||||||
member2 = create_member(%{membership_fee_type_id: fee_type.id})
|
member2 = create_member(%{first_name: "PaidCurrent", membership_fee_type_id: fee_type.id})
|
||||||
create_cycle(member2, fee_type, %{cycle_start: current_year_start, status: :paid})
|
create_cycle(member2, fee_type, %{cycle_start: current_year_start, status: :paid})
|
||||||
|
|
||||||
# Verify cycles exist in database
|
# Verify cycles exist in database
|
||||||
|
|
@ -232,14 +231,13 @@ defmodule MvWeb.MemberLive.IndexMembershipFeeStatusTest do
|
||||||
|> Ash.Query.filter(member_id == ^member2.id)
|
|> Ash.Query.filter(member_id == ^member2.id)
|
||||||
|> Ash.read!()
|
|> Ash.read!()
|
||||||
|
|
||||||
assert length(cycles1) > 0
|
refute Enum.empty?(cycles1)
|
||||||
assert length(cycles2) > 0
|
refute Enum.empty?(cycles2)
|
||||||
|
|
||||||
{:ok, view, _html} = live(conn, "/members?membership_fee_filter=unpaid_current")
|
{:ok, _view, html} = live(conn, "/members?membership_fee_filter=unpaid_current")
|
||||||
|
|
||||||
html = render(view)
|
assert html =~ "UnpaidCurrent"
|
||||||
assert html =~ member1.first_name
|
refute html =~ "PaidCurrent"
|
||||||
refute html =~ member2.first_name
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue