From 3b7ff9067286c675d3b65cc4651160df3645f616 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Fri, 29 Nov 2019 10:37:32 +1100 Subject: [PATCH] user removed from the group in admin --- .../admin/subscriptions_controller.rb | 12 ++++-- .../admin/subscriptions_controller_spec.rb | 37 ++++++++++++++++++- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/app/controllers/admin/subscriptions_controller.rb b/app/controllers/admin/subscriptions_controller.rb index 4b96503..fea0a02 100644 --- a/app/controllers/admin/subscriptions_controller.rb +++ b/app/controllers/admin/subscriptions_controller.rb @@ -4,7 +4,7 @@ module DiscoursePatrons module Admin class SubscriptionsController < ::Admin::AdminController include DiscoursePatrons::Stripe - + include DiscoursePatrons::Group before_action :set_api_key def index @@ -22,11 +22,17 @@ module DiscoursePatrons subscription = ::Stripe::Subscription.delete(params[:id]) customer = DiscoursePatrons::Customer.find_by( - product_id: subscription[:plan][:product][:id], + product_id: subscription[:plan][:product], customer_id: subscription[:customer] ) - customer.delete if customer + if customer + customer.delete + + user = ::User.find(customer.user_id) + group = plan_group(subscription[:plan]) + group.remove(user) if group + end render_json_dump subscription diff --git a/spec/requests/admin/subscriptions_controller_spec.rb b/spec/requests/admin/subscriptions_controller_spec.rb index 6b7588c..3ebe627 100644 --- a/spec/requests/admin/subscriptions_controller_spec.rb +++ b/spec/requests/admin/subscriptions_controller_spec.rb @@ -36,24 +36,59 @@ module DiscoursePatrons end describe "destroy" do + let(:group) { Fabricate(:group, name: 'subscribers') } + before do DiscoursePatrons::Customer.create( user_id: user.id, customer_id: 'c_123', product_id: 'pr_34578' ) + + group.add(user) end it "deletes a customer" do ::Stripe::Subscription .expects(:delete) .with('sub_12345') - .returns(customer: 'c_123', plan: { product: { id: 'pr_34578' } }) + .returns( + plan: { product: 'pr_34578' }, + customer: 'c_123' + ) expect { delete "/patrons/admin/subscriptions/sub_12345.json" }.to change { DiscoursePatrons::Customer.count }.by(-1) end + + it "removes the user from the group" do + ::Stripe::Subscription + .expects(:delete) + .with('sub_12345') + .returns( + plan: { product: 'pr_34578', metadata: { group_name: 'subscribers' } }, + customer: 'c_123' + ) + + expect { + delete "/patrons/admin/subscriptions/sub_12345.json" + }.to change { user.groups.count }.by(-1) + end + + it "does not remove the user from the group" do + ::Stripe::Subscription + .expects(:delete) + .with('sub_12345') + .returns( + plan: { product: 'pr_34578', metadata: { group_name: 'group_does_not_exist' } }, + customer: 'c_123' + ) + + expect { + delete "/patrons/admin/subscriptions/sub_12345.json" + }.not_to change { user.groups.count } + end end end end