From 7340bf5bc5f2c2b006f3ffc29851329c1ae1415f Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Tue, 26 Nov 2019 11:09:54 +1100 Subject: [PATCH] fix customer id not found --- .../user/subscriptions_controller.rb | 18 ++++---- config/locales/client.en.yml | 2 +- plugin.rb | 4 +- .../user/subscriptions_controller_spec.rb | 41 ++++++++++--------- 4 files changed, 32 insertions(+), 33 deletions(-) diff --git a/app/controllers/user/subscriptions_controller.rb b/app/controllers/user/subscriptions_controller.rb index e73e0ad..4965374 100644 --- a/app/controllers/user/subscriptions_controller.rb +++ b/app/controllers/user/subscriptions_controller.rb @@ -28,18 +28,16 @@ module DiscoursePatrons def destroy begin - customer = Customer.find_user(current_user) + subscription = ::Stripe::Subscription.retrieve(params[:id]) + + customer = Customer.find_by( + user_id: current_user.id, + customer_id: subscription[:customer] + ) if customer.present? - subscription = ::Stripe::Subscription.retrieve(params[:id]) - - if subscription[:customer] == customer.customer_id - deleted = ::Stripe::Subscription.delete(params[:id]) - render_json_dump deleted - else - render_json_error "Customer ID not found" - end - + deleted = ::Stripe::Subscription.delete(params[:id]) + render_json_dump deleted else render_json_error "Customer ID not found" end diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 6d81b90..7c00fd7 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -2,8 +2,8 @@ en: site_settings: discourse_patrons_enabled: Enable the Discourse Patrons plugin. discourse_patrons_extra_nav_subscribe: Show the subscribe button in the primary navigation + discourse_patrons_public_key: Stripe Publishable Key discourse_patrons_secret_key: Stripe Secret Key - discourse_patrons_public_key: Stripe Public Key discourse_patrons_currency: Default Currency Code. This can be overridden when creating a subscription plan discourse_patrons_zip_code: "Show Zip Code" discourse_patrons_billing_address: "Collect billing address" diff --git a/plugin.rb b/plugin.rb index 9e68fc3..b316dfd 100644 --- a/plugin.rb +++ b/plugin.rb @@ -2,7 +2,7 @@ # name: discourse-patrons # about: Integrates Stripe into Discourse to allow visitors to make payments and Subscribe -# version: 2.2.3 +# version: 2.2.4 # url: https://github.com/rimian/discourse-patrons # authors: Rimian Perkins @@ -40,7 +40,7 @@ end after_initialize do ::Stripe.api_version = "2019-11-05" - ::Stripe.set_app_info('Discourse Patrons', version: '2.2.3', url: 'https://github.com/rimian/discourse-patrons') + ::Stripe.set_app_info('Discourse Patrons', version: '2.2.4', url: 'https://github.com/rimian/discourse-patrons') [ "../lib/discourse_patrons/engine", diff --git a/spec/requests/user/subscriptions_controller_spec.rb b/spec/requests/user/subscriptions_controller_spec.rb index 47aa5a8..0118455 100644 --- a/spec/requests/user/subscriptions_controller_spec.rb +++ b/spec/requests/user/subscriptions_controller_spec.rb @@ -52,30 +52,31 @@ module DiscoursePatrons end describe "delete" do - context "no customer record" do - it "deletes a subscription" do - ::Stripe::Subscription.expects(:delete).never - delete "/patrons/user/subscriptions/sub_12345.json" - expect(response.status).to eq 422 - end + 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') end - context "customer exists" do - let!(:customer) { Fabricate(:customer, customer_id: 'cus_tmp76543g', user_id: user.id) } + 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(response.status).to eq 422 + end - it "does not delete a subscription" do - ::Stripe::Subscription.expects(:retrieve).with('sub_12345').returns(customer: 'other') - ::Stripe::Subscription.expects(:delete).never - delete "/patrons/user/subscriptions/sub_12345.json" - 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(response.status).to eq 200 + end - it "deletes a subscription" do - ::Stripe::Subscription.expects(:retrieve).with('sub_12345').returns(customer: 'cus_tmp76543g') - ::Stripe::Subscription.expects(:delete).with('sub_12345') - delete "/patrons/user/subscriptions/sub_12345.json" - 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(response.status).to eq 200 end end end