From dca6c7ddc9562d1ee6c35b7972a757503f9a3d74 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Tue, 14 Jan 2020 23:38:26 +1100 Subject: [PATCH] deletes the customer on subscription cancel --- app/controllers/hooks_controller.rb | 16 +++++-------- spec/requests/hooks_controller_spec.rb | 31 +++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/app/controllers/hooks_controller.rb b/app/controllers/hooks_controller.rb index d536a35..442e9eb 100644 --- a/app/controllers/hooks_controller.rb +++ b/app/controllers/hooks_controller.rb @@ -21,7 +21,6 @@ module DiscourseSubscriptions return end - # Handle the event case event[:type] when 'customer.subscription.deleted' @@ -32,16 +31,13 @@ module DiscourseSubscriptions if customer customer.delete - - user = ::User.find(customer.user_id) - group = plan_group(event[:plan]) - group.remove(user) if group + # + # binding.pry + # + # user = ::User.find(customer.user_id) + # group = plan_group(event[:plan]) + # group.remove(user) if group end - - else - # Unexpected event type - status 400 - return end head 200 diff --git a/spec/requests/hooks_controller_spec.rb b/spec/requests/hooks_controller_spec.rb index 3cb2303..345b0d3 100644 --- a/spec/requests/hooks_controller_spec.rb +++ b/spec/requests/hooks_controller_spec.rb @@ -10,15 +10,44 @@ module DiscourseSubscriptions it "contructs a webhook event" do payload = 'we-want-a-shrubbery' - headers = { 'HTTP_STRIPE_SIGNATURE' => 'stripe-webhook-signature' } + headers = { HTTP_STRIPE_SIGNATURE: 'stripe-webhook-signature' } ::Stripe::Webhook .expects(:construct_event) .with('we-want-a-shrubbery', 'stripe-webhook-signature', 'zascharoo') + .returns(type: 'something') post "/s/hooks.json", params: payload, headers: headers expect(response.status).to eq 200 end + + it "cancels a subscription" do + user = Fabricate(:user) + group = Fabricate(:group, name: 'subscribers-group') + + customer = Fabricate( + :customer, + customer_id: 'c_575768', + product_id: 'p_8654', + user_id: user.id + ) + + event = { + type: 'customer.subscription.deleted', + customer: customer.customer_id, + plan: { product: customer.product_id, metadata: { group_name: group.name } } + } + + ::Stripe::Webhook + .expects(:construct_event) + .returns(event) + + expect { + post "/s/hooks.json" + }.to change { DiscourseSubscriptions::Customer.count }.by(-1) + + expect(response.status).to eq 200 + end end end