diff --git a/lib/stripe_mock/request_handlers/customers.rb b/lib/stripe_mock/request_handlers/customers.rb index 4928715df..28dc9fd81 100644 --- a/lib/stripe_mock/request_handlers/customers.rb +++ b/lib/stripe_mock/request_handlers/customers.rb @@ -51,7 +51,7 @@ def new_customer(route, method_url, params, headers) coupon = coupons[ params[:coupon] ] assert_existence :coupon, params[:coupon], coupon - add_coupon_to_customer(customers[params[:id]], coupon) + add_coupon_to_object(customers[params[:id]], coupon) end customers[ params[:id] ] @@ -90,7 +90,7 @@ def update_customer(route, method_url, params, headers) coupon = coupons[ params[:coupon] ] assert_existence :coupon, params[:coupon], coupon - add_coupon_to_customer(cus, coupon) + add_coupon_to_object(cus, coupon) end cus diff --git a/lib/stripe_mock/request_handlers/helpers/coupon_helpers.rb b/lib/stripe_mock/request_handlers/helpers/coupon_helpers.rb index dbba39313..ac4e0ce40 100644 --- a/lib/stripe_mock/request_handlers/helpers/coupon_helpers.rb +++ b/lib/stripe_mock/request_handlers/helpers/coupon_helpers.rb @@ -1,18 +1,17 @@ module StripeMock module RequestHandlers module Helpers + def add_coupon_to_object(object, coupon) + discount_attrs = {}.tap do |attrs| + attrs[object[:object]] = object[:id] + attrs[:coupon] = coupon + attrs[:start] = Time.now.to_i + attrs[:end] = (DateTime.now >> coupon[:duration_in_months].to_i).to_time.to_i if coupon[:duration] == 'repeating' + end - def add_coupon_to_customer(customer, coupon) - customer[:discount] = { - coupon: coupon, - customer: customer[:id], - start: Time.now.to_i, - } - customer[:discount][:end] = (DateTime.now >> coupon[:duration_in_months]).to_time.to_i if coupon[:duration].to_sym == :repeating && coupon[:duration_in_months] - - customer + object[:discount] = Stripe::Discount.construct_from(discount_attrs) + object end - end end -end \ No newline at end of file +end diff --git a/lib/stripe_mock/request_handlers/subscriptions.rb b/lib/stripe_mock/request_handlers/subscriptions.rb index 6e29d4fbf..c9a261521 100644 --- a/lib/stripe_mock/request_handlers/subscriptions.rb +++ b/lib/stripe_mock/request_handlers/subscriptions.rb @@ -60,7 +60,7 @@ def create_customer_subscription(route, method_url, params, headers) coupon = coupons[coupon_id] if coupon - subscription[:discount] = Stripe::Util.convert_to_stripe_object({ coupon: coupon }, {}) + add_coupon_to_object(subscription, coupon) else raise Stripe::InvalidRequestError.new("No such coupon: #{coupon_id}", 'coupon', http_status: 400) end @@ -117,7 +117,7 @@ def create_subscription(route, method_url, params, headers) coupon = coupons[coupon_id] if coupon - subscription[:discount] = Stripe::Util.convert_to_stripe_object({ coupon: coupon }, {}) + add_coupon_to_object(subscription, coupon) else raise Stripe::InvalidRequestError.new("No such coupon: #{coupon_id}", 'coupon', http_status: 400) end @@ -174,9 +174,9 @@ def update_subscription(route, method_url, params, headers) coupon = coupons[coupon_id] if coupon - subscription[:discount] = Stripe::Util.convert_to_stripe_object({ coupon: coupon }, {}) + add_coupon_to_object(subscription, coupon) elsif coupon_id == "" - subscription[:discount] = Stripe::Util.convert_to_stripe_object(nil, {}) + subscription[:discount] = nil else raise Stripe::InvalidRequestError.new("No such coupon: #{coupon_id}", 'coupon', http_status: 400) end diff --git a/spec/shared_stripe_examples/subscription_examples.rb b/spec/shared_stripe_examples/subscription_examples.rb index af76b713f..b0f0ccda1 100644 --- a/spec/shared_stripe_examples/subscription_examples.rb +++ b/spec/shared_stripe_examples/subscription_examples.rb @@ -140,7 +140,7 @@ def gen_card_tk expect(customer.subscriptions.data).to be_a(Array) expect(customer.subscriptions.data.count).to eq(1) expect(customer.subscriptions.data.first.discount).not_to be_nil - expect(customer.subscriptions.data.first.discount).to be_a(Stripe::StripeObject) + expect(customer.subscriptions.data.first.discount).to be_a(Stripe::Discount) expect(customer.subscriptions.data.first.discount.coupon.id).to eq(coupon.id) end @@ -614,7 +614,7 @@ def gen_card_tk subscription.save expect(subscription.discount).not_to be_nil - expect(subscription.discount).to be_an_instance_of(Stripe::StripeObject) + expect(subscription.discount).to be_a(Stripe::Discount) expect(subscription.discount.coupon.id).to eq(coupon.id) end