From ee0901aecad631483d7db948c52e63f0441881f8 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Tue, 29 Oct 2019 14:35:07 +1100 Subject: [PATCH] delete subscription --- app/controllers/subscriptions_controller.rb | 13 ++++++++++++- .../discourse/models/subscription.js.es6 | 6 +++++- config/routes.rb | 2 +- spec/requests/subscriptions_controller_spec.rb | 12 ++++++++++++ 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/app/controllers/subscriptions_controller.rb b/app/controllers/subscriptions_controller.rb index 1bdf1d3..df96f06 100644 --- a/app/controllers/subscriptions_controller.rb +++ b/app/controllers/subscriptions_controller.rb @@ -11,7 +11,7 @@ module DiscoursePatrons customer = DiscoursePatrons::Customer.find_user(current_user) if customer.present? - subscriptions = ::Stripe::Subscription.list(customer: customer.customer_id) + subscriptions = ::Stripe::Subscription.list(customer: customer.customer_id).data else subscriptions = [] end @@ -49,6 +49,17 @@ module DiscoursePatrons end end + def destroy + begin + subscription = ::Stripe::Subscription.delete(params[:id]) + + render_json_dump subscription + + rescue ::Stripe::InvalidRequestError => e + return render_json_error e.message + end + end + private def plan_group(plan) diff --git a/assets/javascripts/discourse/models/subscription.js.es6 b/assets/javascripts/discourse/models/subscription.js.es6 index abae050..b6fc9dd 100644 --- a/assets/javascripts/discourse/models/subscription.js.es6 +++ b/assets/javascripts/discourse/models/subscription.js.es6 @@ -14,7 +14,11 @@ const Subscription = Discourse.Model.extend({ }; return ajax("/patrons/subscriptions", { method: "post", data }); - } + }, + + destroy() { + return ajax(`/patrons/subscriptions/${this.id}`, { method: "delete" }); + }, }); Subscription.reopenClass({ diff --git a/config/routes.rb b/config/routes.rb index af17e39..a7ccc7d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -17,7 +17,7 @@ DiscoursePatrons::Engine.routes.draw do resources :patrons, only: [:index, :create] resources :plans, only: [:index] resources :products, only: [:index] - resources :subscriptions, only: [:index, :create] + resources :subscriptions, only: [:index, :create, :destroy] get '/' => 'patrons#index' get '/subscribe' => 'patrons#index' diff --git a/spec/requests/subscriptions_controller_spec.rb b/spec/requests/subscriptions_controller_spec.rb index 6fa5e80..947028e 100644 --- a/spec/requests/subscriptions_controller_spec.rb +++ b/spec/requests/subscriptions_controller_spec.rb @@ -10,6 +10,11 @@ module DiscoursePatrons ::Stripe::Subscription.expects(:create).never post "/patrons/subscriptions.json", params: { plan: 'plan_1234', customer: 'cus_1234' } end + + it "does not destroy a subscription" do + ::Stripe::Subscription.expects(:delete).never + patch "/patrons/subscriptions/sub_12345.json" + end end context "authenticated" do @@ -120,6 +125,13 @@ module DiscoursePatrons end end end + + describe "delete" do + it "deletes a subscription" do + ::Stripe::Subscription.expects(:delete).with('sub_12345') + delete "/patrons/subscription/sub_12345.json" + end + end end end end