Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(944)

Side by Side Diff: ios/chrome/browser/payments/payment_request_unittest.mm

Issue 2878763002: [Payments] Better default selections on iOS (Closed)
Patch Set: fix test, really Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 }
OLDNEW
« no previous file with comments | « ios/chrome/browser/payments/payment_request.mm ('k') | ios/chrome/browser/ui/payments/payment_request_coordinator.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698