| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/payments/core/autofill_payment_instrument.h" | 5 #include "components/payments/core/autofill_payment_instrument.h" |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/strings/string16.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 9 #include "components/autofill/core/browser/autofill_profile.h" | 10 #include "components/autofill/core/browser/autofill_profile.h" |
| 10 #include "components/autofill/core/browser/autofill_test_utils.h" | 11 #include "components/autofill/core/browser/autofill_test_utils.h" |
| 11 #include "components/autofill/core/browser/credit_card.h" | 12 #include "components/autofill/core/browser/credit_card.h" |
| 13 #include "components/strings/grit/components_strings.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "ui/base/l10n/l10n_util.h" |
| 13 | 16 |
| 14 namespace payments { | 17 namespace payments { |
| 15 | 18 |
| 16 class AutofillPaymentInstrumentTest : public testing::Test { | 19 class AutofillPaymentInstrumentTest : public testing::Test { |
| 17 protected: | 20 protected: |
| 18 AutofillPaymentInstrumentTest() | 21 AutofillPaymentInstrumentTest() |
| 19 : address_(autofill::test::GetFullProfile()), | 22 : address_(autofill::test::GetFullProfile()), |
| 20 local_card_(autofill::test::GetCreditCard()), | 23 local_card_(autofill::test::GetCreditCard()), |
| 21 billing_profiles_({&address_}) { | 24 billing_profiles_({&address_}) { |
| 22 local_card_.set_billing_address_id(address_.guid()); | 25 local_card_.set_billing_address_id(address_.guid()); |
| 23 } | 26 } |
| 24 | 27 |
| 25 autofill::CreditCard& local_credit_card() { return local_card_; } | 28 autofill::CreditCard& local_credit_card() { return local_card_; } |
| 26 const std::vector<autofill::AutofillProfile*>& billing_profiles() { | 29 const std::vector<autofill::AutofillProfile*>& billing_profiles() { |
| 27 return billing_profiles_; | 30 return billing_profiles_; |
| 28 } | 31 } |
| 29 | 32 |
| 30 private: | 33 private: |
| 31 autofill::AutofillProfile address_; | 34 autofill::AutofillProfile address_; |
| 32 autofill::CreditCard local_card_; | 35 autofill::CreditCard local_card_; |
| 33 std::vector<autofill::AutofillProfile*> billing_profiles_; | 36 std::vector<autofill::AutofillProfile*> billing_profiles_; |
| 34 | 37 |
| 35 DISALLOW_COPY_AND_ASSIGN(AutofillPaymentInstrumentTest); | 38 DISALLOW_COPY_AND_ASSIGN(AutofillPaymentInstrumentTest); |
| 36 }; | 39 }; |
| 37 | 40 |
| 38 // A valid local credit card is a valid instrument for payment. | 41 // A valid local credit card is a valid instrument for payment. |
| 39 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment) { | 42 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment) { |
| 40 AutofillPaymentInstrument instrument("visa", local_credit_card(), | 43 AutofillPaymentInstrument instrument("visa", local_credit_card(), |
| 41 billing_profiles(), "en-US", nullptr); | 44 billing_profiles(), "en-US", nullptr); |
| 42 EXPECT_TRUE(instrument.IsCompleteForPayment()); | 45 base::string16 missing_info; |
| 46 EXPECT_TRUE(instrument.IsCompleteForPayment(/*missing_info=*/&missing_info)); |
| 47 EXPECT_TRUE(missing_info.empty()); |
| 48 |
| 49 // Passing /*missing_info=*/nullptr doesn't crash. |
| 50 EXPECT_TRUE(instrument.IsCompleteForPayment(/*missing_info=*/nullptr)); |
| 43 } | 51 } |
| 44 | 52 |
| 45 // An expired local card is not a valid instrument for payment. | 53 // An expired local card is not a valid instrument for payment. |
| 46 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment_Expired) { | 54 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment_Expired) { |
| 47 autofill::CreditCard& card = local_credit_card(); | 55 autofill::CreditCard& card = local_credit_card(); |
| 48 card.SetExpirationYear(2016); // Expired. | 56 card.SetExpirationYear(2016); // Expired. |
| 49 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), | 57 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), |
| 50 "en-US", nullptr); | 58 "en-US", nullptr); |
| 51 EXPECT_FALSE(instrument.IsCompleteForPayment()); | 59 base::string16 missing_info; |
| 60 EXPECT_FALSE(instrument.IsCompleteForPayment(/*missing_info=*/&missing_info)); |
| 61 EXPECT_EQ(l10n_util::GetStringUTF16( |
| 62 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), |
| 63 missing_info); |
| 52 } | 64 } |
| 53 | 65 |
| 54 // A local card with no name is not a valid instrument for payment. | 66 // A local card with no name is not a valid instrument for payment. |
| 55 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment_NoName) { | 67 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment_NoName) { |
| 56 autofill::CreditCard& card = local_credit_card(); | 68 autofill::CreditCard& card = local_credit_card(); |
| 57 card.SetInfo(autofill::AutofillType(autofill::CREDIT_CARD_NAME_FULL), | 69 card.SetInfo(autofill::AutofillType(autofill::CREDIT_CARD_NAME_FULL), |
| 58 base::ASCIIToUTF16(""), "en-US"); | 70 base::ASCIIToUTF16(""), "en-US"); |
| 71 base::string16 missing_info; |
| 59 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), | 72 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), |
| 60 "en-US", nullptr); | 73 "en-US", nullptr); |
| 61 EXPECT_FALSE(instrument.IsCompleteForPayment()); | 74 EXPECT_FALSE(instrument.IsCompleteForPayment(/*missing_info=*/&missing_info)); |
| 75 EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAYMENTS_NAME_ON_CARD_REQUIRED), |
| 76 missing_info); |
| 62 } | 77 } |
| 63 | 78 |
| 64 // A local card with no name is not a valid instrument for payment. | 79 // A local card with no name is not a valid instrument for payment. |
| 65 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment_NoNumber) { | 80 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment_NoNumber) { |
| 66 autofill::CreditCard& card = local_credit_card(); | 81 autofill::CreditCard& card = local_credit_card(); |
| 67 card.SetNumber(base::ASCIIToUTF16("")); | 82 card.SetNumber(base::ASCIIToUTF16("")); |
| 83 base::string16 missing_info; |
| 68 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), | 84 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), |
| 69 "en-US", nullptr); | 85 "en-US", nullptr); |
| 70 EXPECT_FALSE(instrument.IsCompleteForPayment()); | 86 EXPECT_FALSE(instrument.IsCompleteForPayment(/*missing_info=*/&missing_info)); |
| 87 EXPECT_EQ(l10n_util::GetStringUTF16( |
| 88 IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE), |
| 89 missing_info); |
| 90 } |
| 91 |
| 92 // A local card with no name and no number is not a valid instrument for |
| 93 // payment. |
| 94 TEST_F(AutofillPaymentInstrumentTest, |
| 95 IsCompleteForPayment_MultipleThingsMissing) { |
| 96 autofill::CreditCard& card = local_credit_card(); |
| 97 card.SetNumber(base::ASCIIToUTF16("")); |
| 98 card.SetInfo(autofill::AutofillType(autofill::CREDIT_CARD_NAME_FULL), |
| 99 base::ASCIIToUTF16(""), "en-US"); |
| 100 base::string16 missing_info; |
| 101 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), |
| 102 "en-US", nullptr); |
| 103 EXPECT_FALSE(instrument.IsCompleteForPayment(/*missing_info=*/&missing_info)); |
| 104 EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAYMENTS_MORE_INFORMATION_REQUIRED), |
| 105 missing_info); |
| 71 } | 106 } |
| 72 | 107 |
| 73 // A Masked (server) card is a valid instrument for payment. | 108 // A Masked (server) card is a valid instrument for payment. |
| 74 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment_MaskedCard) { | 109 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment_MaskedCard) { |
| 75 autofill::CreditCard card = autofill::test::GetMaskedServerCard(); | 110 autofill::CreditCard card = autofill::test::GetMaskedServerCard(); |
| 76 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), | 111 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), |
| 77 "en-US", nullptr); | 112 "en-US", nullptr); |
| 78 EXPECT_TRUE(instrument.IsCompleteForPayment()); | 113 base::string16 missing_info; |
| 114 EXPECT_TRUE(instrument.IsCompleteForPayment(/*missing_info=*/&missing_info)); |
| 115 EXPECT_TRUE(missing_info.empty()); |
| 116 |
| 117 // Passing /*missing_info=*/nullptr doesn't crash. |
| 118 EXPECT_TRUE(instrument.IsCompleteForPayment(/*missing_info=*/nullptr)); |
| 79 } | 119 } |
| 80 | 120 |
| 81 // An expired masked (server) card is not a valid instrument for payment. | 121 // An expired masked (server) card is not a valid instrument for payment. |
| 82 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment_ExpiredMaskedCard) { | 122 TEST_F(AutofillPaymentInstrumentTest, IsCompleteForPayment_ExpiredMaskedCard) { |
| 83 autofill::CreditCard card = autofill::test::GetMaskedServerCard(); | 123 autofill::CreditCard card = autofill::test::GetMaskedServerCard(); |
| 84 card.SetExpirationYear(2016); // Expired. | 124 card.SetExpirationYear(2016); // Expired. |
| 85 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), | 125 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), |
| 86 "en-US", nullptr); | 126 "en-US", nullptr); |
| 87 EXPECT_FALSE(instrument.IsCompleteForPayment()); | 127 base::string16 missing_info; |
| 128 EXPECT_FALSE(instrument.IsCompleteForPayment(/*missing_info=*/&missing_info)); |
| 129 EXPECT_EQ(l10n_util::GetStringUTF16( |
| 130 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), |
| 131 missing_info); |
| 88 } | 132 } |
| 89 | 133 |
| 90 // An expired card is a valid instrument for canMakePayment. | 134 // An expired card is a valid instrument for canMakePayment. |
| 91 TEST_F(AutofillPaymentInstrumentTest, IsValidForCanMakePayment_Minimal) { | 135 TEST_F(AutofillPaymentInstrumentTest, IsValidForCanMakePayment_Minimal) { |
| 92 autofill::CreditCard& card = local_credit_card(); | 136 autofill::CreditCard& card = local_credit_card(); |
| 93 card.SetExpirationYear(2016); // Expired. | 137 card.SetExpirationYear(2016); // Expired. |
| 94 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), | 138 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), |
| 95 "en-US", nullptr); | 139 "en-US", nullptr); |
| 96 EXPECT_TRUE(instrument.IsValidForCanMakePayment()); | 140 EXPECT_TRUE(instrument.IsValidForCanMakePayment()); |
| 97 } | 141 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 118 // A card with no number is not a valid instrument for canMakePayment. | 162 // A card with no number is not a valid instrument for canMakePayment. |
| 119 TEST_F(AutofillPaymentInstrumentTest, IsValidForCanMakePayment_NoNumber) { | 163 TEST_F(AutofillPaymentInstrumentTest, IsValidForCanMakePayment_NoNumber) { |
| 120 autofill::CreditCard& card = local_credit_card(); | 164 autofill::CreditCard& card = local_credit_card(); |
| 121 card.SetNumber(base::ASCIIToUTF16("")); | 165 card.SetNumber(base::ASCIIToUTF16("")); |
| 122 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), | 166 AutofillPaymentInstrument instrument("visa", card, billing_profiles(), |
| 123 "en-US", nullptr); | 167 "en-US", nullptr); |
| 124 EXPECT_FALSE(instrument.IsValidForCanMakePayment()); | 168 EXPECT_FALSE(instrument.IsValidForCanMakePayment()); |
| 125 } | 169 } |
| 126 | 170 |
| 127 } // namespace payments | 171 } // namespace payments |
| OLD | NEW |