diff --git a/app/controllers/admin/plans_controller.rb b/app/controllers/admin/plans_controller.rb index c85f557..8d6950c 100644 --- a/app/controllers/admin/plans_controller.rb +++ b/app/controllers/admin/plans_controller.rb @@ -12,22 +12,32 @@ module DiscoursePatrons end def create - plan = ::Stripe::Plan.create( - amount: params[:amount], - interval: params[:interval], - product: { - name: 'Gold special', - }, - currency: SiteSetting.discourse_patrons_currency, - id: 'gold-special', - ) + begin - render json: plan + plan = ::Stripe::Plan.create( + amount: params[:amount], + interval: params[:interval], + product: { name: params[:name] }, + currency: SiteSetting.discourse_patrons_currency, + id: plan_id, + ) + + render_json_dump plan + + rescue ::Stripe::InvalidRequestError => e + return render_json_error e.message + end end def destroy plan = ::Stripe::Plan.delete(params[:id]) render json: plan end + + private + + def plan_id + params[:name].parameterize.dasherize if params[:name] + end end end diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 index 38fc4d5..aee4af9 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 @@ -1,5 +1,6 @@ import { ajax } from "discourse/lib/ajax"; import computed from "ember-addons/ember-computed-decorators"; +import DiscourseURL from "discourse/lib/url"; export default Ember.Controller.extend({ @computed("model.plans") diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-show.js.es6 b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-show.js.es6 index 0503ea9..5c8a8d4 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-show.js.es6 +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-show.js.es6 @@ -1,3 +1,5 @@ +import { popupAjaxError } from "discourse/lib/ajax-error"; + export default Ember.Controller.extend({ actions: { createPlan() { @@ -5,7 +7,8 @@ export default Ember.Controller.extend({ .save() .then(() => { this.transitionToRoute("adminPlugins.discourse-patrons.plans"); - }); + }) + .catch(popupAjaxError); } } }); diff --git a/spec/requests/plans_controller_spec.rb b/spec/requests/plans_controller_spec.rb index dc3b85b..e84c6de 100644 --- a/spec/requests/plans_controller_spec.rb +++ b/spec/requests/plans_controller_spec.rb @@ -35,6 +35,16 @@ module DiscoursePatrons ::Stripe::Plan.expects(:create).with(has_entry(:amount, '102')) post "/patrons/admin/plans.json", params: { amount: '102' } end + + it "creates a plan with a title" do + ::Stripe::Plan.expects(:create).with(has_entry(:product, name: 'Rick Astley')) + post "/patrons/admin/plans.json", params: { name: 'Rick Astley' } + end + + it "creates a plan with an id" do + ::Stripe::Plan.expects(:create).with(has_entry(id: 'rick-astley')) + post "/patrons/admin/plans.json", params: { name: 'Rick Astley' } + end end describe "delete" do