feat(member): deactivate and reactivate members via an exit-date dialog
This commit is contained in:
parent
bcab2e21c4
commit
3dc3a2b8ef
6 changed files with 1735 additions and 1326 deletions
108
test/mv_web/live/member_live/deactivate_test.exs
Normal file
108
test/mv_web/live/member_live/deactivate_test.exs
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
defmodule MvWeb.MemberLive.DeactivateTest do
|
||||
@moduledoc """
|
||||
Tests for the member deactivate/reactivate sub-flow on the member show page,
|
||||
driven through the parent LiveView (the DeactivateComponent is stateful).
|
||||
"""
|
||||
use MvWeb.ConnCase, async: true
|
||||
import Phoenix.LiveViewTest
|
||||
use Gettext, backend: MvWeb.Gettext
|
||||
|
||||
alias Mv.Fixtures
|
||||
|
||||
defp reload_member(member) do
|
||||
Ash.get!(Mv.Membership.Member, member.id, actor: Mv.Helpers.SystemActor.get_system_actor())
|
||||
end
|
||||
|
||||
describe "deactivate/reactivate control visibility (§1.6, §1.8)" do
|
||||
@tag role: :admin
|
||||
test "shows Deactivate and hides Reactivate when member has no exit_date", %{conn: conn} do
|
||||
member = Fixtures.member_fixture()
|
||||
|
||||
{:ok, view, _html} = live(conn, ~p"/members/#{member.id}")
|
||||
|
||||
assert has_element?(view, "[data-testid=member-deactivate]")
|
||||
refute has_element?(view, "[data-testid=member-reactivate]")
|
||||
end
|
||||
|
||||
@tag role: :admin
|
||||
test "shows Reactivate and hides Deactivate when member has an exit_date", %{conn: conn} do
|
||||
member = Fixtures.member_fixture(%{exit_date: Date.utc_today()})
|
||||
|
||||
{:ok, view, _html} = live(conn, ~p"/members/#{member.id}")
|
||||
|
||||
assert has_element?(view, "[data-testid=member-reactivate]")
|
||||
refute has_element?(view, "[data-testid=member-deactivate]")
|
||||
end
|
||||
|
||||
@tag role: :read_only
|
||||
test "hides the deactivate/reactivate control for a user without :update permission", %{
|
||||
conn: conn
|
||||
} do
|
||||
member = Fixtures.member_fixture()
|
||||
|
||||
{:ok, view, _html} = live(conn, ~p"/members/#{member.id}")
|
||||
|
||||
refute has_element?(view, "[data-testid=member-deactivate]")
|
||||
refute has_element?(view, "[data-testid=member-reactivate]")
|
||||
end
|
||||
end
|
||||
|
||||
describe "deactivate modal (§1.3)" do
|
||||
@tag role: :admin
|
||||
test "opening the deactivate modal prefills the date input with today", %{conn: conn} do
|
||||
member = Fixtures.member_fixture()
|
||||
|
||||
{:ok, view, _html} = live(conn, ~p"/members/#{member.id}")
|
||||
|
||||
view
|
||||
|> element("[data-testid=member-deactivate]")
|
||||
|> render_click()
|
||||
|
||||
assert has_element?(
|
||||
view,
|
||||
~s(#deactivate-exit-date[value="#{Date.to_iso8601(Date.utc_today())}"])
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
describe "submitting the deactivate modal (§1.2)" do
|
||||
@tag role: :admin
|
||||
test "submitting the deactivate modal with a future date sets exit_date", %{conn: conn} do
|
||||
member = Fixtures.member_fixture(%{join_date: Date.utc_today()})
|
||||
future_date = Date.add(Date.utc_today(), 30)
|
||||
|
||||
{:ok, view, _html} = live(conn, ~p"/members/#{member.id}")
|
||||
|
||||
view
|
||||
|> element("[data-testid=member-deactivate]")
|
||||
|> render_click()
|
||||
|
||||
view
|
||||
|> element("#deactivate-member-modal form")
|
||||
|> render_submit(%{"exit_date" => Date.to_iso8601(future_date)})
|
||||
|
||||
assert reload_member(member).exit_date == future_date
|
||||
|
||||
# UI flips to offering Reactivate
|
||||
assert has_element?(view, "[data-testid=member-reactivate]")
|
||||
end
|
||||
end
|
||||
|
||||
describe "reactivate (§1.7)" do
|
||||
@tag role: :admin
|
||||
test "reactivating a member clears exit_date", %{conn: conn} do
|
||||
member = Fixtures.member_fixture(%{exit_date: Date.utc_today()})
|
||||
|
||||
{:ok, view, _html} = live(conn, ~p"/members/#{member.id}")
|
||||
|
||||
view
|
||||
|> element("[data-testid=member-reactivate]")
|
||||
|> render_click()
|
||||
|
||||
assert reload_member(member).exit_date == nil
|
||||
|
||||
# UI flips back to offering Deactivate
|
||||
assert has_element?(view, "[data-testid=member-deactivate]")
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue