feat: add approval ui for join requests
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
50433e607f
commit
86d9242d83
22 changed files with 1624 additions and 12 deletions
|
|
@ -38,6 +38,7 @@ defmodule Mv.Membership.JoinRequestApprovalDomainTest do
|
|||
assert member_count() == count_before + 1
|
||||
|
||||
request_email = request.email
|
||||
|
||||
[member] =
|
||||
Member
|
||||
|> Ash.Query.filter(expr(^ref(:email) == ^request_email))
|
||||
|
|
@ -56,6 +57,7 @@ defmodule Mv.Membership.JoinRequestApprovalDomainTest do
|
|||
|
||||
# No User should exist with this email from the approval flow
|
||||
request_email = request.email
|
||||
|
||||
users_with_email =
|
||||
Mv.Accounts.User
|
||||
|> Ash.Query.filter(expr(^ref(:email) == ^request_email))
|
||||
|
|
@ -99,10 +101,12 @@ defmodule Mv.Membership.JoinRequestApprovalDomainTest do
|
|||
|
||||
test "approve when status is pending_confirmation returns error" do
|
||||
token = "pending-token-#{System.unique_integer([:positive])}"
|
||||
|
||||
attrs = %{
|
||||
email: "pending#{System.unique_integer([:positive])}@example.com",
|
||||
confirmation_token: token
|
||||
}
|
||||
|
||||
{:ok, request} = Membership.submit_join_request(attrs, actor: nil)
|
||||
assert request.status == :pending_confirmation
|
||||
|
||||
|
|
@ -120,6 +124,36 @@ defmodule Mv.Membership.JoinRequestApprovalDomainTest do
|
|||
end
|
||||
|
||||
describe "approve_join_request/2 – defaults" do
|
||||
setup do
|
||||
# Create a fee type and set it as the default in settings so SetDefaultMembershipFeeType
|
||||
# can assign it when a member is created from a join request (no fee type in form_data).
|
||||
actor = SystemActor.get_system_actor()
|
||||
|
||||
{:ok, fee_type} =
|
||||
Ash.create(
|
||||
Mv.MembershipFees.MembershipFeeType,
|
||||
%{
|
||||
name: "Default Test Fee Type #{System.unique_integer([:positive])}",
|
||||
amount: Decimal.new("50.00"),
|
||||
interval: :yearly
|
||||
},
|
||||
actor: actor,
|
||||
domain: Mv.MembershipFees
|
||||
)
|
||||
|
||||
{:ok, settings} = Membership.get_settings()
|
||||
|
||||
settings
|
||||
|> Ash.Changeset.for_update(
|
||||
:update_membership_fee_settings,
|
||||
%{default_membership_fee_type_id: fee_type.id},
|
||||
actor: actor
|
||||
)
|
||||
|> Ash.update!(actor: actor)
|
||||
|
||||
:ok
|
||||
end
|
||||
|
||||
test "created member has join_date and membership_fee_type when not in form_data" do
|
||||
request = Fixtures.submitted_join_request_fixture()
|
||||
user = Fixtures.user_with_role_fixture("normal_user")
|
||||
|
|
@ -127,6 +161,7 @@ defmodule Mv.Membership.JoinRequestApprovalDomainTest do
|
|||
assert {:ok, _} = Membership.approve_join_request(request.id, actor: user)
|
||||
|
||||
request_email = request.email
|
||||
|
||||
[member] =
|
||||
Member
|
||||
|> Ash.Query.filter(expr(^ref(:email) == ^request_email))
|
||||
|
|
|
|||
|
|
@ -59,12 +59,14 @@ defmodule Mv.Membership.JoinRequestApprovalPolicyTest do
|
|||
|
||||
test "read_only cannot approve", %{request: request} do
|
||||
user = Fixtures.user_with_role_fixture("read_only")
|
||||
|
||||
assert {:error, %Ash.Error.Forbidden{}} =
|
||||
Membership.approve_join_request(request.id, actor: user)
|
||||
end
|
||||
|
||||
test "own_data cannot approve", %{request: request} do
|
||||
user = Fixtures.user_with_role_fixture("own_data")
|
||||
|
||||
assert {:error, %Ash.Error.Forbidden{}} =
|
||||
Membership.approve_join_request(request.id, actor: user)
|
||||
end
|
||||
|
|
@ -97,12 +99,14 @@ defmodule Mv.Membership.JoinRequestApprovalPolicyTest do
|
|||
|
||||
test "read_only cannot reject", %{request: request} do
|
||||
user = Fixtures.user_with_role_fixture("read_only")
|
||||
|
||||
assert {:error, %Ash.Error.Forbidden{}} =
|
||||
Membership.reject_join_request(request.id, actor: user)
|
||||
end
|
||||
|
||||
test "own_data cannot reject", %{request: request} do
|
||||
user = Fixtures.user_with_role_fixture("own_data")
|
||||
|
||||
assert {:error, %Ash.Error.Forbidden{}} =
|
||||
Membership.reject_join_request(request.id, actor: user)
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue