From 8715e74fd43eb6236717bc2a36f8ce833623f898 Mon Sep 17 00:00:00 2001 From: Osakpolor Obaseki Date: Tue, 8 Nov 2022 14:52:52 +0100 Subject: [PATCH] Remove expired payment methods from customer list of payment methods [with tests] --- lib/payment_methods.rb | 3 ++- test/test_payment_methods.rb | 51 ++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/lib/payment_methods.rb b/lib/payment_methods.rb index 2bbf08a392b6d6bdabb4b8833fe40b8b78e65f71..00e221dd9eee053ee0b012a7becdfc67404cb9bb 100644 --- a/lib/payment_methods.rb +++ b/lib/payment_methods.rb @@ -3,7 +3,8 @@ class PaymentMethods def self.for(braintree_customer, badcards) methods = braintree_customer.payment_methods.reject { |m| - badcards.include?(m.unique_number_identifier) + badcards.include?(m.unique_number_identifier) || + (m.respond_to?(:expired?) && m.expired?) } if methods.empty? Empty.new diff --git a/test/test_payment_methods.rb b/test/test_payment_methods.rb index 0971e7b91d56188366b89157eb1d9758b3399875..0f35996b551784748e5b0b4f3de49b3a48a28b8b 100644 --- a/test/test_payment_methods.rb +++ b/test/test_payment_methods.rb @@ -30,6 +30,57 @@ class PaymentMethodsTest < Minitest::Test assert methods.empty? end + def test_for_expired_cards + braintree_customer = Minitest::Mock.new + braintree_customer.expect(:payment_methods, [ + OpenStruct.new( + card_type: "Test", + last_4: "1234", + unique_number_identifier: "abc", + expired?: true + ) + ]) + + methods = PaymentMethods.for(braintree_customer, []) + assert_kind_of PaymentMethods, methods + assert_equal 0, methods.to_a.length + assert methods.empty? + end + + def test_for_badcards_and_expired_cards + braintree_customer = Minitest::Mock.new + braintree_customer.expect(:payment_methods, [ + OpenStruct.new( + card_type: "Test", + last_4: "1234", + unique_number_identifier: "abc", + expired?: true + ) + ]) + + methods = PaymentMethods.for(braintree_customer, ["abc"]) + assert_kind_of PaymentMethods, methods + assert_equal 0, methods.to_a.length + assert methods.empty? + end + + def test_for_non_expired_cards + braintree_customer = Minitest::Mock.new + braintree_customer.expect(:payment_methods, [ + OpenStruct.new( + card_type: "Test", + last_4: "1234", + unique_number_identifier: "abc", + expired?: false + ) + ]) + + methods = PaymentMethods.for(braintree_customer, []) + assert_kind_of PaymentMethods, methods + assert_equal 1, methods.to_a.length + refute methods.empty? + end + def test_for_no_methods braintree_customer = Minitest::Mock.new braintree_customer.expect(:payment_methods, [])