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

Side by Side Diff: components/autofill/core/browser/validation_unittest.cc

Issue 2713873002: [Payments] Add validation for unsupported credit card types in editor. (Closed)
Patch Set: addressed comments Created 3 years, 9 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
« no previous file with comments | « components/autofill/core/browser/validation.cc ('k') | components/payments_strings.grdp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/autofill/core/browser/validation.h" 5 #include "components/autofill/core/browser/validation.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/strings/string16.h" 10 #include "base/strings/string16.h"
(...skipping 20 matching lines...) Expand all
31 const int month; 31 const int month;
32 }; 32 };
33 33
34 struct SecurityCodeCardTypePair { 34 struct SecurityCodeCardTypePair {
35 const char* security_code; 35 const char* security_code;
36 const char* card_type; 36 const char* card_type;
37 }; 37 };
38 38
39 // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card _numbers.htm 39 // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card _numbers.htm
40 const char* const kValidNumbers[] = { 40 const char* const kValidNumbers[] = {
41 "378282246310005", 41 "378282246310005",
42 "3714 4963 5398 431", 42 "3714 4963 5398 431",
43 "3787-3449-3671-000", 43 "3787-3449-3671-000",
44 "5610591081018250", 44 "5610591081018250",
45 "3056 9309 0259 04", 45 "3056 9309 0259 04",
46 "3852-0000-0232-37", 46 "3852-0000-0232-37",
47 "6011111111111117", 47 "6011111111111117",
48 "6011 0009 9013 9424", 48 "6011 0009 9013 9424",
49 "3530-1113-3330-0000", 49 "3530-1113-3330-0000",
50 "3566002020360505", 50 "3566002020360505",
51 "5555 5555 5555 4444", 51 "5555 5555 5555 4444", // Mastercard.
52 "5105-1051-0510-5100", 52 "5105-1051-0510-5100",
53 "4111111111111111", 53 "4111111111111111", // Visa.
54 "4012 8888 8888 1881", 54 "4012 8888 8888 1881",
55 "4222-2222-2222-2", 55 "4222-2222-2222-2",
56 "5019717010103742", 56 "5019717010103742",
57 "6331101999990016", 57 "6331101999990016",
58 "6247130048162403", 58 "6247130048162403",
59 }; 59 };
60 const char* const kInvalidNumbers[] = { 60 const char* const kInvalidNumbers[] = {
61 "4111 1111 112", /* too short */ 61 "4111 1111 112", /* too short */
62 "41111111111111111115", /* too long */ 62 "41111111111111111115", /* too long */
63 "4111-1111-1111-1110", /* wrong Luhn checksum */ 63 "4111-1111-1111-1110", /* wrong Luhn checksum */
64 "3056 9309 0259 04aa", /* non-digit characters */ 64 "3056 9309 0259 04aa", /* non-digit characters */
65 }; 65 };
66 const char kCurrentDate[]="1 May 2013"; 66 const char kCurrentDate[]="1 May 2013";
67 const IntExpirationDate kValidCreditCardIntExpirationDate[] = { 67 const IntExpirationDate kValidCreditCardIntExpirationDate[] = {
68 { 2013, 5 }, // Valid month in current year. 68 { 2013, 5 }, // Valid month in current year.
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 ValidationCase("05/1987", 223 ValidationCase("05/1987",
224 CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 224 CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR,
225 false, 225 false,
226 IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE), 226 IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE),
227 ValidationCase("05/12", 227 ValidationCase("05/12",
228 CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 228 CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR,
229 false, 229 false,
230 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED))); 230 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED)));
231 231
232 INSTANTIATE_TEST_CASE_P( 232 INSTANTIATE_TEST_CASE_P(
233 CreditCardNumber,
234 AutofillTypeValidationTest,
235 testing::Values(
236 ValidationCase(kValidNumbers[0], CREDIT_CARD_NUMBER, true, 0),
237 ValidationCase(kValidNumbers[1], CREDIT_CARD_NUMBER, true, 0),
238 ValidationCase(kValidNumbers[2], CREDIT_CARD_NUMBER, true, 0),
239 ValidationCase(kValidNumbers[3], CREDIT_CARD_NUMBER, true, 0),
240 ValidationCase(kValidNumbers[4], CREDIT_CARD_NUMBER, true, 0),
241 ValidationCase(kValidNumbers[5], CREDIT_CARD_NUMBER, true, 0),
242 ValidationCase(kValidNumbers[6], CREDIT_CARD_NUMBER, true, 0),
243 ValidationCase(kValidNumbers[7], CREDIT_CARD_NUMBER, true, 0),
244 ValidationCase(kValidNumbers[8], CREDIT_CARD_NUMBER, true, 0),
245 ValidationCase(kValidNumbers[9], CREDIT_CARD_NUMBER, true, 0),
246 ValidationCase(kValidNumbers[10], CREDIT_CARD_NUMBER, true, 0),
247 ValidationCase(kValidNumbers[11], CREDIT_CARD_NUMBER, true, 0),
248 ValidationCase(kValidNumbers[12], CREDIT_CARD_NUMBER, true, 0),
249 ValidationCase(kValidNumbers[13], CREDIT_CARD_NUMBER, true, 0),
250 ValidationCase(kValidNumbers[14], CREDIT_CARD_NUMBER, true, 0),
251 ValidationCase(kValidNumbers[15], CREDIT_CARD_NUMBER, true, 0),
252 ValidationCase(kValidNumbers[16], CREDIT_CARD_NUMBER, true, 0),
253 ValidationCase(kValidNumbers[17], CREDIT_CARD_NUMBER, true, 0),
254
255 ValidationCase(kInvalidNumbers[0],
256 CREDIT_CARD_NUMBER,
257 false,
258 IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE),
259 ValidationCase(kInvalidNumbers[1],
260 CREDIT_CARD_NUMBER,
261 false,
262 IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE),
263 ValidationCase(kInvalidNumbers[2],
264 CREDIT_CARD_NUMBER,
265 false,
266 IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE),
267 ValidationCase(kInvalidNumbers[3],
268 CREDIT_CARD_NUMBER,
269 false,
270 IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE)));
271
272 INSTANTIATE_TEST_CASE_P(
273 CreditCardMonth, 233 CreditCardMonth,
274 AutofillTypeValidationTest, 234 AutofillTypeValidationTest,
275 testing::Values( 235 testing::Values(
276 ValidationCase("01", CREDIT_CARD_EXP_MONTH, true, 0), 236 ValidationCase("01", CREDIT_CARD_EXP_MONTH, true, 0),
277 ValidationCase("1", CREDIT_CARD_EXP_MONTH, true, 0), 237 ValidationCase("1", CREDIT_CARD_EXP_MONTH, true, 0),
278 ValidationCase("12", CREDIT_CARD_EXP_MONTH, true, 0), 238 ValidationCase("12", CREDIT_CARD_EXP_MONTH, true, 0),
279 ValidationCase( 239 ValidationCase(
280 "0", 240 "0",
281 CREDIT_CARD_EXP_MONTH, 241 CREDIT_CARD_EXP_MONTH,
282 false, 242 false,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 "123", 305 "123",
346 CREDIT_CARD_EXP_4_DIGIT_YEAR, 306 CREDIT_CARD_EXP_4_DIGIT_YEAR,
347 false, 307 false,
348 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), 308 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR),
349 ValidationCase( 309 ValidationCase(
350 "87", 310 "87",
351 CREDIT_CARD_EXP_4_DIGIT_YEAR, 311 CREDIT_CARD_EXP_4_DIGIT_YEAR,
352 false, 312 false,
353 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR))); 313 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR)));
354 314
315 struct CCNumberCase {
316 CCNumberCase(const char* value,
317 const std::set<std::string> supported_basic_card_networks,
318 bool expected_valid,
319 int expected_error_id)
320 : value(value),
321 supported_basic_card_networks(supported_basic_card_networks),
322 expected_valid(expected_valid),
323 expected_error_id(expected_error_id) {}
324 ~CCNumberCase() {}
325
326 const char* const value;
327 const std::set<std::string> supported_basic_card_networks;
328 const bool expected_valid;
329 const int expected_error_id;
330 };
331
332 class AutofillCCNumberValidationTest
333 : public testing::TestWithParam<CCNumberCase> {};
334
335 TEST_P(AutofillCCNumberValidationTest, IsValidCreditCardNumber) {
336 base::string16 error_message;
337 EXPECT_EQ(GetParam().expected_valid,
338 IsValidCreditCardNumberForBasicCardNetworks(
339 ASCIIToUTF16(GetParam().value),
340 GetParam().supported_basic_card_networks, &error_message))
341 << "Failed to validate CC number " << GetParam().value;
342 if (!GetParam().expected_valid) {
343 EXPECT_EQ(l10n_util::GetStringUTF16(GetParam().expected_error_id),
344 error_message);
345 }
346 }
347
348 const static std::set<std::string> kAllBasicCardNetworks{
349 "amex", "discover", "diners", "jcb",
350 "mastercard", "mir", "unionpay", "visa"};
351
352 INSTANTIATE_TEST_CASE_P(
353 CreditCardNumber,
354 AutofillCCNumberValidationTest,
355 testing::Values(
356 CCNumberCase(kValidNumbers[0], kAllBasicCardNetworks, true, 0),
357 CCNumberCase(kValidNumbers[1], kAllBasicCardNetworks, true, 0),
358 CCNumberCase(kValidNumbers[2], kAllBasicCardNetworks, true, 0),
359 // Generic card not supported.
360 CCNumberCase(kValidNumbers[3],
361 kAllBasicCardNetworks,
362 false,
363 IDS_PAYMENTS_VALIDATION_UNSUPPORTED_CREDIT_CARD_TYPE),
364
365 CCNumberCase(kValidNumbers[4], kAllBasicCardNetworks, true, 0),
366 CCNumberCase(kValidNumbers[5], kAllBasicCardNetworks, true, 0),
367 CCNumberCase(kValidNumbers[6], kAllBasicCardNetworks, true, 0),
368 CCNumberCase(kValidNumbers[7], kAllBasicCardNetworks, true, 0),
369 CCNumberCase(kValidNumbers[8], kAllBasicCardNetworks, true, 0),
370 CCNumberCase(kValidNumbers[9], kAllBasicCardNetworks, true, 0),
371 CCNumberCase(kValidNumbers[10], kAllBasicCardNetworks, true, 0),
372 CCNumberCase(kValidNumbers[11], kAllBasicCardNetworks, true, 0),
373 CCNumberCase(kValidNumbers[12], kAllBasicCardNetworks, true, 0),
374 CCNumberCase(kValidNumbers[13], kAllBasicCardNetworks, true, 0),
375 CCNumberCase(kValidNumbers[14], kAllBasicCardNetworks, true, 0),
376 // Generic cards not supported.
377 CCNumberCase(kValidNumbers[15],
378 kAllBasicCardNetworks,
379 false,
380 IDS_PAYMENTS_VALIDATION_UNSUPPORTED_CREDIT_CARD_TYPE),
381 CCNumberCase(kValidNumbers[16],
382 kAllBasicCardNetworks,
383 false,
384 IDS_PAYMENTS_VALIDATION_UNSUPPORTED_CREDIT_CARD_TYPE),
385
386 CCNumberCase(kValidNumbers[17], kAllBasicCardNetworks, true, 0),
387
388 CCNumberCase(kInvalidNumbers[0],
389 kAllBasicCardNetworks,
390 false,
391 IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE),
392 CCNumberCase(kInvalidNumbers[1],
393 kAllBasicCardNetworks,
394 false,
395 IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE),
396 CCNumberCase(kInvalidNumbers[2],
397 kAllBasicCardNetworks,
398 false,
399 IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE),
400 CCNumberCase(kInvalidNumbers[3],
401 kAllBasicCardNetworks,
402 false,
403 IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE),
404
405 // Valid numbers can still be invalid if the type is not supported.
406 CCNumberCase(kValidNumbers[10], // Mastercard number.
407 {"visa"},
408 false,
409 IDS_PAYMENTS_VALIDATION_UNSUPPORTED_CREDIT_CARD_TYPE),
410 CCNumberCase(kValidNumbers[12], // Visa number.
411 {"jcb", "diners", "unionpay", "mastercard"},
412 false,
413 IDS_PAYMENTS_VALIDATION_UNSUPPORTED_CREDIT_CARD_TYPE)));
414
355 } // namespace autofill 415 } // namespace autofill
OLDNEW
« no previous file with comments | « components/autofill/core/browser/validation.cc ('k') | components/payments_strings.grdp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698