From 83b4e72ff424c86d0e60a1d01cefedeb8dac9755 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Tue, 23 May 2017 13:54:27 +1000 Subject: [PATCH] add inital plan --- .../discourse_donations/charges_controller.rb | 9 +++++++-- .../discourse/components/stripe-card.js.es6 | 18 +++++++++++++++++- .../templates/components/stripe-card.hbs | 18 ++++++++++++++++++ .../charges_controller_spec.rb | 4 ++-- 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/app/controllers/discourse_donations/charges_controller.rb b/app/controllers/discourse_donations/charges_controller.rb index 9efc1a9..491833e 100644 --- a/app/controllers/discourse_donations/charges_controller.rb +++ b/app/controllers/discourse_donations/charges_controller.rb @@ -7,7 +7,7 @@ module DiscourseDonations skip_before_filter :verify_authenticity_token, only: [:create] def create - params.permit(:name, :username, :email, :password, :stripeToken, :amount) + params.permit(:name, :username, :email, :password, :stripeToken, :amount, :plan) output = { 'messages' => [], 'rewards' => [] } @@ -28,7 +28,12 @@ module DiscourseDonations end payment = DiscourseDonations::Stripe.new(secret_key, stripe_options) - charge = payment.charge(email, params) + + if params['amount'].present? + charge = payment.charge(email, params) + else + charge = payment.subscribe(email, params) + end if charge['paid'] == true output['messages'] << I18n.t('donations.payment.success') diff --git a/assets/javascripts/discourse/components/stripe-card.js.es6 b/assets/javascripts/discourse/components/stripe-card.js.es6 index 606670b..6345be4 100644 --- a/assets/javascripts/discourse/components/stripe-card.js.es6 +++ b/assets/javascripts/discourse/components/stripe-card.js.es6 @@ -1,7 +1,13 @@ import { ajax } from 'discourse/lib/ajax'; import { getRegister } from 'discourse-common/lib/get-owner'; +const { computed: { alias }, observer } = Ember + export default Ember.Component.extend({ + + routing: Ember.inject.service('-routing'), + params: alias('routing.router.currentState.routerJsState.fullQueryParams'), + donateAmounts: [ { value: 1, name: '$1.00'}, { value: 2, name: '$2.00'}, @@ -16,6 +22,10 @@ export default Ember.Component.extend({ transactionInProgress: null, settings: null, + consumerDefenderWithMembership: function() { + return this.get('params.plan') == 'consumer-defender-with-membership'; + }.property('params'), + init() { this._super(); this.set('anon', (Discourse.User.current() == null)); @@ -64,12 +74,18 @@ export default Ember.Component.extend({ let params = { stripeToken: data.token.id, - amount: self.get('amount') * 100, email: self.get('email'), username: self.get('username'), create_account: self.get('create_accounts') }; + if(this.get('params.plan')) { + params.plan = this.get('params.plan'); + } + else { + params.amount: self.get('amount') * 100, + } + if(!self.get('paymentSuccess')) { ajax('/charges', { data: params, method: 'post' }).then(data => { self.concatMessages(data.messages); diff --git a/assets/javascripts/discourse/templates/components/stripe-card.hbs b/assets/javascripts/discourse/templates/components/stripe-card.hbs index c9a8405..0e59029 100644 --- a/assets/javascripts/discourse/templates/components/stripe-card.hbs +++ b/assets/javascripts/discourse/templates/components/stripe-card.hbs @@ -1,5 +1,6 @@
+ + + {{#if consumerDefenderWithMembership}} + +

[$25/quarter] Consumer Defender + CHOICE Membership

+ + + + {{/if}} + +
diff --git a/spec/controllers/discourse_donations/charges_controller_spec.rb b/spec/controllers/discourse_donations/charges_controller_spec.rb index 1b981cf..c69e7a4 100644 --- a/spec/controllers/discourse_donations/charges_controller_spec.rb +++ b/spec/controllers/discourse_donations/charges_controller_spec.rb @@ -24,8 +24,8 @@ module DiscourseDonations end it 'whitelists the params' do - params = { email: 'email@example.com', password: 'secret', username: 'mr-pink', name: 'kirsten', amount: 100, stripeToken: 'rrurrrurrrrr' } - should permit(:name, :username, :email, :password).for(:create, params: params) + params = { email: 'email@example.com', password: 'secret', username: 'mr-pink', name: 'kirsten', amount: 100, plan: 'some-plan-id', stripeToken: 'rrurrrurrrrr' } + should permit(:name, :username, :email, :password, :plan).for(:create, params: params) end it 'responds ok for anonymous users' do