1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/json/json_reader.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/json/json_writer.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/message_loop/message_loop.h" 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/run_loop.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/strings/string_split.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/strings/stringprintf.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/full_wallet.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/instrument.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_client.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_client_delegate.h" 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_items.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_test_util.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_metrics.h" 23a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h" 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "net/base/escape.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/net_errors.h" 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/http/http_request_headers.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/http_status_code.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_fetcher_delegate.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_request_status.h" 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "net/url_request/url_request_test_util.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace autofill { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace wallet { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGoogleTransactionId[] = "google-transaction-id"; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kMerchantUrl[] = "https://example.com/path?key=value"; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetFullWalletValidResponse[] = 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"expiration_month\":12," 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"expiration_year\":3000," 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"iin\":\"iin\"," 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"rest\":\"rest\"," 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"billing_address\":" 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\":\"id\"," 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"phone_number\":\"phone_number\"," 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"postal_address\":" 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"recipient_name\":\"recipient_name\"," 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address_line\":" 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address_line_1\"," 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address_line_2\"" 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]," 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"locality_name\":\"locality_name\"," 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"administrative_area_name\":\"administrative_area_name\"," 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"postal_code_number\":\"postal_code_number\"," 65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"country_name_code\":\"US\"," 66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"language_code\":\"language_code\"" 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"shipping_address\":" 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\":\"ship_id\"," 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"phone_number\":\"ship_phone_number\"," 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"postal_address\":" 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"recipient_name\":\"ship_recipient_name\"," 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address_line\":" 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"ship_address_line_1\"," 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"ship_address_line_2\"" 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]," 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"locality_name\":\"ship_locality_name\"," 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"administrative_area_name\":\"ship_administrative_area_name\"," 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"postal_code_number\":\"ship_postal_code_number\"," 84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"country_name_code\":\"US\"," 85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"language_code\":\"ship_language_code\"" 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetFullWalletInvalidResponse[] = 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"garbage\":123" 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetWalletItemsValidResponse[] = 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]," 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"google_transaction_id\":\"google_transaction_id\"," 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"instrument\":" 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"descriptive_name\":\"descriptive_name\"," 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"type\":\"VISA\"," 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"last_four_digits\":\"4111\"," 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"expiration_month\":12," 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"expiration_year\":3000," 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"brand\":\"monkeys\"," 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"billing_address\":" 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"name\":\"name\"," 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address1\":\"address1\"," 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address2\":\"address2\"," 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"city\":\"city\"," 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"state\":\"state\"," 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"postal_code\":\"postal_code\"," 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"phone_number\":\"phone_number\"," 122a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"country_code\":\"US\"," 123a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"language_code\":\"language_code\"" 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"status\":\"VALID\"," 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"object_id\":\"default_instrument_id\"" 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]," 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"default_instrument_id\":\"default_instrument_id\"," 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"obfuscated_gaia_id\":\"obfuscated_gaia_id\"," 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address\":" 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]," 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"default_address_id\":\"default_address_id\"," 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_legal_document\":" 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveAddressValidResponse[] = 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"shipping_address_id\":\"saved_address_id\"" 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveAddressWithRequiredActionsValidResponse[] = 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"form_field_error\":" 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " [" 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " {" 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"location\":\"SHIPPING_ADDRESS\"," 1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"type\":\"INVALID_POSTAL_CODE\"" 1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " }" 1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " ]," 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" \\treqUIRE_PhOnE_number \\n\\r\"," 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"INVALID_form_field\"" 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveWithInvalidRequiredActionsResponse[] = 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" setup_wallet\"," 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" \\treqUIRE_PhOnE_number \\n\\r\"," 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"INVALID_form_field\"" 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInvalidResponse[] = 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"garbage\":123" 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentValidResponse[] = 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"instrument_id\":\"instrument_id\"" 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentWithRequiredActionsValidResponse[] = 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"form_field_error\":" 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " [" 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " {" 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"location\":\"SHIPPING_ADDRESS\"," 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"type\":\"INVALID_POSTAL_CODE\"" 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " }" 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " ]," 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" \\treqUIRE_PhOnE_number \\n\\r\"," 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"INVALID_form_field\"" 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentAndAddressValidResponse[] = 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"shipping_address_id\":\"saved_address_id\"," 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"instrument_id\":\"saved_instrument_id\"" 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentAndAddressWithRequiredActionsValidResponse[] = 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"form_field_error\":" 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " [" 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " {" 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"location\":\"SHIPPING_ADDRESS\"," 2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"type\":\"INVALID_POSTAL_CODE\"" 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " }" 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " ]," 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" \\treqUIRE_PhOnE_number \\n\\r\"," 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"INVALID_form_field\"" 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUpdateInstrumentValidResponse[] = 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"instrument_id\":\"instrument_id\"" 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUpdateAddressValidResponse[] = 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"shipping_address_id\":\"shipping_address_id\"" 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUpdateWithRequiredActionsValidResponse[] = 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"form_field_error\":" 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " [" 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " {" 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"location\":\"SHIPPING_ADDRESS\"," 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"type\":\"INVALID_POSTAL_CODE\"" 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " }" 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " ]," 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" \\treqUIRE_PhOnE_number \\n\\r\"," 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"INVALID_form_field\"" 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUpdateMalformedResponse[] = 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"cheese\":\"monkeys\"" 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kAuthenticateInstrumentFailureResponse[] = 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"auth_result\":\"anything else\"" 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kAuthenticateInstrumentSuccessResponse[] = 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"auth_result\":\"SUCCESS\"" 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kErrorResponse[] = 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_type\":\"APPLICATION_ERROR\"," 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_detail\":\"error_detail\"," 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"application_error\":\"application_error\"," 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"debug_data\":" 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"debug_message\":\"debug_message\"," 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"stack_trace\":\"stack_trace\"" 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"application_error_data\":\"application_error_data\"," 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"wallet_error\":" 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_type\":\"SERVICE_UNAVAILABLE\"," 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_detail\":\"error_detail\"," 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"message_for_user\":" 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"text\":\"text\"," 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"subtext\":\"subtext\"," 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"details\":\"details\"" 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kErrorResponseSpendingLimitExceeded[] = 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{" 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"error_type\":\"APPLICATION_ERROR\"," 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"error_detail\":\"error_detail\"," 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"application_error\":\"application_error\"," 2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"debug_data\":" 2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " {" 2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"debug_message\":\"debug_message\"," 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"stack_trace\":\"stack_trace\"" 2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " }," 2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"application_error_data\":\"application_error_data\"," 2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"wallet_error\":" 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " {" 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"error_type\":\"SPENDING_LIMIT_EXCEEDED\"," 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"error_detail\":\"error_detail\"," 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"message_for_user\":" 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " {" 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"text\":\"text\"," 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"subtext\":\"subtext\"," 3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"details\":\"details\"" 3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " }" 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " }" 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "}"; 3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kErrorTypeMissingInResponse[] = 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_type\":\"Not APPLICATION_ERROR\"," 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_detail\":\"error_detail\"," 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"application_error\":\"application_error\"," 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"debug_data\":" 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"debug_message\":\"debug_message\"," 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"stack_trace\":\"stack_trace\"" 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"application_error_data\":\"application_error_data\"" 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The JSON below is used to test against the request payload being sent to 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Online Wallet. It's indented differently since JSONWriter creates compact 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// JSON from DictionaryValues. NB: The values must be alphabetical to pass 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// the tests. 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kAcceptLegalDocumentsValidRequest[] = 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"accepted_legal_document\":" 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"doc_id_1\"," 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"doc_id_2\"" 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google_transaction_id\":\"google-transaction-id\"," 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"" 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kAuthenticateInstrumentValidRequest[] = 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"instrument_id\":\"instrument_id\"," 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"" 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetFullWalletValidRequest[] = 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"feature\":\"REQUEST_AUTOCOMPLETE\"," 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google_transaction_id\":\"google_transaction_id\"," 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 3483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"new_wallet_user\":false," 3493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"phone_number_required\":true," 3503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"risk_params\":\"risky business\"," 3513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"selected_address_id\":\"shipping_address_id\"," 3523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"selected_instrument_id\":\"instrument_id\"," 3533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"supported_risk_challenge\":" 3543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "[" 3553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "]," 3563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"use_minimal_addresses\":false" 3573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "}"; 3583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const char kGetFullWalletValidRequestNewUser[] = 3603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "{" 3613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"feature\":\"REQUEST_AUTOCOMPLETE\"," 3623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"google_transaction_id\":\"google_transaction_id\"," 3633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 3643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"new_wallet_user\":true," 365a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"phone_number_required\":true," 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"," 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"selected_address_id\":\"shipping_address_id\"," 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"selected_instrument_id\":\"instrument_id\"," 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"supported_risk_challenge\":" 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 371a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "]," 372a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"use_minimal_addresses\":false" 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetFullWalletWithRiskCapabilitesValidRequest[] = 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"feature\":\"REQUEST_AUTOCOMPLETE\"," 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google_transaction_id\":\"google_transaction_id\"," 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 3803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "\"new_wallet_user\":false," 381a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"phone_number_required\":true," 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"," 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"selected_address_id\":\"shipping_address_id\"," 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"selected_instrument_id\":\"instrument_id\"," 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"supported_risk_challenge\":" 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"VERIFY_CVC\"" 388a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "]," 389a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"use_minimal_addresses\":false" 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetWalletItemsValidRequest[] = 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 394a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 395a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"phone_number_required\":true," 396a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"shipping_address_required\":true," 397a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"use_minimal_addresses\":false" 398a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "}"; 399a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 400116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kGetWalletItemsWithTransactionDetails[] = 401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{" 402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"currency_code\":\"USD\"," 403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"estimated_total_price\":\"100.00\"," 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"merchant_domain\":\"https://example.com/\"," 405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"phone_number_required\":true," 406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"shipping_address_required\":true," 407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"use_minimal_addresses\":false" 408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "}"; 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 410a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kGetWalletItemsNoShippingRequest[] = 411a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "{" 412a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 413a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"phone_number_required\":true," 414a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"shipping_address_required\":false," 415a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"use_minimal_addresses\":false" 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveAddressValidRequest[] = 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 421a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"phone_number_required\":true," 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"," 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"shipping_address\":" 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"phone_number\":\"save_phone_number\"," 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_address\":" 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line\":" 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"save_address_line_1\"," 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"save_address_line_2\"" 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"administrative_area_name\":\"save_admin_area_name\"," 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 4355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"dependent_locality_name\":\"save_dependent_locality_name\"," 436a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "\"language_code\":\"save_language_code\"," 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"locality_name\":\"save_locality_name\"," 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_code_number\":\"save_postal_code_number\"," 4395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"recipient_name\":\"save_recipient_name\"," 4405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"sorting_code\":\"save_sorting_code\"" 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}" 442a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "}," 443a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"use_minimal_addresses\":false" 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentValidRequest[] = 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"instrument\":" 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"credit_card\":" 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address\":" 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line\":" 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line_1\"," 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line_2\"" 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"administrative_area_name\":\"admin_area_name\"," 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 4615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"dependent_locality_name\":\"dependent_locality_name\"," 462a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "\"language_code\":\"language_code\"," 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"locality_name\":\"locality_name\"," 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_code_number\":\"postal_code_number\"," 4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"recipient_name\":\"recipient_name\"," 4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"sorting_code\":\"sorting_code\"" 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"exp_month\":12," 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"exp_year\":3000," 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"fop_type\":\"VISA\"," 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"last_4_digits\":\"4448\"" 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"type\":\"CREDIT_CARD\"" 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"instrument_phone_number\":\"phone_number\"," 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 477a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"phone_number_required\":true," 478a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"risk_params\":\"risky business\"," 479a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"use_minimal_addresses\":false" 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentAndAddressValidRequest[] = 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"instrument\":" 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"credit_card\":" 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address\":" 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line\":" 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line_1\"," 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line_2\"" 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"administrative_area_name\":\"admin_area_name\"," 496c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 4975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"dependent_locality_name\":\"dependent_locality_name\"," 498a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "\"language_code\":\"language_code\"," 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"locality_name\":\"locality_name\"," 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_code_number\":\"postal_code_number\"," 5015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"recipient_name\":\"recipient_name\"," 5025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"sorting_code\":\"sorting_code\"" 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"exp_month\":12," 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"exp_year\":3000," 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"fop_type\":\"VISA\"," 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"last_4_digits\":\"4448\"" 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"type\":\"CREDIT_CARD\"" 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"instrument_phone_number\":\"phone_number\"," 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 513a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"phone_number_required\":true," 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"," 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"shipping_address\":" 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"phone_number\":\"save_phone_number\"," 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_address\":" 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line\":" 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"save_address_line_1\"," 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"save_address_line_2\"" 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"administrative_area_name\":\"save_admin_area_name\"," 526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"dependent_locality_name\":\"save_dependent_locality_name\"," 528a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "\"language_code\":\"save_language_code\"," 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"locality_name\":\"save_locality_name\"," 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_code_number\":\"save_postal_code_number\"," 5315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"recipient_name\":\"save_recipient_name\"," 5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"sorting_code\":\"save_sorting_code\"" 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}" 534a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "}," 535a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"use_minimal_addresses\":false" 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUpdateAddressValidRequest[] = 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 541a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"phone_number_required\":true," 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"," 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"shipping_address\":" 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 5455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"id\":\"address_id\"," 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"phone_number\":\"ship_phone_number\"," 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_address\":" 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line\":" 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"ship_address_line_1\"," 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"ship_address_line_2\"" 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"administrative_area_name\":\"ship_admin_area_name\"," 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 5565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"dependent_locality_name\":\"ship_dependent_locality_name\"," 557a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "\"language_code\":\"ship_language_code\"," 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"locality_name\":\"ship_locality_name\"," 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_code_number\":\"ship_postal_code_number\"," 5605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"recipient_name\":\"ship_recipient_name\"," 5615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"sorting_code\":\"ship_sorting_code\"" 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}" 563a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "}," 564a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"use_minimal_addresses\":false" 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kUpdateInstrumentAddressValidRequest[] = 568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"instrument_phone_number\":\"phone_number\"," 570c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 571a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"phone_number_required\":true," 572c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"risk_params\":\"risky business\"," 573c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"upgraded_billing_address\":" 574c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line\":" 576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "[" 577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line_1\"," 578c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line_2\"" 579c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "]," 580c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"administrative_area_name\":\"admin_area_name\"," 581c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 5825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"dependent_locality_name\":\"dependent_locality_name\"," 583a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "\"language_code\":\"language_code\"," 584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"locality_name\":\"locality_name\"," 585c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"postal_code_number\":\"postal_code_number\"," 5865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"recipient_name\":\"recipient_name\"," 5875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"sorting_code\":\"sorting_code\"" 588c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}," 5895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"upgraded_instrument_id\":\"default_instrument_id\"," 590a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"use_minimal_addresses\":false" 591c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}"; 592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 593c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kUpdateInstrumentAddressWithNameChangeValidRequest[] = 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 595c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"instrument_phone_number\":\"phone_number\"," 596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 597a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"phone_number_required\":true," 598c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"risk_params\":\"risky business\"," 599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"upgraded_billing_address\":" 600c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 601c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line\":" 602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "[" 603c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line_1\"," 604c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line_2\"" 605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "]," 606c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"administrative_area_name\":\"admin_area_name\"," 607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"dependent_locality_name\":\"dependent_locality_name\"," 609a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "\"language_code\":\"language_code\"," 610c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"locality_name\":\"locality_name\"," 611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"postal_code_number\":\"postal_code_number\"," 6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"recipient_name\":\"recipient_name\"," 6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"sorting_code\":\"sorting_code\"" 614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}," 6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"upgraded_instrument_id\":\"default_instrument_id\"," 616a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"use_minimal_addresses\":false" 617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}"; 618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kUpdateInstrumentExpirationDateValidRequest[] = 620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 621c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"instrument\":" 622c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 623c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"credit_card\":" 624c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"exp_month\":12," 6265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\"exp_year\":3001" 627a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) "}," 628a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) "\"type\":\"CREDIT_CARD\"" 629c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}," 630c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 631a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"phone_number_required\":true," 632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"risk_params\":\"risky business\"," 633a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"upgraded_instrument_id\":\"instrument_id\"," 634a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "\"use_minimal_addresses\":false" 635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}"; 636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MockAutofillMetrics : public AutofillMetrics { 638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockAutofillMetrics() {} 640c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MOCK_CONST_METHOD2(LogWalletApiCallDuration, 641c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void(WalletApiCallMetric metric, 642c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::TimeDelta& duration)); 64358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MOCK_CONST_METHOD1(LogWalletErrorMetric, void(WalletErrorMetric metric)); 64458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MOCK_CONST_METHOD1(LogWalletRequiredActionMetric, 64558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void(WalletRequiredActionMetric action)); 64658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MOCK_CONST_METHOD1(LogWalletMalformedResponseMetric, 64758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void(WalletApiCallMetric metric)); 648c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 649c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockAutofillMetrics); 650c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockWalletClientDelegate : public WalletClientDelegate { 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockWalletClientDelegate() 655a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : full_wallets_received_(0), 656a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) wallet_items_received_(0), 657a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) is_shipping_required_(true) {} 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~MockWalletClientDelegate() {} 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual const AutofillMetrics& GetMetricLogger() const OVERRIDE { 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return metric_logger_; 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual std::string GetRiskData() const OVERRIDE { 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "risky business"; 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual std::string GetWalletCookieValue() const OVERRIDE { 6697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return "gdToken"; 6707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 6717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 672a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual bool IsShippingAddressRequired() const OVERRIDE { 673a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return is_shipping_required_; 674a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 675a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 676a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) void SetIsShippingAddressRequired(bool is_shipping_required) { 677a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) is_shipping_required_ = is_shipping_required; 678a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 679a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectLogWalletApiCallDuration( 681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::WalletApiCallMetric metric, 682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t times) { 683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(metric_logger_, 684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LogWalletApiCallDuration(metric, testing::_)).Times(times); 685c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 686c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 68758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void ExpectLogWalletMalformedResponse( 68858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AutofillMetrics::WalletApiCallMetric metric) { 68958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_CALL(metric_logger_, 69058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LogWalletMalformedResponseMetric(metric)).Times(1); 69158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 69258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 693c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectWalletErrorMetric(AutofillMetrics::WalletErrorMetric metric) { 69458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_CALL(metric_logger_, LogWalletErrorMetric(metric)).Times(1); 695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 697c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectWalletRequiredActionMetric( 698c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::WalletRequiredActionMetric metric) { 69958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_CALL(metric_logger_, 70058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LogWalletRequiredActionMetric(metric)).Times(1); 701c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 702c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 703ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void ExpectBaselineMetrics() { 704c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL( 705c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) metric_logger_, 706c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LogWalletErrorMetric( 707c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::WALLET_ERROR_BASELINE_ISSUED_REQUEST)) 708ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch .Times(1); 709ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ExpectWalletRequiredActionMetric( 710ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch AutofillMetrics::WALLET_REQUIRED_ACTION_BASELINE_ISSUED_REQUEST); 711c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 712c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 713c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockAutofillMetrics* metric_logger() { 714c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return &metric_logger_; 715c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 716c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(OnDidAcceptLegalDocuments, void()); 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(OnDidAuthenticateInstrument, void(bool success)); 719ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch MOCK_METHOD4(OnDidSaveToWallet, 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void(const std::string& instrument_id, 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& shipping_address_id, 7227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::vector<RequiredAction>& required_actions, 7237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::vector<FormFieldError>& form_field_errors)); 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(OnWalletError, void(WalletClient::ErrorType error_type)); 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnDidGetFullWallet(scoped_ptr<FullWallet> full_wallet) OVERRIDE { 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(full_wallet); 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++full_wallets_received_; 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnDidGetWalletItems(scoped_ptr<WalletItems> wallet_items) 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OVERRIDE { 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(wallet_items); 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++wallet_items_received_; 7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t full_wallets_received() const { return full_wallets_received_; } 7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t wallet_items_received() const { return wallet_items_received_; } 7372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t full_wallets_received_; 7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t wallet_items_received_; 741a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool is_shipping_required_; 7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 743c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testing::StrictMock<MockAutofillMetrics> metric_logger_; 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WalletClientTest : public testing::Test { 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 75023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) WalletClientTest() 75123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) : request_context_(new net::TestURLRequestContextGetter( 75223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::MessageLoopProxy::current())) {} 75323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual ~WalletClientTest() {} 75423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 7561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci wallet_client_.reset(new WalletClient( 7571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci request_context_.get(), &delegate_, GURL(kMerchantUrl))); 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE { 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_.reset(); 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 764ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void VerifyAndFinishRequest(net::HttpStatusCode response_code, 765ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& request_body, 766ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& response_body) { 767ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 768ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ASSERT_TRUE(fetcher); 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 770ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& upload_data = fetcher->upload_data(); 771ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(request_body, GetData(upload_data)); 772ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::HttpRequestHeaders request_headers; 773ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch fetcher->GetExtraRequestHeaders(&request_headers); 774ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string auth_header_value; 775ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(request_headers.GetHeader( 776ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::HttpRequestHeaders::kAuthorization, 777ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &auth_header_value)); 778ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("GoogleLogin auth=gdToken", auth_header_value); 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 780ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch fetcher->set_response_code(response_code); 781ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch fetcher->SetResponseString(response_body); 782ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 783a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 784a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Pump the message loop to catch up to any asynchronous tasks that might 785a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // have been posted from OnURLFetchComplete(). 786a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 787b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 788b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 789ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void VerifyAndFinishFormEncodedRequest(net::HttpStatusCode response_code, 790ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& json_payload, 791ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& response_body, 792ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch size_t expected_parameter_number) { 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(fetcher); 795ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 7967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::HttpRequestHeaders request_headers; 7977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->GetExtraRequestHeaders(&request_headers); 7987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string auth_header_value; 7997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(request_headers.GetHeader( 8007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::HttpRequestHeaders::kAuthorization, 8017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch &auth_header_value)); 8027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ("GoogleLogin auth=gdToken", auth_header_value); 803ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 804ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& upload_data = fetcher->upload_data(); 8051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::StringPairs tokens; 806ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::SplitStringIntoKeyValuePairs(upload_data, '=', '&', &tokens); 807ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(tokens.size(), expected_parameter_number); 808ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 809ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch size_t num_params = 0U; 8101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (base::StringPairs::const_iterator iter = tokens.begin(); 8111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci iter != tokens.end(); 8121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++iter) { 8131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& key = iter->first; 8141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& value = iter->second; 815ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 816ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (key == "request_content_type") { 817ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("application/json", value); 818ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch num_params++; 819ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 820ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 821ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (key == "request") { 822ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(json_payload, 823ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetData( 824ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::UnescapeURLComponent( 825ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch value, net::UnescapeRule::URL_SPECIAL_CHARS | 826ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::UnescapeRule::REPLACE_PLUS_WITH_SPACE))); 827ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch num_params++; 828ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 829ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 830ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (key == "cvn") { 831ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("123", value); 832ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch num_params++; 833ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 834ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 835ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (key == "card_number") { 836ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("4444444444444448", value); 837ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch num_params++; 838ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 839ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 840ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (key == "otp") { 841ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_FALSE(value.empty()); 842ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch num_params++; 843ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 844ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 845ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(expected_parameter_number, num_params); 846ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->set_response_code(response_code); 8482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->SetResponseString(response_body); 8492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 8502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void TestWalletErrorCode( 853ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& error_type_string, 854424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const std::string& message_type_for_buyer_string, 855ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::ErrorType expected_error_type, 856ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WalletErrorMetric expected_autofill_metric) { 857ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch static const char kResponseTemplate[] = 858ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "{" 859ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"error_type\":\"APPLICATION_ERROR\"," 860ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"error_detail\":\"error_detail\"," 861ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"application_error\":\"application_error\"," 862ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"debug_data\":" 863ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " {" 864ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"debug_message\":\"debug_message\"," 865ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"stack_trace\":\"stack_trace\"" 866ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }," 867ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"application_error_data\":\"application_error_data\"," 868ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"wallet_error\":" 869ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " {" 870ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"error_type\":\"%s\"," 871ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " %s" // Placeholder for |user_error_type|. 872ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"error_detail\":\"error_detail\"," 873ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"message_for_user\":" 874ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " {" 875ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"text\":\"text\"," 876ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"subtext\":\"subtext\"," 877ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " \"details\":\"details\"" 878ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 879ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 880ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "}"; 881ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_CALL(delegate_, OnWalletError(expected_error_type)).Times(1); 88258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 88358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AutofillMetrics::GET_WALLET_ITEMS, 1); 884ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch delegate_.ExpectBaselineMetrics(); 885ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch delegate_.ExpectWalletErrorMetric(expected_autofill_metric); 886ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wallet_client_->GetWalletItems(base::string16(), base::string16()); 888ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string buyer_error; 889424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!message_type_for_buyer_string.empty()) { 890424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) buyer_error = base::StringPrintf("\"message_type_for_buyer\":\"%s\",", 891424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) message_type_for_buyer_string.c_str()); 892ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 893ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string response = base::StringPrintf(kResponseTemplate, 894ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch error_type_string.c_str(), 895ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch buyer_error.c_str()); 896ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR, 89758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kGetWalletItemsValidRequest, 898ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch response); 899ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 900ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 902a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<WalletClient> wallet_client_; 90423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_refptr<net::TestURLRequestContextGetter> request_context_; 9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockWalletClientDelegate delegate_; 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 908ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string GetData(const std::string& upload_data) { 9095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> root(base::JSONReader::Read(upload_data)); 910ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 911ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // If this is not a JSON dictionary, return plain text. 9125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!root || !root->IsType(base::Value::TYPE_DICTIONARY)) 913ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return upload_data; 914ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 915ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Remove api_key entry (to prevent accidental leak), return JSON as text. 9165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* dict = 9175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<base::DictionaryValue*>(root.get()); 918ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch dict->Remove("api_key", NULL); 919ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string clean_upload_data; 920ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::JSONWriter::Write(dict, &clean_upload_data); 921ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return clean_upload_data; 922ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 923ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 924b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) net::TestURLFetcherFactory factory_; 9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 927ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochTEST_F(WalletClientTest, WalletErrorCodes) { 928ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch struct { 929ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string error_type_string; 930424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string message_type_for_buyer_string; 931ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::ErrorType expected_error_type; 932ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WalletErrorMetric expected_autofill_metric; 933ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } test_cases[] = { 934424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // General |BUYER_ACCOUNT_ERROR| with no |message_type_for_buyer_string|. 935ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { 936ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "buyer_account_error", 937ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "", 938ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::BUYER_ACCOUNT_ERROR, 939ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WALLET_BUYER_ACCOUNT_ERROR 940ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }, 941ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // |BUYER_ACCOUNT_ERROR| with "buyer_legal_address_not_supported" in 942424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // message_type_for_buyer field. 943ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { 944ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "buyer_account_error", 945ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "bla_country_not_supported", 946ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::BUYER_LEGAL_ADDRESS_NOT_SUPPORTED, 947ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WALLET_BUYER_LEGAL_ADDRESS_NOT_SUPPORTED 948ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }, 949424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // |BUYER_ACCOUNT_ERROR| with KYC error code in message_type_for_buyer 950424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // field. 951ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { 952ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "buyer_account_error", 953ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "buyer_kyc_error", 954ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::UNVERIFIED_KNOW_YOUR_CUSTOMER_STATUS, 955ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WALLET_UNVERIFIED_KNOW_YOUR_CUSTOMER_STATUS 956ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }, 957424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // |BUYER_ACCOUNT_ERROR| with un-recognizable |message_type_for_buyer|. 958ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { 959ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "buyer_account_error", 960ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "random_string", 961ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::BUYER_ACCOUNT_ERROR, 962ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WALLET_BUYER_ACCOUNT_ERROR 963ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }, 964ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The following are other error types we could get from Wallet. 965ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { 966ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "unsupported_merchant", 967ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "", 968ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::UNSUPPORTED_MERCHANT, 969ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WALLET_UNSUPPORTED_MERCHANT 970ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }, 971ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { 972ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "internal_error", 973ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "", 974ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::INTERNAL_ERROR, 975ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WALLET_INTERNAL_ERROR 976ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }, 977ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { 978ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "invalid_params", 979ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "", 980ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::INVALID_PARAMS, 981ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WALLET_INVALID_PARAMS 982ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }, 983ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { 984ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "service_unavailable", 985ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "", 986ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::SERVICE_UNAVAILABLE, 987ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WALLET_SERVICE_UNAVAILABLE 988ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }, 989ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { 990ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "unsupported_api_version", 991ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "", 992ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::UNSUPPORTED_API_VERSION, 993ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WALLET_UNSUPPORTED_API_VERSION 994ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }, 995ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Any un-recognizable |error_type| is a |UNKNOWN_ERROR|. 996ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { 997ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "random_string_1", 998ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "", 999ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::UNKNOWN_ERROR, 1000ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WALLET_UNKNOWN_ERROR 1001ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }, 1002ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { 1003ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "random_string_2", 1004ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "", 1005ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WalletClient::UNKNOWN_ERROR, 1006ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillMetrics::WALLET_UNKNOWN_ERROR 1007ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }, 1008ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }; 1009ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1010ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 1011ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SCOPED_TRACE( 1012424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::StringPrintf( 1013424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "%s - %s", 1014424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) test_cases[i].error_type_string.c_str(), 1015424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) test_cases[i].message_type_for_buyer_string.c_str())); 1016ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TestWalletErrorCode(test_cases[i].error_type_string, 1017424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) test_cases[i].message_type_for_buyer_string, 1018ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch test_cases[i].expected_error_type, 1019ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch test_cases[i].expected_autofill_metric); 1020ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 10212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, WalletErrorResponseMissing) { 10252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnWalletError( 10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletClient::UNKNOWN_ERROR)).Times(1); 102758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 102858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AutofillMetrics::GET_WALLET_ITEMS, 1); 1029ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1030c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_UNKNOWN_ERROR); 10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wallet_client_->GetWalletItems(base::string16(), base::string16()); 10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR, 103458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kGetWalletItemsValidRequest, 10352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kErrorTypeMissingInResponse); 10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, NetworkFailureOnExpectedResponse) { 10397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, OnWalletError(WalletClient::NETWORK_ERROR)).Times(1); 1040c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1041c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1042ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1043c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_NETWORK_ERROR); 10442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wallet_client_->GetWalletItems(base::string16(), base::string16()); 1046b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_UNAUTHORIZED, 1047b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) kGetWalletItemsValidRequest, 1048b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) std::string()); 10492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, RequestError) { 10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnWalletError(WalletClient::BAD_REQUEST)).Times(1); 105358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 105458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AutofillMetrics::GET_WALLET_ITEMS, 1); 1055ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1056c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_BAD_REQUEST); 10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1058116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wallet_client_->GetWalletItems(base::string16(), base::string16()); 1059b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_BAD_REQUEST, 106058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kGetWalletItemsValidRequest, 1061b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) std::string()); 10622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, GetFullWalletSuccess) { 1065c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_FULL_WALLET, 1); 1066ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1067c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletClient::FullWalletRequest full_wallet_request( 10692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "instrument_id", 10702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "shipping_address_id", 10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "google_transaction_id", 10723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<WalletClient::RiskCapability>(), 10733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) false); 10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_->GetFullWallet(full_wallet_request); 10752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1076ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1077ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletValidRequest, 1078ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletValidResponse, 1079ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 10802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, delegate_.full_wallets_received()); 10812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(WalletClientTest, GetFullWalletSuccessNewuser) { 10843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_FULL_WALLET, 1); 10853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) delegate_.ExpectBaselineMetrics(); 10863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 10873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) WalletClient::FullWalletRequest full_wallet_request( 10883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "instrument_id", 10893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "shipping_address_id", 10903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "google_transaction_id", 10913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<WalletClient::RiskCapability>(), 10923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) true); 10933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) wallet_client_->GetFullWallet(full_wallet_request); 10943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 10953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 10963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) kGetFullWalletValidRequestNewUser, 10973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) kGetFullWalletValidResponse, 10983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3U); 10993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(1U, delegate_.full_wallets_received()); 11003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 11013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 11022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, GetFullWalletWithRiskCapabilitesSuccess) { 1103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_FULL_WALLET, 1); 1104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<WalletClient::RiskCapability> risk_capabilities; 11072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) risk_capabilities.push_back(WalletClient::VERIFY_CVC); 11082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletClient::FullWalletRequest full_wallet_request( 11092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "instrument_id", 11102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "shipping_address_id", 11112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "google_transaction_id", 11123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) risk_capabilities, 11133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) false); 11142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_->GetFullWallet(full_wallet_request); 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1116ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest( 1117ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::HTTP_OK, 1118ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletWithRiskCapabilitesValidRequest, 1119ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletValidResponse, 1120ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, delegate_.full_wallets_received()); 11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, GetFullWalletMalformedResponse) { 11267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 11277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_FULL_WALLET, 1); 1129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 113158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletMalformedResponse(AutofillMetrics::GET_FULL_WALLET); 11322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletClient::FullWalletRequest full_wallet_request( 11342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "instrument_id", 11352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "shipping_address_id", 11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "google_transaction_id", 11373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<WalletClient::RiskCapability>(), 11383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) false); 11392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_->GetFullWallet(full_wallet_request); 11402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1141ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1142ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletValidRequest, 1143ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletInvalidResponse, 1144ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 11452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0U, delegate_.full_wallets_received()); 11462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, AcceptLegalDocuments) { 11492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnDidAcceptLegalDocuments()).Times(1); 1150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 1151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::ACCEPT_LEGAL_DOCUMENTS, 1152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1153ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedVector<WalletItems::LegalDocument> docs; 1156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue document; 1157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) document.SetString("legal_document_id", "doc_id_1"); 1158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) document.SetString("display_name", "doc_1"); 1159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) docs.push_back( 1160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WalletItems::LegalDocument::CreateLegalDocument(document).release()); 1161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) document.SetString("legal_document_id", "doc_id_2"); 1162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) document.SetString("display_name", "doc_2"); 1163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) docs.push_back( 1164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WalletItems::LegalDocument::CreateLegalDocument(document).release()); 1165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) docs.push_back( 1166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WalletItems::LegalDocument::CreatePrivacyPolicyDocument().release()); 1167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_client_->AcceptLegalDocuments(docs.get(), 11684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kGoogleTransactionId); 1169b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1170b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) kAcceptLegalDocumentsValidRequest, 1171b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ")}'"); // Invalid JSON. Should be ignored. 11722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, AuthenticateInstrumentSucceeded) { 11752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnDidAuthenticateInstrument(true)).Times(1); 1176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 1177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::AUTHENTICATE_INSTRUMENT, 1178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1179ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 11802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1181ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->AuthenticateInstrument("instrument_id", "123"); 11822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1183ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1184ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kAuthenticateInstrumentValidRequest, 1185ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kAuthenticateInstrumentSuccessResponse, 1186ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 11872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, AuthenticateInstrumentFailed) { 11902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnDidAuthenticateInstrument(false)).Times(1); 1191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 1192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::AUTHENTICATE_INSTRUMENT, 1193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1194ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 11952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1196ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->AuthenticateInstrument("instrument_id", "123"); 11972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1198ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1199ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kAuthenticateInstrumentValidRequest, 1200ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kAuthenticateInstrumentFailureResponse, 1201ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 12022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, AuthenticateInstrumentFailedMalformedResponse) { 12057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 12067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 1208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::AUTHENTICATE_INSTRUMENT, 1209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1210ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 121258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletMalformedResponse( 121358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AutofillMetrics::AUTHENTICATE_INSTRUMENT); 12142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1215ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->AuthenticateInstrument("instrument_id", "123"); 12162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1217ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1218ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kAuthenticateInstrumentValidRequest, 1219ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInvalidResponse, 1220ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 12212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(ahutter): Add failure tests for GetWalletItems. 12242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, GetWalletItems) { 1226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1228ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 12292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wallet_client_->GetWalletItems(base::string16(), base::string16()); 12312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kGetWalletItemsValidRequest, 12342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kGetWalletItemsValidResponse); 12352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, delegate_.wallet_items_received()); 12362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1238116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(WalletClientTest, GetWalletItemsWithTransactionDetails) { 1239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1); 1241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delegate_.ExpectBaselineMetrics(); 1242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wallet_client_->GetWalletItems(base::ASCIIToUTF16("100.00"), 1244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::ASCIIToUTF16("USD")); 1245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VerifyAndFinishRequest(net::HTTP_OK, 1247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kGetWalletItemsWithTransactionDetails, 1248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kGetWalletItemsValidResponse); 1249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(1U, delegate_.wallet_items_received()); 1250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1252a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(WalletClientTest, GetWalletItemsRespectsDelegateForShippingRequired) { 1253a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1254a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1); 1255a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) delegate_.ExpectBaselineMetrics(); 1256a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) delegate_.SetIsShippingAddressRequired(false); 1257a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wallet_client_->GetWalletItems(base::string16(), base::string16()); 1259a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1260a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1261a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) kGetWalletItemsNoShippingRequest, 1262a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) kGetWalletItemsValidResponse); 1263a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(1U, delegate_.wallet_items_received()); 1264a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 1265a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 12662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveAddressSucceeded) { 12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1268ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1269ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "saved_address_id", 1270ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1271ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1272ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1273ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 12742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 1276ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 12775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) address.Pass(), 12785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 12795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 12802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 12812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressValidRequest, 12822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressValidResponse); 12832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveAddressWithRequiredActionsSucceeded) { 1286ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1287ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::REQUIRE_PHONE_NUMBER); 1290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::INVALID_FORM_FIELD); 12922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_actions; 12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(REQUIRE_PHONE_NUMBER); 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(INVALID_FORM_FIELD); 12962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<FormFieldError> form_errors; 12987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE, 12997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FormFieldError::SHIPPING_ADDRESS)); 13007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 13012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1302ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1303ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1304ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch required_actions, 1305ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch form_errors)).Times(1); 13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 1308ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 13095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) address.Pass(), 13105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 13115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 13122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 13132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressValidRequest, 13142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressWithRequiredActionsValidResponse); 13152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveAddressFailedInvalidRequiredAction) { 13187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 13197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1320ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1321ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 132358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletMalformedResponse(AutofillMetrics::SAVE_TO_WALLET); 13242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 1326ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 13275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) address.Pass(), 13285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 13295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 13302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 13312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressValidRequest, 13322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveWithInvalidRequiredActionsResponse); 13332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveAddressFailedMalformedResponse) { 13367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 13377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1338ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1339ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 134158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletMalformedResponse(AutofillMetrics::SAVE_TO_WALLET); 13422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 1344ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 13455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) address.Pass(), 13465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 13475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 13482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 13492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressValidRequest, 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveInvalidResponse); 13512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentSucceeded) { 13542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1355ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet("instrument_id", 1356ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1357ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1358ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1359ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1360ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 13612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 1363ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(instrument.Pass(), 13645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address>(), 13655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 13665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 1367ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1368ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1369ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentValidRequest, 1370ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentValidResponse, 1371ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 13722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentWithRequiredActionsSucceeded) { 1375ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1376ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::REQUIRE_PHONE_NUMBER); 1379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::INVALID_FORM_FIELD); 13812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_actions; 13832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(REQUIRE_PHONE_NUMBER); 13842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(INVALID_FORM_FIELD); 13852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<FormFieldError> form_errors; 13877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE, 13887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FormFieldError::SHIPPING_ADDRESS)); 13897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 13902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1391ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1392ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1393ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch required_actions, 1394ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch form_errors)).Times(1); 13952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 1397ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(instrument.Pass(), 13985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address>(), 13995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 14005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 14012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1402ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest( 1403ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::HTTP_OK, 1404ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentValidRequest, 1405ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentWithRequiredActionsValidResponse, 1406ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 14072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentFailedInvalidRequiredActions) { 1410ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1411ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 141358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletMalformedResponse(AutofillMetrics::SAVE_TO_WALLET); 14142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 14167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)); 14172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 1419ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(instrument.Pass(), 14205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address>(), 14215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 14225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 1423ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1424ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1425ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentValidRequest, 1426ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveWithInvalidRequiredActionsResponse, 1427ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 14282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentFailedMalformedResponse) { 14317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 14327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1433ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1434ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 143658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletMalformedResponse(AutofillMetrics::SAVE_TO_WALLET); 14372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 1439ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(instrument.Pass(), 14405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address>(), 14415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 14425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 1443ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1444ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1445ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentValidRequest, 1446ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInvalidResponse, 1447ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 14482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentAndAddressSucceeded) { 14512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1452ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet("saved_instrument_id", 1453ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "saved_address_id", 1454ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1455ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 1457ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch AutofillMetrics::SAVE_TO_WALLET, 1458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1459ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 14602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 14622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 14635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wallet_client_->SaveToWallet(instrument.Pass(), address.Pass(), NULL, NULL); 1464ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1465ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1466ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentAndAddressValidRequest, 1467ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentAndAddressValidResponse, 1468ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 14692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentAndAddressWithRequiredActionsSucceeded) { 1472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 1473ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch AutofillMetrics::SAVE_TO_WALLET, 1474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1475ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::REQUIRE_PHONE_NUMBER); 1478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::INVALID_FORM_FIELD); 14802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_actions; 14822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(REQUIRE_PHONE_NUMBER); 14832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(INVALID_FORM_FIELD); 14842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<FormFieldError> form_errors; 14867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE, 14877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FormFieldError::SHIPPING_ADDRESS)); 14887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 14892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1490ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1491ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1492ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch required_actions, 1493ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch form_errors)).Times(1); 14942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 14962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 14975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wallet_client_->SaveToWallet(instrument.Pass(), address.Pass(), NULL, NULL); 14982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1499ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest( 15002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::HTTP_OK, 15012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveInstrumentAndAddressValidRequest, 1502ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentAndAddressWithRequiredActionsValidResponse, 1503ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 15042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentAndAddressFailedInvalidRequiredAction) { 15077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 15087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 1510ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch AutofillMetrics::SAVE_TO_WALLET, 1511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1512ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 151458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletMalformedResponse(AutofillMetrics::SAVE_TO_WALLET); 15152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 15172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 15185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wallet_client_->SaveToWallet(instrument.Pass(), address.Pass(), NULL, NULL); 1519ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1520ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1521ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentAndAddressValidRequest, 1522ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveWithInvalidRequiredActionsResponse, 1523ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 15242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateAddressSucceeded) { 15272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1528ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1529ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "shipping_address_id", 1530ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1531ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1532ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1533ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 15342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address> reference_address = GetTestNonDefaultShippingAddress(); 1536ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 15375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetTestShippingAddress(), 15385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 15395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reference_address.get()); 15405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 15422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateAddressValidRequest, 15432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateAddressValidResponse); 15442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateAddressWithRequiredActionsSucceeded) { 1547ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1548ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::REQUIRE_PHONE_NUMBER); 1551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::INVALID_FORM_FIELD); 15532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_actions; 15552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(REQUIRE_PHONE_NUMBER); 15562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(INVALID_FORM_FIELD); 15572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<FormFieldError> form_errors; 15597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE, 15607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FormFieldError::SHIPPING_ADDRESS)); 15617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1562ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_CALL(delegate_, OnDidSaveToWallet(std::string(), 1563ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1564ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch required_actions, 1565ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch form_errors)).Times(1); 15662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address> reference_address = GetTestNonDefaultShippingAddress(); 1568ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 15695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetTestShippingAddress(), 15705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 15715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reference_address.get()); 15725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 15742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateAddressValidRequest, 15752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateWithRequiredActionsValidResponse); 15762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateAddressFailedInvalidRequiredAction) { 15797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 15807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1581ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1582ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1583c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 158458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletMalformedResponse(AutofillMetrics::SAVE_TO_WALLET); 15852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address> reference_address = GetTestNonDefaultShippingAddress(); 1587ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 15885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetTestShippingAddress(), 15895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 15905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reference_address.get()); 15915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 15932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateAddressValidRequest, 15942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveWithInvalidRequiredActionsResponse); 15952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateAddressMalformedResponse) { 15987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 15997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1600ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1601ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 160358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletMalformedResponse(AutofillMetrics::SAVE_TO_WALLET); 16042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address> reference_address = GetTestNonDefaultShippingAddress(); 1606ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 16075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetTestShippingAddress(), 16085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL, 16095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reference_address.get()); 16105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 16112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 16122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateAddressValidRequest, 16132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateMalformedResponse); 16142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentAddressSucceeded) { 1617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(delegate_, 1618ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet("instrument_id", 1619ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1620ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1621ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1622ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1623c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1624ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<WalletItems::MaskedInstrument> reference_instrument = 16275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetTestMaskedInstrument(); 1628ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(), 16295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address>(), 16305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reference_instrument.get(), 16315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 1632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kUpdateInstrumentAddressValidRequest, 1635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kUpdateInstrumentValidResponse); 1636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentExpirationDateSuceeded) { 1639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(delegate_, 1640ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet("instrument_id", 1641ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1642ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1643ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1644ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1645c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1646ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1647c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestExpirationDateChangeInstrument(); 16495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<WalletItems::MaskedInstrument> reference_instrument = 16505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetTestMaskedInstrumentWithId("instrument_id"); 16515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 16525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int new_month = instrument->expiration_month(); 16535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int new_year = instrument->expiration_year(); 16545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(new_month != reference_instrument->expiration_month() || 16555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new_year != reference_instrument->expiration_year()); 16565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 16575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wallet_client_->SaveToWallet(instrument.Pass(), 16585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address>(), 16595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reference_instrument.get(), 16605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 1661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1662ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1663ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kUpdateInstrumentExpirationDateValidRequest, 1664ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kUpdateInstrumentValidResponse, 1665ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 1666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1668c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentAddressWithNameChangeSucceeded) { 16692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1670ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet("instrument_id", 1671ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1672ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1673ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1674ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1675c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1676ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<WalletItems::MaskedInstrument> reference_instrument = 16795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetTestMaskedInstrument(); 1680ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(GetTestAddressNameChangeInstrument(), 16815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address>(), 16825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reference_instrument.get(), 16835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 1684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1685ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest( 1686ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::HTTP_OK, 1687ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kUpdateInstrumentAddressWithNameChangeValidRequest, 1688ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kUpdateInstrumentValidResponse, 1689ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 16902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentWithRequiredActionsSucceeded) { 1693ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1694c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1695ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1697c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::REQUIRE_PHONE_NUMBER); 1698c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1699c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::INVALID_FORM_FIELD); 17002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_actions; 17022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(REQUIRE_PHONE_NUMBER); 17032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(INVALID_FORM_FIELD); 17042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<FormFieldError> form_errors; 17067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE, 17077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FormFieldError::SHIPPING_ADDRESS)); 17087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 17092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1710ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1711ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1712ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch required_actions, 1713ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch form_errors)).Times(1); 1714c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<WalletItems::MaskedInstrument> reference_instrument = 17165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetTestMaskedInstrument(); 1717ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(), 17185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address>(), 17195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reference_instrument.get(), 17205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 1721c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1723c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kUpdateInstrumentAddressValidRequest, 17242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateWithRequiredActionsValidResponse); 17252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 17262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentFailedInvalidRequiredAction) { 17287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 17297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1730ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1731c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1732ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1733c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 173458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletMalformedResponse(AutofillMetrics::SAVE_TO_WALLET); 1735c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<WalletItems::MaskedInstrument> reference_instrument = 17375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetTestMaskedInstrument(); 1738ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(), 17395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address>(), 17405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reference_instrument.get(), 17415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 17422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1744c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kUpdateInstrumentAddressValidRequest, 17452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveWithInvalidRequiredActionsResponse); 17462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 17472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentMalformedResponse) { 17497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 17507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1751ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1752c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1753ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1754c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 175558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) delegate_.ExpectLogWalletMalformedResponse(AutofillMetrics::SAVE_TO_WALLET); 1756c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<WalletItems::MaskedInstrument> reference_instrument = 17585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetTestMaskedInstrument(); 1759ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(), 17605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address>(), 17615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reference_instrument.get(), 17625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 17632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1765c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kUpdateInstrumentAddressValidRequest, 17662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateMalformedResponse); 17672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 17682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, HasRequestInProgress) { 17702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(wallet_client_->HasRequestInProgress()); 1771c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1772c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1773ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 17742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wallet_client_->GetWalletItems(base::string16(), base::string16()); 17762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(wallet_client_->HasRequestInProgress()); 17772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 17792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kGetWalletItemsValidRequest, 17802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kGetWalletItemsValidResponse); 17812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(wallet_client_->HasRequestInProgress()); 17822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 17832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 500 (INTERNAL_SERVER_ERROR) - response json is parsed. 17851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WalletClientTest, ErrorResponse500) { 17865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(wallet_client_->HasRequestInProgress()); 1787ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wallet_client_->GetWalletItems(base::string16(), base::string16()); 17895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(wallet_client_->HasRequestInProgress()); 1790c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testing::Mock::VerifyAndClear(delegate_.metric_logger()); 17912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnWalletError( 17932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletClient::SERVICE_UNAVAILABLE)).Times(1); 1794c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1795c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1796c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric( 1797c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::WALLET_SERVICE_UNAVAILABLE); 1798c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR, 18002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kGetWalletItemsValidRequest, 18012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kErrorResponse); 18022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 18032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 403 (FORBIDDEN) - response json is parsed. 18051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WalletClientTest, ErrorResponse403) { 18061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(wallet_client_->HasRequestInProgress()); 18071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_.ExpectBaselineMetrics(); 18081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci wallet_client_->GetWalletItems(base::string16(), base::string16()); 18091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(wallet_client_->HasRequestInProgress()); 18101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci testing::Mock::VerifyAndClear(delegate_.metric_logger()); 18111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(delegate_, OnWalletError(WalletClient::SPENDING_LIMIT_EXCEEDED)) 18131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .Times(1); 18141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 18151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1); 18161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_.ExpectWalletErrorMetric( 18171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutofillMetrics::WALLET_SPENDING_LIMIT_EXCEEDED); 18181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VerifyAndFinishRequest(net::HTTP_FORBIDDEN, 18201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kGetWalletItemsValidRequest, 18211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kErrorResponseSpendingLimitExceeded); 18221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 18231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 400 (BAD_REQUEST) - response json is ignored. 18251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WalletClientTest, ErrorResponse400) { 18261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(wallet_client_->HasRequestInProgress()); 18271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_.ExpectBaselineMetrics(); 18281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci wallet_client_->GetWalletItems(base::string16(), base::string16()); 18291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(wallet_client_->HasRequestInProgress()); 18301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci testing::Mock::VerifyAndClear(delegate_.metric_logger()); 18311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(delegate_, OnWalletError(WalletClient::BAD_REQUEST)).Times(1); 18331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 18341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1); 18351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_BAD_REQUEST); 18361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VerifyAndFinishRequest( 18381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::HTTP_BAD_REQUEST, kGetWalletItemsValidRequest, kErrorResponse); 18391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 18401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Anything else - response json is ignored. 18421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WalletClientTest, ErrorResponseOther) { 18431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(wallet_client_->HasRequestInProgress()); 18441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_.ExpectBaselineMetrics(); 18451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci wallet_client_->GetWalletItems(base::string16(), base::string16()); 18461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(wallet_client_->HasRequestInProgress()); 18471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci testing::Mock::VerifyAndClear(delegate_.metric_logger()); 18481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(delegate_, OnWalletError(WalletClient::NETWORK_ERROR)).Times(1); 18501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 18511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1); 18521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_NETWORK_ERROR); 18531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VerifyAndFinishRequest( 18551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::HTTP_NOT_FOUND, kGetWalletItemsValidRequest, kErrorResponse); 18561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 18571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 18585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(WalletClientTest, CancelRequest) { 18595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(wallet_client_->HasRequestInProgress()); 1860c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1861c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0); 1862ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 18632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wallet_client_->GetWalletItems(base::string16(), base::string16()); 18655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(wallet_client_->HasRequestInProgress()); 18665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wallet_client_->CancelRequest(); 1867c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(wallet_client_->HasRequestInProgress()); 18682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 18692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace wallet 18712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace autofill 1872