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