Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions lib/algora/bounties/bounties.ex
Original file line number Diff line number Diff line change
Expand Up @@ -736,9 +736,7 @@ defmodule Algora.Bounties do
group_id: tx_group_id
}),
{:ok, session} <-
line_items
|> Enum.map(&LineItem.to_stripe/1)
|> Payments.create_stripe_session(%{
Payments.create_stripe_session(owner, Enum.map(line_items, &LineItem.to_stripe/1), %{
description: description,
metadata: %{"version" => Payments.metadata_version(), "group_id" => tx_group_id}
}) do
Expand Down
24 changes: 14 additions & 10 deletions lib/algora/payments/payments.ex
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,24 @@ defmodule Algora.Payments do
end

@spec create_stripe_session(
user :: User.t(),
line_items :: [PSP.Session.line_item_data()],
payment_intent_data :: PSP.Session.payment_intent_data()
) ::
{:ok, PSP.session()} | {:error, PSP.error()}
def create_stripe_session(line_items, payment_intent_data) do
PSP.Session.create(%{
mode: "payment",
billing_address_collection: "required",
line_items: line_items,
invoice_creation: %{enabled: true},
success_url: "#{AlgoraWeb.Endpoint.url()}/payment/success",
cancel_url: "#{AlgoraWeb.Endpoint.url()}/payment/canceled",
payment_intent_data: payment_intent_data
})
def create_stripe_session(user, line_items, payment_intent_data) do
with {:ok, customer} <- fetch_or_create_customer(user) do
PSP.Session.create(%{
mode: "payment",
customer: customer.provider_id,
billing_address_collection: "required",
line_items: line_items,
invoice_creation: %{enabled: true},
success_url: "#{AlgoraWeb.Endpoint.url()}/payment/success",
cancel_url: "#{AlgoraWeb.Endpoint.url()}/payment/canceled",
payment_intent_data: payment_intent_data
})
end
end

def get_transaction_fee_pct, do: Decimal.new("0.04")
Expand Down
9 changes: 8 additions & 1 deletion test/support/factory.ex
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,14 @@ defmodule Algora.Factory do
end

# Convenience API
def insert!(factory_name, attributes \\ []) do
def insert!(factory_name, attributes \\ [])

def insert!(factory_name, attributes) when factory_name in [:user, :organization] do
user = insert(:user, attributes)
%{user | name: user.display_name || user.handle}
end

def insert!(factory_name, attributes) do
insert(factory_name, attributes)
end

Expand Down
7 changes: 7 additions & 0 deletions test/support/stripe_mock.ex
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,11 @@ defmodule Algora.Support.StripeMock do
}}
end
end

defmodule Customer do
@moduledoc false
def create(_params) do
{:ok, %Stripe.Customer{id: "cus_#{Algora.Util.random_int()}"}}
end
end
end