From 2eab43d4a091a784583ddb13fb75ebee763fabbb Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Fri, 29 Nov 2019 08:00:13 +1100 Subject: [PATCH] delete customer when subscription destroyed --- .../admin/subscriptions_controller.rb | 1 - .../user/subscriptions_controller.rb | 2 ++ .../user/subscriptions_controller_spec.rb | 22 ++++++++++++++----- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/app/controllers/admin/subscriptions_controller.rb b/app/controllers/admin/subscriptions_controller.rb index 8666a2e..4b96503 100644 --- a/app/controllers/admin/subscriptions_controller.rb +++ b/app/controllers/admin/subscriptions_controller.rb @@ -34,7 +34,6 @@ module DiscoursePatrons return render_json_error e.message end end - end end end diff --git a/app/controllers/user/subscriptions_controller.rb b/app/controllers/user/subscriptions_controller.rb index 1afd15d..240ac17 100644 --- a/app/controllers/user/subscriptions_controller.rb +++ b/app/controllers/user/subscriptions_controller.rb @@ -45,6 +45,8 @@ module DiscoursePatrons if customer.present? deleted = ::Stripe::Subscription.delete(params[:id]) + customer.delete + render_json_dump deleted else render_json_error I18n.t('discourse_patrons.customer_id_not_found') diff --git a/spec/requests/user/subscriptions_controller_spec.rb b/spec/requests/user/subscriptions_controller_spec.rb index 46dc045..9590306 100644 --- a/spec/requests/user/subscriptions_controller_spec.rb +++ b/spec/requests/user/subscriptions_controller_spec.rb @@ -82,28 +82,40 @@ module DiscoursePatrons describe "delete" do before do # Users can have more than one customer id - Customer.create(user_id: user.id, customer_id: 'customer_id_1') - Customer.create(user_id: user.id, customer_id: 'customer_id_2') + Customer.create(user_id: user.id, customer_id: 'customer_id_1', product_id: 'p_1') + Customer.create(user_id: user.id, customer_id: 'customer_id_2', product_id: 'p_2') end it "does not delete a subscription" do ::Stripe::Subscription.expects(:retrieve).with('sub_12345').returns(customer: 'wrong_id') ::Stripe::Subscription.expects(:delete).never - delete "/patrons/user/subscriptions/sub_12345.json" + + expect { + delete "/patrons/user/subscriptions/sub_12345.json" + }.not_to change { DiscoursePatrons::Customer.count } + expect(response.status).to eq 422 end it "deletes the first subscription" do ::Stripe::Subscription.expects(:retrieve).with('sub_12345').returns(customer: 'customer_id_1') ::Stripe::Subscription.expects(:delete).with('sub_12345') - delete "/patrons/user/subscriptions/sub_12345.json" + + expect { + delete "/patrons/user/subscriptions/sub_12345.json" + }.to change { DiscoursePatrons::Customer.count }.by(-1) + expect(response.status).to eq 200 end it "deletes the second subscription" do ::Stripe::Subscription.expects(:retrieve).with('sub_12345').returns(customer: 'customer_id_2') ::Stripe::Subscription.expects(:delete).with('sub_12345') - delete "/patrons/user/subscriptions/sub_12345.json" + + expect { + delete "/patrons/user/subscriptions/sub_12345.json" + }.to change { DiscoursePatrons::Customer.count }.by(-1) + expect(response.status).to eq 200 end end