From 36865c5ea19912ba3edebc2c57edc68330fa0764 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Fri, 29 Nov 2019 09:24:56 +1100 Subject: [PATCH] remove the user from the group in user controller --- .../user/subscriptions_controller.rb | 3 ++ .../user/subscriptions_controller_spec.rb | 44 +++++++++++++++++-- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/app/controllers/user/subscriptions_controller.rb b/app/controllers/user/subscriptions_controller.rb index 0802747..56f28fd 100644 --- a/app/controllers/user/subscriptions_controller.rb +++ b/app/controllers/user/subscriptions_controller.rb @@ -49,6 +49,9 @@ module DiscoursePatrons deleted = ::Stripe::Subscription.delete(params[:id]) customer.delete + group = plan_group(subscription[:plan]) + group.remove(current_user) if group + render_json_dump deleted else render_json_error I18n.t('discourse_patrons.customer_not_found') diff --git a/spec/requests/user/subscriptions_controller_spec.rb b/spec/requests/user/subscriptions_controller_spec.rb index edd9079..f1463db 100644 --- a/spec/requests/user/subscriptions_controller_spec.rb +++ b/spec/requests/user/subscriptions_controller_spec.rb @@ -80,11 +80,15 @@ module DiscoursePatrons end describe "delete" do + let(:group) { Fabricate(:group, name: 'subscribers') } + before do # Users can have more than one customer id 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_1', product_id: 'p_2') Customer.create(user_id: user.id, customer_id: 'customer_id_2', product_id: 'p_2') + + group.add(user) end it "does not delete a subscription when the customer is wrong" do @@ -127,12 +131,46 @@ module DiscoursePatrons expect(response.status).to eq 422 end + it "removes the user from the group" do + ::Stripe::Subscription + .expects(:retrieve) + .with('sub_12345') + .returns( + plan: { product: 'p_1', metadata: { group_name: 'subscribers' } }, + customer: 'customer_id_1' + ) + + ::Stripe::Subscription + .expects(:delete) + + expect { + delete "/patrons/user/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(:retrieve) + .with('sub_12345') + .returns( + plan: { product: 'p_1', metadata: { group_name: 'does_not_exist' } }, + customer: 'customer_id_1' + ) + + ::Stripe::Subscription + .expects(:delete) + + expect { + delete "/patrons/user/subscriptions/sub_12345.json" + }.not_to change { user.groups.count } + end + it "deletes the first subscription product 1" do ::Stripe::Subscription .expects(:retrieve) .with('sub_12345') .returns( - plan: { product: 'p_1' }, + plan: { product: 'p_1', metadata: {} }, customer: 'customer_id_1' ) @@ -152,7 +190,7 @@ module DiscoursePatrons .expects(:retrieve) .with('sub_12345') .returns( - plan: { product: 'p_2' }, + plan: { product: 'p_2', metadata: {} }, customer: 'customer_id_1' ) @@ -172,7 +210,7 @@ module DiscoursePatrons .expects(:retrieve) .with('sub_12345') .returns( - plan: { product: 'p_2' }, + plan: { product: 'p_2', metadata: {} }, customer: 'customer_id_2' )