From 4e615908f46ac4f589bbbfc1f74aee7f0223ac09 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Mon, 14 Oct 2019 11:47:49 +1100 Subject: [PATCH] create the subscription --- app/controllers/subscriptions_controller.rb | 2 +- .../controllers/patrons-subscribe.js.es6 | 23 +++++++++++++++---- .../discourse/routes/patrons-subscribe.js.es6 | 1 - .../discourse/templates/patrons/subscribe.hbs | 2 +- config/routes.rb | 1 + .../requests/subscriptions_controller_spec.rb | 5 ++++ 6 files changed, 26 insertions(+), 8 deletions(-) diff --git a/app/controllers/subscriptions_controller.rb b/app/controllers/subscriptions_controller.rb index 3cb8a13..521f73c 100644 --- a/app/controllers/subscriptions_controller.rb +++ b/app/controllers/subscriptions_controller.rb @@ -10,7 +10,7 @@ module DiscoursePatrons subscription = ::Stripe::Subscription.create( customer: params[:customer], items: [ - { plan: 'plan_CBXbz9i7AIOTzr' }, + { plan: params[:plan] }, ] ) diff --git a/assets/javascripts/discourse/controllers/patrons-subscribe.js.es6 b/assets/javascripts/discourse/controllers/patrons-subscribe.js.es6 index 26e0150..28fcda5 100644 --- a/assets/javascripts/discourse/controllers/patrons-subscribe.js.es6 +++ b/assets/javascripts/discourse/controllers/patrons-subscribe.js.es6 @@ -21,14 +21,27 @@ export default Ember.Controller.extend({ // var errorElement = document.getElementById('card-errors'); // errorElement.textContent = result.error.message; } else { - const data = { + const customerData = { source: result.token.id }; - return ajax("/patrons/customers", { method: "post", data }).then( - result => { - console.log(4, result, this.get('model')); - // do plan + return ajax("/patrons/customers", { method: "post", data: customerData }).then( + customer => { + // TODO move default plan into settings + if(this.get('model.selectedPlan') == undefined) { + this.set('model.selectedPlan', this.get('model.plans.firstObject')); + } + + const subscriptionData = { + customer: customer.id, + plan: this.get('model.selectedPlan') + }; + + return ajax("/patrons/subscriptions", { method: "post", data: subscriptionData }).then( + subscription => { + console.log(3, subscription); + } + ); } ); } diff --git a/assets/javascripts/discourse/routes/patrons-subscribe.js.es6 b/assets/javascripts/discourse/routes/patrons-subscribe.js.es6 index 6d0204d..1c0d1a6 100644 --- a/assets/javascripts/discourse/routes/patrons-subscribe.js.es6 +++ b/assets/javascripts/discourse/routes/patrons-subscribe.js.es6 @@ -5,7 +5,6 @@ export default Discourse.Route.extend({ model() { const group = Group.find(); const plans = Plan.find().then(results => results.map(p => p.id)); - return Ember.RSVP.hash({ group, plans }); } }); diff --git a/assets/javascripts/discourse/templates/patrons/subscribe.hbs b/assets/javascripts/discourse/templates/patrons/subscribe.hbs index 1562aed..f3ab6be 100644 --- a/assets/javascripts/discourse/templates/patrons/subscribe.hbs +++ b/assets/javascripts/discourse/templates/patrons/subscribe.hbs @@ -11,7 +11,7 @@

- {{combo-box valueAttribute="id" content=model.plans value=model.plan}} + {{combo-box valueAttribute="id" content=model.plans value=model.selectedPlan}} {{#d-button action="stripePaymentHandler" diff --git a/config/routes.rb b/config/routes.rb index 64d6e40..6dce13b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,6 +12,7 @@ DiscoursePatrons::Engine.routes.draw do end resources :customers, only: [:create] + resources :subscriptions, only: [:create] resources :plans, only: [:index] resources :patrons, only: [:index, :create] diff --git a/spec/requests/subscriptions_controller_spec.rb b/spec/requests/subscriptions_controller_spec.rb index 13effe1..4b1c859 100644 --- a/spec/requests/subscriptions_controller_spec.rb +++ b/spec/requests/subscriptions_controller_spec.rb @@ -15,6 +15,11 @@ module DiscoursePatrons ::Stripe::Subscription.expects(:create).with(has_entry(customer: 'cus_1234')) post "/patrons/subscriptions.json", params: { customer: 'cus_1234' } end + + it "creates a subscription with a plan" do + ::Stripe::Subscription.expects(:create).with(has_entry(items: [ plan: 'plan_1234' ])) + post "/patrons/subscriptions.json", params: { plan: 'plan_1234' } + end end end end