From 92e5bf76d70dcc14a0c1429beb0e426594979e49 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Mon, 20 Mar 2017 12:08:30 +1100 Subject: [PATCH] add anon payments --- .../discourse_donations/charges_controller.rb | 2 +- .../discourse/components/stripe-card.js.es6 | 4 +- .../discourse-payments-route-map.js.es6 | 2 +- .../templates/components/stripe-card.hbs | 15 +- .../connectors/extra-nav-item/donate.hbs | 8 +- assets/javascripts/discourse/templates/dd.hbs | 2 + .../discourse/templates/stripe.hbs | 1 - config/routes.rb | 2 +- .../charges_controller_spec.rb | 9 +- spec/support/dd_helper.rb | 136 ++++++++++++++++++ 10 files changed, 168 insertions(+), 13 deletions(-) create mode 100644 assets/javascripts/discourse/templates/dd.hbs delete mode 100644 assets/javascripts/discourse/templates/stripe.hbs create mode 100644 spec/support/dd_helper.rb diff --git a/app/controllers/discourse_donations/charges_controller.rb b/app/controllers/discourse_donations/charges_controller.rb index 9fcac4f..c45122c 100644 --- a/app/controllers/discourse_donations/charges_controller.rb +++ b/app/controllers/discourse_donations/charges_controller.rb @@ -11,7 +11,7 @@ module DiscourseDonations currency = SiteSetting.discourse_donations_currency customer = Stripe::Customer.create( - :email => current_user.email, + :email => params[:email] || current_user.email, :source => params[:stripeToken] ) diff --git a/assets/javascripts/discourse/components/stripe-card.js.es6 b/assets/javascripts/discourse/components/stripe-card.js.es6 index 8dc32cc..82a63f1 100644 --- a/assets/javascripts/discourse/components/stripe-card.js.es6 +++ b/assets/javascripts/discourse/components/stripe-card.js.es6 @@ -18,6 +18,7 @@ export default Ember.Component.extend({ init() { this._super(); + this.set('anon', (Discourse.User.current() == null)); this.set('settings', getRegister(this).lookup('site-settings:main')); this.set('stripe', Stripe(this.get('settings').discourse_donations_public_key)); }, @@ -51,7 +52,8 @@ export default Ember.Component.extend({ let params = { stripeToken: data.token.id, - amount: self.get('amount') * 100 + amount: self.get('amount') * 100, + email: self.get('email') }; ajax('/charges', { data: params, method: 'post' }).then(data => { diff --git a/assets/javascripts/discourse/discourse-payments-route-map.js.es6 b/assets/javascripts/discourse/discourse-payments-route-map.js.es6 index 85513dd..690c16e 100644 --- a/assets/javascripts/discourse/discourse-payments-route-map.js.es6 +++ b/assets/javascripts/discourse/discourse-payments-route-map.js.es6 @@ -6,5 +6,5 @@ export default { }; export default function() { - this.route('stripe'); + this.route('dd'); }; diff --git a/assets/javascripts/discourse/templates/components/stripe-card.hbs b/assets/javascripts/discourse/templates/components/stripe-card.hbs index fdfa2cb..73b7471 100644 --- a/assets/javascripts/discourse/templates/components/stripe-card.hbs +++ b/assets/javascripts/discourse/templates/components/stripe-card.hbs @@ -15,6 +15,15 @@
+ {{#if anon}} +
+ +
+ {{text-field value=email}} +
+
+ {{/if}} +
{{#d-button action="submitStripeCard" disabled=transactionInProgress class="btn btn-primary btn-payment"}} @@ -32,6 +41,10 @@
{{#if success}} - {{i18n 'discourse_donations.messages.success'}} +
+
+ {{i18n 'discourse_donations.messages.success'}} +
+
{{/if}} diff --git a/assets/javascripts/discourse/templates/connectors/extra-nav-item/donate.hbs b/assets/javascripts/discourse/templates/connectors/extra-nav-item/donate.hbs index e5e32c5..1d5e6d6 100644 --- a/assets/javascripts/discourse/templates/connectors/extra-nav-item/donate.hbs +++ b/assets/javascripts/discourse/templates/connectors/extra-nav-item/donate.hbs @@ -1,5 +1,3 @@ -{{#if currentUser.username}} - - {{i18n 'discourse_donations.nav_item'}} - -{{/if}} + + {{i18n 'discourse_donations.nav_item'}} + diff --git a/assets/javascripts/discourse/templates/dd.hbs b/assets/javascripts/discourse/templates/dd.hbs new file mode 100644 index 0000000..5287aa0 --- /dev/null +++ b/assets/javascripts/discourse/templates/dd.hbs @@ -0,0 +1,2 @@ +

{{i18n 'discourse_donations.title'}}

+{{stripe-card}} diff --git a/assets/javascripts/discourse/templates/stripe.hbs b/assets/javascripts/discourse/templates/stripe.hbs deleted file mode 100644 index 3b18e51..0000000 --- a/assets/javascripts/discourse/templates/stripe.hbs +++ /dev/null @@ -1 +0,0 @@ -hello world diff --git a/config/routes.rb b/config/routes.rb index 6e644df..74f4f98 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,5 @@ DiscourseDonations::Engine.routes.draw do resources :charges, only: [:create] get 'users/:username/payments' => 'payments#show' - get 'stripe' => 'payments#show' + get 'dd' => 'payments#show' end diff --git a/spec/controllers/discourse_donations/charges_controller_spec.rb b/spec/controllers/discourse_donations/charges_controller_spec.rb index eef34d2..09aab13 100644 --- a/spec/controllers/discourse_donations/charges_controller_spec.rb +++ b/spec/controllers/discourse_donations/charges_controller_spec.rb @@ -1,11 +1,16 @@ require 'rails_helper' +require_relative '../../support/dd_helper' module DiscourseDonations RSpec.describe ChargesController, type: :controller do routes { DiscourseDonations::Engine.routes } - # + + before do + SiteSetting.stubs(:discourse_donations_secret_key).returns('secret-key-yo') + current_user = log_in(:coding_horror) + end + it 'responds with ok' do - skip 'need to get fixtures' post :create expect(response).to have_http_status(200) end diff --git a/spec/support/dd_helper.rb b/spec/support/dd_helper.rb new file mode 100644 index 0000000..6dd0ef8 --- /dev/null +++ b/spec/support/dd_helper.rb @@ -0,0 +1,136 @@ + +#TODO register some fixtures + +FakeWeb.register_uri(:post, 'https://api.stripe.com/v1/customers', + :body => '{ + "id": "cus_AJqrL4OU1sffPl", + "object": "customer", + "account_balance": 0, + "created": 1489965018, + "currency": "aud", + "default_source": "card_19zDADEfVxQsvRbHVooMYHqg", + "delinquent": false, + "description": null, + "discount": null, + "email": "jo@example.com", + "livemode": false, + "metadata": { + }, + "shipping": null, + "sources": { + "object": "list", + "data": [ + { + "id": "card_19zDADEfVxQsvRbHVooMYHqg", + "object": "card", + "address_city": null, + "address_country": null, + "address_line1": null, + "address_line1_check": null, + "address_line2": null, + "address_state": null, + "address_zip": null, + "address_zip_check": null, + "brand": "MasterCard", + "country": "US", + "customer": "cus_AJqrL4OU1sffPl", + "cvc_check": "pass", + "dynamic_last4": null, + "exp_month": 11, + "exp_year": 2022, + "funding": "credit", + "last4": "4444", + "metadata": { + }, + "name": null, + "tokenization_method": null + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/customers/cus_AJqrL4OU1sffPl/sources" + } + }', + :status => ['200', 'OK'] +) + +FakeWeb.register_uri(:post, 'https://api.stripe.com/v1/charges', + :body => '{ + "id": "ch_19zDAFEfVxQsvRbHtAwsCvV0", + "object": "charge", + "amount": 100, + "amount_refunded": 0, + "application": null, + "application_fee": null, + "balance_transaction": "txn_19wkkaEfVxQsvRbH8rnq3SAK", + "captured": true, + "created": 1489965019, + "currency": "aud", + "customer": "cus_AJqrL4OU1sffPl", + "description": "Donation", + "destination": null, + "dispute": null, + "failure_code": null, + "failure_message": null, + "fraud_details": { + }, + "invoice": null, + "livemode": false, + "metadata": { + }, + "on_behalf_of": null, + "order": null, + "outcome": { + "network_status": "approved_by_network", + "reason": null, + "risk_level": "normal", + "seller_message": "Payment complete.", + "type": "authorized" + }, + "paid": true, + "receipt_email": null, + "receipt_number": null, + "refunded": false, + "refunds": { + "object": "list", + "data": [ + + ], + "has_more": false, + "total_count": 0, + "url": "/v1/charges/ch_19zDAFEfVxQsvRbHtAwsCvV0/refunds" + }, + "review": null, + "shipping": null, + "source": { + "id": "card_19zDADEfVxQsvRbHVooMYHqg", + "object": "card", + "address_city": null, + "address_country": null, + "address_line1": null, + "address_line1_check": null, + "address_line2": null, + "address_state": null, + "address_zip": null, + "address_zip_check": null, + "brand": "MasterCard", + "country": "US", + "customer": "cus_AJqrL4OU1sffPl", + "cvc_check": "pass", + "dynamic_last4": null, + "exp_month": 11, + "exp_year": 2022, + "funding": "credit", + "last4": "4444", + "metadata": { + }, + "name": null, + "tokenization_method": null + }, + "source_transfer": null, + "statement_descriptor": null, + "status": "succeeded", + "transfer_group": null + }', + :status => ['200', 'OK'] +)