From 0d078c6131ba27987e4e7af638d731afeaf03d13 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Wed, 19 Apr 2017 10:43:40 +1000 Subject: [PATCH] the message --- .../discourse_donations/charges_controller.rb | 3 +- app/services/discourse_donations/stripe.rb | 7 +++- .../discourse_donations/stripe_spec.rb | 42 +++++++++++++++++-- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/app/controllers/discourse_donations/charges_controller.rb b/app/controllers/discourse_donations/charges_controller.rb index 562c871..753844b 100644 --- a/app/controllers/discourse_donations/charges_controller.rb +++ b/app/controllers/discourse_donations/charges_controller.rb @@ -7,9 +7,10 @@ module DiscourseDonations skip_before_filter :verify_authenticity_token, only: [:create] def create - if email.nil? || email.empty? + if !email.nil? || email.empty? response = {} else + byebug payment = DiscourseDonations::Stripe.new(secret_key, stripe_options) response = payment.charge(email, params) end diff --git a/app/services/discourse_donations/stripe.rb b/app/services/discourse_donations/stripe.rb index 21d1448..3cf82bf 100644 --- a/app/services/discourse_donations/stripe.rb +++ b/app/services/discourse_donations/stripe.rb @@ -12,12 +12,17 @@ module DiscourseDonations email: email, source: opts[:stripeToken] ) - ::Stripe::Charge.create( + @charge = ::Stripe::Charge.create( customer: customer.id, amount: opts[:amount], description: @description, currency: @currency ) + @charge + end + + def successful? + @charge[:paid] end end end diff --git a/spec/services/discourse_donations/stripe_spec.rb b/spec/services/discourse_donations/stripe_spec.rb index b1277e1..32913b5 100644 --- a/spec/services/discourse_donations/stripe_spec.rb +++ b/spec/services/discourse_donations/stripe_spec.rb @@ -6,6 +6,7 @@ module DiscourseDonations before { SiteSetting.stubs(:discourse_donations_secret_key).returns('secret-key-yo') } let(:stripe_options) { { description: 'hi there', currency: 'AUD' } } + let(:params) { { email: email, stripeToken: 'stripe-token', amount: '1234', other: 'redundant param' } } let(:email) { 'ray-zintoast@example.com' } let(:customer) { stub(id: 1) } let!(:subject) { described_class.new('secret-key-yo', stripe_options) } @@ -15,18 +16,53 @@ module DiscourseDonations end it 'creates a customer and charges them an amount' do - options = { email: email, stripeToken: 'stripe-token', amount: '1234', other: 'redundant param' } ::Stripe::Customer.expects(:create).with( email: email, source: 'stripe-token' ).returns(customer) ::Stripe::Charge.expects(:create).with( customer: customer.id, - amount: options[:amount], + amount: params[:amount], description: stripe_options[:description], currency: stripe_options[:currency] ) - subject.charge(email, options) + subject.charge(email, params) + end + + it 'has a message' do + ::Stripe::Charge.expects(:create).with( + customer: customer.id, + amount: params[:amount], + description: stripe_options[:description], + currency: stripe_options[:currency] + ).returns( + { + paid: true, + outcome: { seller_message: 'yay!' } + } + ) + subject.charge(email, params) + expect(subject.message).to eq 'yay!' + end + + describe '.successful?' do + let(:charge_options) { { customer: customer.id, amount: params[:amount], description: stripe_options[:description], currency: stripe_options[:currency] } } + + before do + ::Stripe::Customer.expects(:create).with(email: email, source: 'stripe-token').returns(customer) + end + + it 'is successful' do + ::Stripe::Charge.expects(:create).with(charge_options).returns({paid: true}) + subject.charge(email, params) + expect(subject).to be_successful + end + + it 'is not successful' do + ::Stripe::Charge.expects(:create).with(charge_options).returns({paid: false}) + subject.charge(email, params) + expect(subject).not_to be_successful + end end end end