format currency and user
This commit is contained in:
parent
5c33268477
commit
9631ddc7e5
|
@ -30,10 +30,12 @@ module DiscoursePatrons
|
||||||
)
|
)
|
||||||
|
|
||||||
Payment.create(
|
Payment.create(
|
||||||
|
user_id: user_id,
|
||||||
payment_intent_id: response[:id],
|
payment_intent_id: response[:id],
|
||||||
receipt_email: response[:receipt_email],
|
receipt_email: response[:receipt_email],
|
||||||
url: response[:charges][:url],
|
url: response[:charges][:url],
|
||||||
amount: response[:amount]
|
amount: response[:amount],
|
||||||
|
currency: response[:currency]
|
||||||
)
|
)
|
||||||
|
|
||||||
rescue ::Stripe::InvalidRequestError => e
|
rescue ::Stripe::InvalidRequestError => e
|
||||||
|
@ -50,5 +52,11 @@ module DiscoursePatrons
|
||||||
def param_currency_to_number
|
def param_currency_to_number
|
||||||
params[:amount].to_s.sub('.', '').to_i
|
params[:amount].to_s.sub('.', '').to_i
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def user_id
|
||||||
|
if current_user
|
||||||
|
current_user.id
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,30 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class PaymentSerializer < ApplicationSerializer
|
class PaymentSerializer < ApplicationSerializer
|
||||||
attributes :payment_intent_id, :receipt_email, :url, :created_at_age, :amount
|
attributes :payment_intent_id, :receipt_email, :url, :created_at_age, :amount, :amount_currency
|
||||||
|
|
||||||
def created_at_age
|
def created_at_age
|
||||||
Time.now - object.created_at
|
Time.now - object.created_at
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def amount_currency
|
||||||
|
ActiveSupport::NumberHelper.number_to_currency(
|
||||||
|
object.amount/100,
|
||||||
|
precision: 2,
|
||||||
|
unit: currency_unit
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def currency_unit
|
||||||
|
case object.currency
|
||||||
|
when "eur"
|
||||||
|
"€"
|
||||||
|
when "gbp"
|
||||||
|
"£"
|
||||||
|
else
|
||||||
|
"$"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<td>{{{stripe-payment-link payment}}}</td>
|
<td>{{{stripe-payment-link payment}}}</td>
|
||||||
<td>{{payment.receipt_email}}</td>
|
<td>{{payment.receipt_email}}</td>
|
||||||
<td>{{{format-duration payment.created_at_age}}}</td>
|
<td>{{{format-duration payment.created_at_age}}}</td>
|
||||||
<td class="amount">{{payment.amount}}</td>
|
<td class="amount">{{payment.amount_currency}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -5,6 +5,7 @@ class CreatePaymentsTable < ActiveRecord::Migration[5.2]
|
||||||
create_table :payments do |t|
|
create_table :payments do |t|
|
||||||
t.string :payment_intent_id, null: false
|
t.string :payment_intent_id, null: false
|
||||||
t.string :receipt_email, null: false
|
t.string :receipt_email, null: false
|
||||||
|
t.string :currency, null: false
|
||||||
t.string :url, null: false
|
t.string :url, null: false
|
||||||
t.integer :amount, null: false
|
t.integer :amount, null: false
|
||||||
t.references :user, foreign_key: true
|
t.references :user, foreign_key: true
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
module DiscoursePatrons
|
||||||
|
RSpec.describe AdminController, type: :controller do
|
||||||
|
routes { DiscoursePatrons::Engine.routes }
|
||||||
|
|
||||||
|
it 'is a subclass of AdminController' do
|
||||||
|
expect(DiscoursePatrons::AdminController < Admin::AdminController).to eq(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
# TODO authenticate
|
||||||
|
it 'has payments'
|
||||||
|
end
|
||||||
|
end
|
|
@ -33,13 +33,15 @@ module DiscoursePatrons
|
||||||
id: 'xyz-1234',
|
id: 'xyz-1234',
|
||||||
charges: { url: '/v1/charges?payment_intent=xyz-1234' },
|
charges: { url: '/v1/charges?payment_intent=xyz-1234' },
|
||||||
amount: 9000,
|
amount: 9000,
|
||||||
receipt_email: 'hello@example.com'
|
receipt_email: 'hello@example.com',
|
||||||
|
currency: 'aud'
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
SiteSetting.stubs(:discourse_patrons_currency).returns('AUD')
|
SiteSetting.stubs(:discourse_patrons_currency).returns('AUD')
|
||||||
SiteSetting.stubs(:discourse_patrons_secret_key).returns('xyz-678')
|
SiteSetting.stubs(:discourse_patrons_secret_key).returns('xyz-678')
|
||||||
|
controller.stubs(:current_user).returns(Fabricate(:user))
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'responds ok' do
|
it 'responds ok' do
|
||||||
|
@ -56,6 +58,13 @@ module DiscoursePatrons
|
||||||
}.to change { Payment.count }
|
}.to change { Payment.count }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'has no user' do
|
||||||
|
controller.stubs(:current_user).returns(nil)
|
||||||
|
::Stripe::PaymentIntent.expects(:create).returns(payment)
|
||||||
|
post :create, format: :json
|
||||||
|
expect(response).to have_http_status(200)
|
||||||
|
end
|
||||||
|
|
||||||
it 'has the correct amount' do
|
it 'has the correct amount' do
|
||||||
::Stripe::PaymentIntent.expects(:create).with(has_entry(:amount, 2000)).returns(payment)
|
::Stripe::PaymentIntent.expects(:create).with(has_entry(:amount, 2000)).returns(payment)
|
||||||
post :create, params: { amount: '20.00' }, format: :json
|
post :create, params: { amount: '20.00' }, format: :json
|
||||||
|
|
Loading…
Reference in New Issue