Fee settings and fee type form: pass actor for MembershipFeeType read
- membership_fee_settings_live: current_actor(socket), Ash.read! with actor - membership_fee_type_live/form: Ash.get! with actor in mount - check_page_permission_test: normal_user /groups/new and /groups/:slug/edit allowed - membership_fee_type_live form_test: actor for Ash.read_one!/get!
This commit is contained in:
parent
e3bea17827
commit
101fd39f18
4 changed files with 39 additions and 27 deletions
|
|
@ -8,17 +8,20 @@ defmodule MvWeb.MembershipFeeSettingsLive do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
|
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
alias Mv.MembershipFees.MembershipFeeType
|
alias Mv.MembershipFees.MembershipFeeType
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket) do
|
def mount(_params, _session, socket) do
|
||||||
|
actor = current_actor(socket)
|
||||||
{:ok, settings} = Membership.get_settings()
|
{:ok, settings} = Membership.get_settings()
|
||||||
|
|
||||||
membership_fee_types =
|
membership_fee_types =
|
||||||
MembershipFeeType
|
MembershipFeeType
|
||||||
|> Ash.Query.sort(name: :asc)
|
|> Ash.Query.sort(name: :asc)
|
||||||
|> Ash.read!()
|
|> Ash.read!(domain: Mv.MembershipFees, actor: actor)
|
||||||
|
|
||||||
{:ok,
|
{:ok,
|
||||||
socket
|
socket
|
||||||
|
|
|
||||||
|
|
@ -200,10 +200,12 @@ defmodule MvWeb.MembershipFeeTypeLive.Form do
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(params, _session, socket) do
|
def mount(params, _session, socket) do
|
||||||
|
actor = current_actor(socket)
|
||||||
|
|
||||||
membership_fee_type =
|
membership_fee_type =
|
||||||
case params["id"] do
|
case params["id"] do
|
||||||
nil -> nil
|
nil -> nil
|
||||||
id -> Ash.get!(MembershipFeeType, id, domain: MembershipFees)
|
id -> Ash.get!(MembershipFeeType, id, domain: MembershipFees, actor: actor)
|
||||||
end
|
end
|
||||||
|
|
||||||
page_title =
|
page_title =
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "create form" do
|
describe "create form" do
|
||||||
test "creates new membership fee type", %{conn: conn} do
|
test "creates new membership fee type", %{conn: conn, user: user} do
|
||||||
{:ok, view, _html} = live(conn, "/membership_fee_types/new")
|
{:ok, view, _html} = live(conn, "/membership_fee_types/new")
|
||||||
|
|
||||||
form_data = %{
|
form_data = %{
|
||||||
|
|
@ -67,12 +67,13 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
|
||||||
|
|
||||||
assert to == "/membership_fee_types"
|
assert to == "/membership_fee_types"
|
||||||
|
|
||||||
# Verify type was created
|
# Verify type was created (use actor so read is authorized)
|
||||||
type =
|
type =
|
||||||
MembershipFeeType
|
MembershipFeeType
|
||||||
|> Ash.Query.filter(name == "New Type")
|
|> Ash.Query.filter(name == "New Type")
|
||||||
|> Ash.read_one!()
|
|> Ash.read_one!(domain: Mv.MembershipFees, actor: user)
|
||||||
|
|
||||||
|
assert type != nil, "Expected membership fee type to be created"
|
||||||
assert type.amount == Decimal.new("75.00")
|
assert type.amount == Decimal.new("75.00")
|
||||||
assert type.interval == :yearly
|
assert type.interval == :yearly
|
||||||
end
|
end
|
||||||
|
|
@ -140,7 +141,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
|
||||||
assert html =~ "3" || html =~ "members" || html =~ "Mitglieder"
|
assert html =~ "3" || html =~ "members" || html =~ "Mitglieder"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "amount change can be confirmed", %{conn: conn} do
|
test "amount change can be confirmed", %{conn: conn, user: user} do
|
||||||
fee_type = create_fee_type(%{amount: Decimal.new("50.00")})
|
fee_type = create_fee_type(%{amount: Decimal.new("50.00")})
|
||||||
|
|
||||||
{:ok, view, _html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
|
{:ok, view, _html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
|
||||||
|
|
@ -159,12 +160,17 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
|
||||||
|> form("#membership-fee-type-form", %{"membership_fee_type[amount]" => "75.00"})
|
|> form("#membership-fee-type-form", %{"membership_fee_type[amount]" => "75.00"})
|
||||||
|> render_submit()
|
|> render_submit()
|
||||||
|
|
||||||
# Amount should be updated
|
# Amount should be updated (use actor so read is authorized)
|
||||||
updated_type = Ash.read_one!(MembershipFeeType |> Ash.Query.filter(id == ^fee_type.id))
|
updated_type =
|
||||||
|
MembershipFeeType
|
||||||
|
|> Ash.Query.filter(id == ^fee_type.id)
|
||||||
|
|> Ash.read_one!(domain: Mv.MembershipFees, actor: user)
|
||||||
|
|
||||||
|
assert updated_type != nil
|
||||||
assert updated_type.amount == Decimal.new("75.00")
|
assert updated_type.amount == Decimal.new("75.00")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "amount change can be cancelled", %{conn: conn} do
|
test "amount change can be cancelled", %{conn: conn, user: user} do
|
||||||
fee_type = create_fee_type(%{amount: Decimal.new("50.00")})
|
fee_type = create_fee_type(%{amount: Decimal.new("50.00")})
|
||||||
|
|
||||||
{:ok, view, _html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
|
{:ok, view, _html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
|
||||||
|
|
@ -178,8 +184,13 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
|
||||||
|> element("button[phx-click='cancel_amount_change']")
|
|> element("button[phx-click='cancel_amount_change']")
|
||||||
|> render_click()
|
|> render_click()
|
||||||
|
|
||||||
# Amount should remain unchanged
|
# Amount should remain unchanged (use actor so read is authorized)
|
||||||
updated_type = Ash.read_one!(MembershipFeeType |> Ash.Query.filter(id == ^fee_type.id))
|
updated_type =
|
||||||
|
MembershipFeeType
|
||||||
|
|> Ash.Query.filter(id == ^fee_type.id)
|
||||||
|
|> Ash.read_one!(domain: Mv.MembershipFees, actor: user)
|
||||||
|
|
||||||
|
assert updated_type != nil
|
||||||
assert updated_type.amount == Decimal.new("50.00")
|
assert updated_type.amount == Decimal.new("50.00")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -742,6 +742,18 @@ defmodule MvWeb.Plugs.CheckPagePermissionTest do
|
||||||
assert conn.status == 200
|
assert conn.status == 200
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@tag role: :normal_user
|
||||||
|
test "GET /groups/new returns 200", %{conn: conn} do
|
||||||
|
conn = get(conn, "/groups/new")
|
||||||
|
assert conn.status == 200
|
||||||
|
end
|
||||||
|
|
||||||
|
@tag role: :normal_user
|
||||||
|
test "GET /groups/:slug/edit returns 200", %{conn: conn, group_slug: slug} do
|
||||||
|
conn = get(conn, "/groups/#{slug}/edit")
|
||||||
|
assert conn.status == 200
|
||||||
|
end
|
||||||
|
|
||||||
@tag role: :normal_user
|
@tag role: :normal_user
|
||||||
test "GET /members/:id/show/edit returns 200", %{conn: conn, member_id: id} do
|
test "GET /members/:id/show/edit returns 200", %{conn: conn, member_id: id} do
|
||||||
conn = get(conn, "/members/#{id}/show/edit")
|
conn = get(conn, "/members/#{id}/show/edit")
|
||||||
|
|
@ -830,22 +842,6 @@ defmodule MvWeb.Plugs.CheckPagePermissionTest do
|
||||||
assert redirected_to(conn) == "/users/#{user.id}"
|
assert redirected_to(conn) == "/users/#{user.id}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@tag role: :normal_user
|
|
||||||
test "GET /groups/new redirects to user profile", %{conn: conn, current_user: user} do
|
|
||||||
conn = get(conn, "/groups/new")
|
|
||||||
assert redirected_to(conn) == "/users/#{user.id}"
|
|
||||||
end
|
|
||||||
|
|
||||||
@tag role: :normal_user
|
|
||||||
test "GET /groups/:slug/edit redirects to user profile", %{
|
|
||||||
conn: conn,
|
|
||||||
current_user: user,
|
|
||||||
group_slug: slug
|
|
||||||
} do
|
|
||||||
conn = get(conn, "/groups/#{slug}/edit")
|
|
||||||
assert redirected_to(conn) == "/users/#{user.id}"
|
|
||||||
end
|
|
||||||
|
|
||||||
@tag role: :normal_user
|
@tag role: :normal_user
|
||||||
test "GET /admin/roles redirects to user profile", %{conn: conn, current_user: user} do
|
test "GET /admin/roles redirects to user profile", %{conn: conn, current_user: user} do
|
||||||
conn = get(conn, "/admin/roles")
|
conn = get(conn, "/admin/roles")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue