| 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 "ios/chrome/browser/payments/payment_request.h" | 5 #include "ios/chrome/browser/payments/payment_request.h" |
| 6 | 6 |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "components/autofill/core/browser/autofill_test_utils.h" | 8 #include "components/autofill/core/browser/autofill_test_utils.h" |
| 9 #include "components/autofill/core/browser/autofill_type.h" |
| 10 #include "components/autofill/core/browser/field_types.h" |
| 9 #include "components/autofill/core/browser/test_personal_data_manager.h" | 11 #include "components/autofill/core/browser/test_personal_data_manager.h" |
| 10 #include "components/payments/core/currency_formatter.h" | 12 #include "components/payments/core/currency_formatter.h" |
| 11 #include "components/payments/core/payment_method_data.h" | 13 #include "components/payments/core/payment_method_data.h" |
| 12 #include "ios/chrome/browser/application_context.h" | 14 #include "ios/chrome/browser/application_context.h" |
| 13 #include "ios/web/public/payments/payment_request.h" | 15 #include "ios/web/public/payments/payment_request.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 17 |
| 16 #if !defined(__has_feature) || !__has_feature(objc_arc) | 18 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 17 #error "This file requires ARC support." | 19 #error "This file requires ARC support." |
| 18 #endif | 20 #endif |
| 19 | 21 |
| 22 class PaymentRequestTest : public testing::Test { |
| 23 protected: |
| 24 // Returns PaymentDetails with one shipping option that's selected. |
| 25 web::PaymentDetails CreateDetailsWithShippingOption() { |
| 26 web::PaymentDetails details; |
| 27 std::vector<web::PaymentShippingOption> shipping_options; |
| 28 web::PaymentShippingOption option1; |
| 29 option1.id = base::UTF8ToUTF16("option:1"); |
| 30 option1.selected = true; |
| 31 shipping_options.push_back(std::move(option1)); |
| 32 details.shipping_options = std::move(shipping_options); |
| 33 |
| 34 return details; |
| 35 } |
| 36 |
| 37 web::PaymentOptions CreatePaymentOptions(bool request_payer_name, |
| 38 bool request_payer_phone, |
| 39 bool request_payer_email, |
| 40 bool request_shipping) { |
| 41 web::PaymentOptions options; |
| 42 options.request_payer_name = request_payer_name; |
| 43 options.request_payer_phone = request_payer_phone; |
| 44 options.request_payer_email = request_payer_email; |
| 45 options.request_shipping = request_shipping; |
| 46 return options; |
| 47 } |
| 48 }; |
| 49 |
| 20 // Tests that the payments::CurrencyFormatter is constructed with the correct | 50 // Tests that the payments::CurrencyFormatter is constructed with the correct |
| 21 // currency code and currency system. | 51 // currency code and currency system. |
| 22 TEST(PaymentRequestTest, CreatesCurrencyFormatterCorrectly) { | 52 TEST_F(PaymentRequestTest, CreatesCurrencyFormatterCorrectly) { |
| 23 ASSERT_EQ("en", GetApplicationContext()->GetApplicationLocale()); | 53 ASSERT_EQ("en", GetApplicationContext()->GetApplicationLocale()); |
| 24 | 54 |
| 25 web::PaymentRequest web_payment_request; | 55 web::PaymentRequest web_payment_request; |
| 26 autofill::TestPersonalDataManager personal_data_manager; | 56 autofill::TestPersonalDataManager personal_data_manager; |
| 27 | 57 |
| 28 web_payment_request.details.total.amount.currency = base::ASCIIToUTF16("USD"); | 58 web_payment_request.details.total.amount.currency = base::ASCIIToUTF16("USD"); |
| 29 PaymentRequest payment_request1(web_payment_request, &personal_data_manager); | 59 PaymentRequest payment_request1(web_payment_request, &personal_data_manager); |
| 30 payments::CurrencyFormatter* currency_formatter = | 60 payments::CurrencyFormatter* currency_formatter = |
| 31 payment_request1.GetOrCreateCurrencyFormatter(); | 61 payment_request1.GetOrCreateCurrencyFormatter(); |
| 32 EXPECT_EQ(base::UTF8ToUTF16("$55.00"), currency_formatter->Format("55.00")); | 62 EXPECT_EQ(base::UTF8ToUTF16("$55.00"), currency_formatter->Format("55.00")); |
| 33 EXPECT_EQ("USD", currency_formatter->formatted_currency_code()); | 63 EXPECT_EQ("USD", currency_formatter->formatted_currency_code()); |
| 34 | 64 |
| 35 web_payment_request.details.total.amount.currency = base::ASCIIToUTF16("JPY"); | 65 web_payment_request.details.total.amount.currency = base::ASCIIToUTF16("JPY"); |
| 36 PaymentRequest payment_request2(web_payment_request, &personal_data_manager); | 66 PaymentRequest payment_request2(web_payment_request, &personal_data_manager); |
| 37 currency_formatter = payment_request2.GetOrCreateCurrencyFormatter(); | 67 currency_formatter = payment_request2.GetOrCreateCurrencyFormatter(); |
| 38 EXPECT_EQ(base::UTF8ToUTF16("¥55"), currency_formatter->Format("55.00")); | 68 EXPECT_EQ(base::UTF8ToUTF16("¥55"), currency_formatter->Format("55.00")); |
| 39 EXPECT_EQ("JPY", currency_formatter->formatted_currency_code()); | 69 EXPECT_EQ("JPY", currency_formatter->formatted_currency_code()); |
| 40 | 70 |
| 41 web_payment_request.details.total.amount.currency_system = | 71 web_payment_request.details.total.amount.currency_system = |
| 42 base::ASCIIToUTF16("NOT_ISO4217"); | 72 base::ASCIIToUTF16("NOT_ISO4217"); |
| 43 web_payment_request.details.total.amount.currency = base::ASCIIToUTF16("USD"); | 73 web_payment_request.details.total.amount.currency = base::ASCIIToUTF16("USD"); |
| 44 PaymentRequest payment_request3(web_payment_request, &personal_data_manager); | 74 PaymentRequest payment_request3(web_payment_request, &personal_data_manager); |
| 45 currency_formatter = payment_request3.GetOrCreateCurrencyFormatter(); | 75 currency_formatter = payment_request3.GetOrCreateCurrencyFormatter(); |
| 46 EXPECT_EQ(base::UTF8ToUTF16("55.00"), currency_formatter->Format("55.00")); | 76 EXPECT_EQ(base::UTF8ToUTF16("55.00"), currency_formatter->Format("55.00")); |
| 47 EXPECT_EQ("USD", currency_formatter->formatted_currency_code()); | 77 EXPECT_EQ("USD", currency_formatter->formatted_currency_code()); |
| 48 } | 78 } |
| 49 | 79 |
| 50 // Tests that the accepted card networks are identified correctly. | 80 // Tests that the accepted card networks are identified correctly. |
| 51 TEST(PaymentRequestTest, AcceptedPaymentNetworks) { | 81 TEST_F(PaymentRequestTest, AcceptedPaymentNetworks) { |
| 52 web::PaymentRequest web_payment_request; | 82 web::PaymentRequest web_payment_request; |
| 53 autofill::TestPersonalDataManager personal_data_manager; | 83 autofill::TestPersonalDataManager personal_data_manager; |
| 54 | 84 |
| 55 payments::PaymentMethodData method_datum1; | 85 payments::PaymentMethodData method_datum1; |
| 56 method_datum1.supported_methods.push_back("visa"); | 86 method_datum1.supported_methods.push_back("visa"); |
| 57 web_payment_request.method_data.push_back(method_datum1); | 87 web_payment_request.method_data.push_back(method_datum1); |
| 58 payments::PaymentMethodData method_datum2; | 88 payments::PaymentMethodData method_datum2; |
| 59 method_datum2.supported_methods.push_back("mastercard"); | 89 method_datum2.supported_methods.push_back("mastercard"); |
| 60 web_payment_request.method_data.push_back(method_datum2); | 90 web_payment_request.method_data.push_back(method_datum2); |
| 61 | 91 |
| 62 PaymentRequest payment_request(web_payment_request, &personal_data_manager); | 92 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 63 ASSERT_EQ(2U, payment_request.supported_card_networks().size()); | 93 ASSERT_EQ(2U, payment_request.supported_card_networks().size()); |
| 64 EXPECT_EQ("visa", payment_request.supported_card_networks()[0]); | 94 EXPECT_EQ("visa", payment_request.supported_card_networks()[0]); |
| 65 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[1]); | 95 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[1]); |
| 66 } | 96 } |
| 67 | 97 |
| 68 // Test that parsing supported methods (with invalid values and duplicates) | 98 // Test that parsing supported methods (with invalid values and duplicates) |
| 69 // works as expected. | 99 // works as expected. |
| 70 TEST(PaymentRequestTest, SupportedMethods) { | 100 TEST_F(PaymentRequestTest, SupportedMethods) { |
| 71 web::PaymentRequest web_payment_request; | 101 web::PaymentRequest web_payment_request; |
| 72 autofill::TestPersonalDataManager personal_data_manager; | 102 autofill::TestPersonalDataManager personal_data_manager; |
| 73 | 103 |
| 74 payments::PaymentMethodData method_datum1; | 104 payments::PaymentMethodData method_datum1; |
| 75 method_datum1.supported_methods.push_back("visa"); | 105 method_datum1.supported_methods.push_back("visa"); |
| 76 method_datum1.supported_methods.push_back("mastercard"); | 106 method_datum1.supported_methods.push_back("mastercard"); |
| 77 method_datum1.supported_methods.push_back("invalid"); | 107 method_datum1.supported_methods.push_back("invalid"); |
| 78 method_datum1.supported_methods.push_back(""); | 108 method_datum1.supported_methods.push_back(""); |
| 79 method_datum1.supported_methods.push_back("visa"); | 109 method_datum1.supported_methods.push_back("visa"); |
| 80 web_payment_request.method_data.push_back(method_datum1); | 110 web_payment_request.method_data.push_back(method_datum1); |
| 81 | 111 |
| 82 PaymentRequest payment_request(web_payment_request, &personal_data_manager); | 112 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 83 ASSERT_EQ(2U, payment_request.supported_card_networks().size()); | 113 ASSERT_EQ(2U, payment_request.supported_card_networks().size()); |
| 84 EXPECT_EQ("visa", payment_request.supported_card_networks()[0]); | 114 EXPECT_EQ("visa", payment_request.supported_card_networks()[0]); |
| 85 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[1]); | 115 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[1]); |
| 86 } | 116 } |
| 87 | 117 |
| 88 // Test that parsing supported methods in different method data entries (with | 118 // Test that parsing supported methods in different method data entries (with |
| 89 // invalid values and duplicates) works as expected. | 119 // invalid values and duplicates) works as expected. |
| 90 TEST(PaymentRequestTest, SupportedMethods_MultipleEntries) { | 120 TEST_F(PaymentRequestTest, SupportedMethods_MultipleEntries) { |
| 91 web::PaymentRequest web_payment_request; | 121 web::PaymentRequest web_payment_request; |
| 92 autofill::TestPersonalDataManager personal_data_manager; | 122 autofill::TestPersonalDataManager personal_data_manager; |
| 93 | 123 |
| 94 payments::PaymentMethodData method_datum1; | 124 payments::PaymentMethodData method_datum1; |
| 95 method_datum1.supported_methods.push_back("visa"); | 125 method_datum1.supported_methods.push_back("visa"); |
| 96 web_payment_request.method_data.push_back(method_datum1); | 126 web_payment_request.method_data.push_back(method_datum1); |
| 97 payments::PaymentMethodData method_datum2; | 127 payments::PaymentMethodData method_datum2; |
| 98 method_datum2.supported_methods.push_back("mastercard"); | 128 method_datum2.supported_methods.push_back("mastercard"); |
| 99 web_payment_request.method_data.push_back(method_datum2); | 129 web_payment_request.method_data.push_back(method_datum2); |
| 100 payments::PaymentMethodData method_datum3; | 130 payments::PaymentMethodData method_datum3; |
| 101 method_datum3.supported_methods.push_back(""); | 131 method_datum3.supported_methods.push_back(""); |
| 102 web_payment_request.method_data.push_back(method_datum3); | 132 web_payment_request.method_data.push_back(method_datum3); |
| 103 payments::PaymentMethodData method_datum4; | 133 payments::PaymentMethodData method_datum4; |
| 104 method_datum4.supported_methods.push_back("visa"); | 134 method_datum4.supported_methods.push_back("visa"); |
| 105 web_payment_request.method_data.push_back(method_datum4); | 135 web_payment_request.method_data.push_back(method_datum4); |
| 106 | 136 |
| 107 PaymentRequest payment_request(web_payment_request, &personal_data_manager); | 137 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 108 ASSERT_EQ(2U, payment_request.supported_card_networks().size()); | 138 ASSERT_EQ(2U, payment_request.supported_card_networks().size()); |
| 109 EXPECT_EQ("visa", payment_request.supported_card_networks()[0]); | 139 EXPECT_EQ("visa", payment_request.supported_card_networks()[0]); |
| 110 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[1]); | 140 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[1]); |
| 111 } | 141 } |
| 112 | 142 |
| 113 // Test that only specifying basic-card means that all are supported. | 143 // Test that only specifying basic-card means that all are supported. |
| 114 TEST(PaymentRequestTest, SupportedMethods_OnlyBasicCard) { | 144 TEST_F(PaymentRequestTest, SupportedMethods_OnlyBasicCard) { |
| 115 web::PaymentRequest web_payment_request; | 145 web::PaymentRequest web_payment_request; |
| 116 autofill::TestPersonalDataManager personal_data_manager; | 146 autofill::TestPersonalDataManager personal_data_manager; |
| 117 | 147 |
| 118 payments::PaymentMethodData method_datum1; | 148 payments::PaymentMethodData method_datum1; |
| 119 method_datum1.supported_methods.push_back("basic-card"); | 149 method_datum1.supported_methods.push_back("basic-card"); |
| 120 web_payment_request.method_data.push_back(method_datum1); | 150 web_payment_request.method_data.push_back(method_datum1); |
| 121 | 151 |
| 122 PaymentRequest payment_request(web_payment_request, &personal_data_manager); | 152 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 123 | 153 |
| 124 // All of the basic card networks are supported. | 154 // All of the basic card networks are supported. |
| 125 ASSERT_EQ(8U, payment_request.supported_card_networks().size()); | 155 ASSERT_EQ(8U, payment_request.supported_card_networks().size()); |
| 126 EXPECT_EQ("amex", payment_request.supported_card_networks()[0]); | 156 EXPECT_EQ("amex", payment_request.supported_card_networks()[0]); |
| 127 EXPECT_EQ("diners", payment_request.supported_card_networks()[1]); | 157 EXPECT_EQ("diners", payment_request.supported_card_networks()[1]); |
| 128 EXPECT_EQ("discover", payment_request.supported_card_networks()[2]); | 158 EXPECT_EQ("discover", payment_request.supported_card_networks()[2]); |
| 129 EXPECT_EQ("jcb", payment_request.supported_card_networks()[3]); | 159 EXPECT_EQ("jcb", payment_request.supported_card_networks()[3]); |
| 130 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[4]); | 160 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[4]); |
| 131 EXPECT_EQ("mir", payment_request.supported_card_networks()[5]); | 161 EXPECT_EQ("mir", payment_request.supported_card_networks()[5]); |
| 132 EXPECT_EQ("unionpay", payment_request.supported_card_networks()[6]); | 162 EXPECT_EQ("unionpay", payment_request.supported_card_networks()[6]); |
| 133 EXPECT_EQ("visa", payment_request.supported_card_networks()[7]); | 163 EXPECT_EQ("visa", payment_request.supported_card_networks()[7]); |
| 134 } | 164 } |
| 135 | 165 |
| 136 // Test that specifying a method AND basic-card means that all are supported, | 166 // Test that specifying a method AND basic-card means that all are supported, |
| 137 // but with the method as first. | 167 // but with the method as first. |
| 138 TEST(PaymentRequestTest, SupportedMethods_BasicCard_WithSpecificMethod) { | 168 TEST_F(PaymentRequestTest, SupportedMethods_BasicCard_WithSpecificMethod) { |
| 139 web::PaymentRequest web_payment_request; | 169 web::PaymentRequest web_payment_request; |
| 140 autofill::TestPersonalDataManager personal_data_manager; | 170 autofill::TestPersonalDataManager personal_data_manager; |
| 141 | 171 |
| 142 payments::PaymentMethodData method_datum1; | 172 payments::PaymentMethodData method_datum1; |
| 143 method_datum1.supported_methods.push_back("jcb"); | 173 method_datum1.supported_methods.push_back("jcb"); |
| 144 method_datum1.supported_methods.push_back("basic-card"); | 174 method_datum1.supported_methods.push_back("basic-card"); |
| 145 web_payment_request.method_data.push_back(method_datum1); | 175 web_payment_request.method_data.push_back(method_datum1); |
| 146 | 176 |
| 147 PaymentRequest payment_request(web_payment_request, &personal_data_manager); | 177 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 148 | 178 |
| 149 // All of the basic card networks are supported, but JCB is first because it | 179 // All of the basic card networks are supported, but JCB is first because it |
| 150 // was specified first. | 180 // was specified first. |
| 151 EXPECT_EQ(8u, payment_request.supported_card_networks().size()); | 181 EXPECT_EQ(8u, payment_request.supported_card_networks().size()); |
| 152 EXPECT_EQ("jcb", payment_request.supported_card_networks()[0]); | 182 EXPECT_EQ("jcb", payment_request.supported_card_networks()[0]); |
| 153 EXPECT_EQ("amex", payment_request.supported_card_networks()[1]); | 183 EXPECT_EQ("amex", payment_request.supported_card_networks()[1]); |
| 154 EXPECT_EQ("diners", payment_request.supported_card_networks()[2]); | 184 EXPECT_EQ("diners", payment_request.supported_card_networks()[2]); |
| 155 EXPECT_EQ("discover", payment_request.supported_card_networks()[3]); | 185 EXPECT_EQ("discover", payment_request.supported_card_networks()[3]); |
| 156 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[4]); | 186 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[4]); |
| 157 EXPECT_EQ("mir", payment_request.supported_card_networks()[5]); | 187 EXPECT_EQ("mir", payment_request.supported_card_networks()[5]); |
| 158 EXPECT_EQ("unionpay", payment_request.supported_card_networks()[6]); | 188 EXPECT_EQ("unionpay", payment_request.supported_card_networks()[6]); |
| 159 EXPECT_EQ("visa", payment_request.supported_card_networks()[7]); | 189 EXPECT_EQ("visa", payment_request.supported_card_networks()[7]); |
| 160 } | 190 } |
| 161 | 191 |
| 162 // Test that specifying basic-card with a supported network (with previous | 192 // Test that specifying basic-card with a supported network (with previous |
| 163 // supported methods) will work as expected | 193 // supported methods) will work as expected |
| 164 TEST(PaymentRequestTest, SupportedMethods_BasicCard_Overlap) { | 194 TEST_F(PaymentRequestTest, SupportedMethods_BasicCard_Overlap) { |
| 165 web::PaymentRequest web_payment_request; | 195 web::PaymentRequest web_payment_request; |
| 166 autofill::TestPersonalDataManager personal_data_manager; | 196 autofill::TestPersonalDataManager personal_data_manager; |
| 167 | 197 |
| 168 payments::PaymentMethodData method_datum1; | 198 payments::PaymentMethodData method_datum1; |
| 169 method_datum1.supported_methods.push_back("mastercard"); | 199 method_datum1.supported_methods.push_back("mastercard"); |
| 170 method_datum1.supported_methods.push_back("visa"); | 200 method_datum1.supported_methods.push_back("visa"); |
| 171 web_payment_request.method_data.push_back(method_datum1); | 201 web_payment_request.method_data.push_back(method_datum1); |
| 172 payments::PaymentMethodData method_datum2; | 202 payments::PaymentMethodData method_datum2; |
| 173 method_datum2.supported_methods.push_back("basic-card"); | 203 method_datum2.supported_methods.push_back("basic-card"); |
| 174 method_datum2.supported_networks.push_back("visa"); | 204 method_datum2.supported_networks.push_back("visa"); |
| 175 method_datum2.supported_networks.push_back("mastercard"); | 205 method_datum2.supported_networks.push_back("mastercard"); |
| 176 method_datum2.supported_networks.push_back("unionpay"); | 206 method_datum2.supported_networks.push_back("unionpay"); |
| 177 web_payment_request.method_data.push_back(method_datum2); | 207 web_payment_request.method_data.push_back(method_datum2); |
| 178 | 208 |
| 179 PaymentRequest payment_request(web_payment_request, &personal_data_manager); | 209 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 180 | 210 |
| 181 EXPECT_EQ(3u, payment_request.supported_card_networks().size()); | 211 EXPECT_EQ(3u, payment_request.supported_card_networks().size()); |
| 182 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[0]); | 212 EXPECT_EQ("mastercard", payment_request.supported_card_networks()[0]); |
| 183 EXPECT_EQ("visa", payment_request.supported_card_networks()[1]); | 213 EXPECT_EQ("visa", payment_request.supported_card_networks()[1]); |
| 184 EXPECT_EQ("unionpay", payment_request.supported_card_networks()[2]); | 214 EXPECT_EQ("unionpay", payment_request.supported_card_networks()[2]); |
| 185 } | 215 } |
| 186 | 216 |
| 187 // Test that specifying basic-card with supported networks after specifying | 217 // Test that specifying basic-card with supported networks after specifying |
| 188 // some methods | 218 // some methods |
| 189 TEST(PaymentRequestTest, SupportedMethods_BasicCard_WithSupportedNetworks) { | 219 TEST_F(PaymentRequestTest, SupportedMethods_BasicCard_WithSupportedNetworks) { |
| 190 web::PaymentRequest web_payment_request; | 220 web::PaymentRequest web_payment_request; |
| 191 autofill::TestPersonalDataManager personal_data_manager; | 221 autofill::TestPersonalDataManager personal_data_manager; |
| 192 | 222 |
| 193 payments::PaymentMethodData method_datum1; | 223 payments::PaymentMethodData method_datum1; |
| 194 method_datum1.supported_methods.push_back("basic-card"); | 224 method_datum1.supported_methods.push_back("basic-card"); |
| 195 method_datum1.supported_networks.push_back("visa"); | 225 method_datum1.supported_networks.push_back("visa"); |
| 196 method_datum1.supported_networks.push_back("unionpay"); | 226 method_datum1.supported_networks.push_back("unionpay"); |
| 197 web_payment_request.method_data.push_back(method_datum1); | 227 web_payment_request.method_data.push_back(method_datum1); |
| 198 | 228 |
| 199 PaymentRequest payment_request(web_payment_request, &personal_data_manager); | 229 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 200 | 230 |
| 201 // Only the specified networks are supported. | 231 // Only the specified networks are supported. |
| 202 EXPECT_EQ(2u, payment_request.supported_card_networks().size()); | 232 EXPECT_EQ(2u, payment_request.supported_card_networks().size()); |
| 203 EXPECT_EQ("visa", payment_request.supported_card_networks()[0]); | 233 EXPECT_EQ("visa", payment_request.supported_card_networks()[0]); |
| 204 EXPECT_EQ("unionpay", payment_request.supported_card_networks()[1]); | 234 EXPECT_EQ("unionpay", payment_request.supported_card_networks()[1]); |
| 205 } | 235 } |
| 206 | 236 |
| 207 // Tests that credit cards can be added to the list of cached credit cards. | 237 // Tests that credit cards can be added to the list of cached credit cards. |
| 208 TEST(PaymentRequestTest, AddCreditCard) { | 238 TEST_F(PaymentRequestTest, AddCreditCard) { |
| 209 web::PaymentRequest web_payment_request; | 239 web::PaymentRequest web_payment_request; |
| 210 autofill::TestPersonalDataManager personal_data_manager; | 240 autofill::TestPersonalDataManager personal_data_manager; |
| 211 | 241 |
| 212 PaymentRequest payment_request(web_payment_request, &personal_data_manager); | 242 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 213 EXPECT_EQ(0U, payment_request.credit_cards().size()); | 243 EXPECT_EQ(0U, payment_request.credit_cards().size()); |
| 214 | 244 |
| 215 autofill::CreditCard credit_card = autofill::test::GetCreditCard(); | 245 autofill::CreditCard credit_card = autofill::test::GetCreditCard(); |
| 216 autofill::CreditCard* added_credit_card = | 246 autofill::CreditCard* added_credit_card = |
| 217 payment_request.AddCreditCard(credit_card); | 247 payment_request.AddCreditCard(credit_card); |
| 218 | 248 |
| 219 ASSERT_EQ(1U, payment_request.credit_cards().size()); | 249 ASSERT_EQ(1U, payment_request.credit_cards().size()); |
| 220 EXPECT_EQ(credit_card, *added_credit_card); | 250 EXPECT_EQ(credit_card, *added_credit_card); |
| 221 } | 251 } |
| 252 |
| 253 // Test that parsing shipping options works as expected. |
| 254 TEST_F(PaymentRequestTest, SelectedShippingOptions) { |
| 255 web::PaymentRequest web_payment_request; |
| 256 autofill::TestPersonalDataManager personal_data_manager; |
| 257 |
| 258 web::PaymentDetails details; |
| 259 std::vector<web::PaymentShippingOption> shipping_options; |
| 260 web::PaymentShippingOption option1; |
| 261 option1.id = base::UTF8ToUTF16("option:1"); |
| 262 option1.selected = false; |
| 263 shipping_options.push_back(std::move(option1)); |
| 264 web::PaymentShippingOption option2; |
| 265 option2.id = base::UTF8ToUTF16("option:2"); |
| 266 option2.selected = true; |
| 267 shipping_options.push_back(std::move(option2)); |
| 268 web::PaymentShippingOption option3; |
| 269 option3.id = base::UTF8ToUTF16("option:3"); |
| 270 option3.selected = true; |
| 271 shipping_options.push_back(std::move(option3)); |
| 272 details.shipping_options = std::move(shipping_options); |
| 273 web_payment_request.details = std::move(details); |
| 274 |
| 275 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 276 // The last one marked "selected" should be selected. |
| 277 EXPECT_EQ(base::UTF8ToUTF16("option:3"), |
| 278 payment_request.selected_shipping_option()->id); |
| 279 |
| 280 // Simulate an update that no longer has any shipping options. There is no |
| 281 // longer a selected shipping option. |
| 282 web::PaymentDetails new_details; |
| 283 payment_request.UpdatePaymentDetails(std::move(new_details)); |
| 284 EXPECT_EQ(nullptr, payment_request.selected_shipping_option()); |
| 285 } |
| 286 |
| 287 // Test that loading profiles when none are available works as expected. |
| 288 TEST_F(PaymentRequestTest, SelectedProfiles_NoProfiles) { |
| 289 autofill::TestPersonalDataManager personal_data_manager; |
| 290 web::PaymentRequest web_payment_request; |
| 291 web_payment_request.details = CreateDetailsWithShippingOption(); |
| 292 web_payment_request.options = CreatePaymentOptions( |
| 293 /*request_payer_name=*/true, /*request_payer_phone=*/true, |
| 294 /*request_payer_email=*/true, /*request_shipping=*/true); |
| 295 |
| 296 // No profiles are selected because none are available! |
| 297 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 298 EXPECT_EQ(nullptr, payment_request.selected_shipping_profile()); |
| 299 EXPECT_EQ(nullptr, payment_request.selected_contact_profile()); |
| 300 } |
| 301 |
| 302 // Test that loading complete shipping and contact profiles works as expected. |
| 303 TEST_F(PaymentRequestTest, SelectedProfiles_Complete) { |
| 304 autofill::TestPersonalDataManager personal_data_manager; |
| 305 autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
| 306 address.set_use_count(5U); |
| 307 personal_data_manager.AddTestingProfile(&address); |
| 308 autofill::AutofillProfile address2 = autofill::test::GetFullProfile2(); |
| 309 address2.set_use_count(15U); |
| 310 personal_data_manager.AddTestingProfile(&address2); |
| 311 |
| 312 web::PaymentRequest web_payment_request; |
| 313 web_payment_request.details = CreateDetailsWithShippingOption(); |
| 314 web_payment_request.options = CreatePaymentOptions( |
| 315 /*request_payer_name=*/true, /*request_payer_phone=*/true, |
| 316 /*request_payer_email=*/true, /*request_shipping=*/true); |
| 317 |
| 318 // address2 is selected because it has the most use count (Frecency model). |
| 319 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 320 EXPECT_EQ(address2.guid(), |
| 321 payment_request.selected_shipping_profile()->guid()); |
| 322 EXPECT_EQ(address2.guid(), |
| 323 payment_request.selected_contact_profile()->guid()); |
| 324 } |
| 325 |
| 326 // Test that loading complete shipping and contact profiles, when there are no |
| 327 // shipping options available, works as expected. |
| 328 TEST_F(PaymentRequestTest, SelectedProfiles_Complete_NoShippingOption) { |
| 329 autofill::TestPersonalDataManager personal_data_manager; |
| 330 autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
| 331 address.set_use_count(5U); |
| 332 personal_data_manager.AddTestingProfile(&address); |
| 333 |
| 334 web::PaymentRequest web_payment_request; |
| 335 // No shipping options. |
| 336 web_payment_request.details = web::PaymentDetails(); |
| 337 web_payment_request.options = CreatePaymentOptions( |
| 338 /*request_payer_name=*/true, /*request_payer_phone=*/true, |
| 339 /*request_payer_email=*/true, /*request_shipping=*/true); |
| 340 |
| 341 // No shipping profile is selected because the merchant has not selected a |
| 342 // shipping option. However there is a suitable contact profile. |
| 343 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 344 EXPECT_EQ(nullptr, payment_request.selected_shipping_profile()); |
| 345 EXPECT_EQ(address.guid(), payment_request.selected_contact_profile()->guid()); |
| 346 } |
| 347 |
| 348 // Test that loading incomplete shipping and contact profiles works as expected. |
| 349 TEST_F(PaymentRequestTest, SelectedProfiles_Incomplete) { |
| 350 autofill::TestPersonalDataManager personal_data_manager; |
| 351 // Add a profile with no phone (incomplete). |
| 352 autofill::AutofillProfile address1 = autofill::test::GetFullProfile(); |
| 353 address1.SetInfo(autofill::AutofillType(autofill::PHONE_HOME_WHOLE_NUMBER), |
| 354 base::string16(), "en-US"); |
| 355 address1.set_use_count(5U); |
| 356 personal_data_manager.AddTestingProfile(&address1); |
| 357 // Add a complete profile, with fewer use counts. |
| 358 autofill::AutofillProfile address2 = autofill::test::GetFullProfile2(); |
| 359 address2.set_use_count(3U); |
| 360 personal_data_manager.AddTestingProfile(&address2); |
| 361 |
| 362 web::PaymentRequest web_payment_request; |
| 363 web_payment_request.details = CreateDetailsWithShippingOption(); |
| 364 web_payment_request.options = CreatePaymentOptions( |
| 365 /*request_payer_name=*/true, /*request_payer_phone=*/true, |
| 366 /*request_payer_email=*/true, /*request_shipping=*/true); |
| 367 |
| 368 // Even though address1 has more use counts, address2 is selected because it |
| 369 // is complete. |
| 370 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 371 EXPECT_EQ(address2.guid(), |
| 372 payment_request.selected_shipping_profile()->guid()); |
| 373 EXPECT_EQ(address2.guid(), |
| 374 payment_request.selected_contact_profile()->guid()); |
| 375 } |
| 376 |
| 377 // Test that loading incomplete contact profiles works as expected when the |
| 378 // merchant is not interested in the missing field. Test that the most complete |
| 379 // shipping profile is selected. |
| 380 TEST_F(PaymentRequestTest, |
| 381 SelectedProfiles_IncompleteContact_NoRequestPayerPhone) { |
| 382 autofill::TestPersonalDataManager personal_data_manager; |
| 383 // Add a profile with no phone (incomplete). |
| 384 autofill::AutofillProfile address1 = autofill::test::GetFullProfile(); |
| 385 address1.SetInfo(autofill::AutofillType(autofill::PHONE_HOME_WHOLE_NUMBER), |
| 386 base::string16(), "en-US"); |
| 387 address1.set_use_count(5U); |
| 388 personal_data_manager.AddTestingProfile(&address1); |
| 389 // Add a complete profile, with fewer use counts. |
| 390 autofill::AutofillProfile address2 = autofill::test::GetFullProfile(); |
| 391 address2.set_use_count(3U); |
| 392 personal_data_manager.AddTestingProfile(&address2); |
| 393 |
| 394 web::PaymentRequest web_payment_request; |
| 395 web_payment_request.details = CreateDetailsWithShippingOption(); |
| 396 // The merchant doesn't care about the phone number. |
| 397 web_payment_request.options = CreatePaymentOptions( |
| 398 /*request_payer_name=*/true, /*request_payer_phone=*/false, |
| 399 /*request_payer_email=*/true, /*request_shipping=*/true); |
| 400 |
| 401 // address1 has more use counts, and even though it has no phone number, it's |
| 402 // still selected as the contact profile because merchant doesn't require |
| 403 // phone. address2 is selected as the shipping profile because it's the most |
| 404 // complete for shipping. |
| 405 PaymentRequest payment_request(web_payment_request, &personal_data_manager); |
| 406 EXPECT_EQ(address2.guid(), |
| 407 payment_request.selected_shipping_profile()->guid()); |
| 408 EXPECT_EQ(address1.guid(), |
| 409 payment_request.selected_contact_profile()->guid()); |
| 410 } |
| OLD | NEW |