delete customer when subscription destroyed

This commit is contained in:
Rimian Perkins 2019-11-29 08:00:13 +11:00
parent 298e70b32a
commit 2eab43d4a0
3 changed files with 19 additions and 6 deletions

View File

@ -34,7 +34,6 @@ module DiscoursePatrons
return render_json_error e.message
end
end
end
end
end

View File

@ -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')

View File

@ -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