wallet_client_unittest.cc revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
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" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/strings/string_split.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/content/browser/autocheckout_steps.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/full_wallet.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/instrument.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_client.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_client_delegate.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_items.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_test_util.h" 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_metrics.h" 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/autocheckout_status.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/test/test_browser_context.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_browser_thread.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" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace autofill { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace wallet { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGoogleTransactionId[] = "google-transaction-id"; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kMerchantUrl[] = "https://example.com/path?key=value"; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetFullWalletValidResponse[] = 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"expiration_month\":12," 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"expiration_year\":3000," 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"iin\":\"iin\"," 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"rest\":\"rest\"," 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"billing_address\":" 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\":\"id\"," 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"phone_number\":\"phone_number\"," 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"postal_address\":" 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"recipient_name\":\"recipient_name\"," 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address_line\":" 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address_line_1\"," 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address_line_2\"" 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]," 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"locality_name\":\"locality_name\"," 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"administrative_area_name\":\"administrative_area_name\"," 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"postal_code_number\":\"postal_code_number\"," 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"country_name_code\":\"US\"" 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"shipping_address\":" 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\":\"ship_id\"," 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"phone_number\":\"ship_phone_number\"," 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"postal_address\":" 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"recipient_name\":\"ship_recipient_name\"," 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address_line\":" 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"ship_address_line_1\"," 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"ship_address_line_2\"" 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]," 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"locality_name\":\"ship_locality_name\"," 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"administrative_area_name\":\"ship_administrative_area_name\"," 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"postal_code_number\":\"ship_postal_code_number\"," 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"country_name_code\":\"US\"" 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetFullWalletInvalidResponse[] = 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"garbage\":123" 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetWalletItemsValidResponse[] = 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]," 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"google_transaction_id\":\"google_transaction_id\"," 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"instrument\":" 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"descriptive_name\":\"descriptive_name\"," 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"type\":\"VISA\"," 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"supported_currency\":\"currency_code\"," 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"last_four_digits\":\"4111\"," 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"expiration_month\":12," 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"expiration_year\":3000," 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"brand\":\"monkeys\"," 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"billing_address\":" 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"name\":\"name\"," 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address1\":\"address1\"," 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address2\":\"address2\"," 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"city\":\"city\"," 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"state\":\"state\"," 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"postal_code\":\"postal_code\"," 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"phone_number\":\"phone_number\"," 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"country_code\":\"country_code\"" 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"status\":\"VALID\"," 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"object_id\":\"default_instrument_id\"" 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]," 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"default_instrument_id\":\"default_instrument_id\"," 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"obfuscated_gaia_id\":\"obfuscated_gaia_id\"," 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"address\":" 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]," 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"default_address_id\":\"default_address_id\"," 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_legal_document\":" 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveAddressValidResponse[] = 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"shipping_address_id\":\"saved_address_id\"" 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveAddressWithRequiredActionsValidResponse[] = 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"form_field_error\":" 1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " [" 1467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " {" 1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"location\":\"SHIPPING_ADDRESS\"," 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"type\":\"INVALID_POSTAL_CODE\"" 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " }" 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " ]," 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" \\treqUIRE_PhOnE_number \\n\\r\"," 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"INVALID_form_field\"" 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveWithInvalidRequiredActionsResponse[] = 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" setup_wallet\"," 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" \\treqUIRE_PhOnE_number \\n\\r\"," 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"INVALID_form_field\"" 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInvalidResponse[] = 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"garbage\":123" 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentValidResponse[] = 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"instrument_id\":\"instrument_id\"" 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentWithRequiredActionsValidResponse[] = 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"form_field_error\":" 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " [" 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " {" 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"location\":\"SHIPPING_ADDRESS\"," 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"type\":\"INVALID_POSTAL_CODE\"" 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " }" 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " ]," 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" \\treqUIRE_PhOnE_number \\n\\r\"," 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"INVALID_form_field\"" 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentAndAddressValidResponse[] = 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"shipping_address_id\":\"saved_address_id\"," 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"instrument_id\":\"saved_instrument_id\"" 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentAndAddressWithRequiredActionsValidResponse[] = 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"form_field_error\":" 2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " [" 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " {" 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"location\":\"SHIPPING_ADDRESS\"," 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"type\":\"INVALID_POSTAL_CODE\"" 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " }" 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " ]," 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" \\treqUIRE_PhOnE_number \\n\\r\"," 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"INVALID_form_field\"" 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUpdateInstrumentValidResponse[] = 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"instrument_id\":\"instrument_id\"" 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUpdateAddressValidResponse[] = 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"shipping_address_id\":\"shipping_address_id\"" 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUpdateWithRequiredActionsValidResponse[] = 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"form_field_error\":" 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " [" 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " {" 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"location\":\"SHIPPING_ADDRESS\"," 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"type\":\"INVALID_POSTAL_CODE\"" 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " }" 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " ]," 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"required_action\":" 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \" \\treqUIRE_PhOnE_number \\n\\r\"," 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"INVALID_form_field\"" 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUpdateMalformedResponse[] = 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"cheese\":\"monkeys\"" 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kAuthenticateInstrumentFailureResponse[] = 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"auth_result\":\"anything else\"" 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kAuthenticateInstrumentSuccessResponse[] = 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"auth_result\":\"SUCCESS\"" 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kErrorResponse[] = 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_type\":\"APPLICATION_ERROR\"," 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_detail\":\"error_detail\"," 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"application_error\":\"application_error\"," 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"debug_data\":" 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"debug_message\":\"debug_message\"," 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"stack_trace\":\"stack_trace\"" 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"application_error_data\":\"application_error_data\"," 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"wallet_error\":" 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_type\":\"SERVICE_UNAVAILABLE\"," 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_detail\":\"error_detail\"," 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"message_for_user\":" 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"text\":\"text\"," 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"subtext\":\"subtext\"," 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"details\":\"details\"" 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kErrorTypeMissingInResponse[] = 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_type\":\"Not APPLICATION_ERROR\"," 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"error_detail\":\"error_detail\"," 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"application_error\":\"application_error\"," 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"debug_data\":" 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"debug_message\":\"debug_message\"," 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"stack_trace\":\"stack_trace\"" 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"application_error_data\":\"application_error_data\"" 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The JSON below is used to test against the request payload being sent to 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Online Wallet. It's indented differently since JSONWriter creates compact 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// JSON from DictionaryValues. 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kAcceptLegalDocumentsValidRequest[] = 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"accepted_legal_document\":" 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"doc_id_1\"," 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"doc_id_2\"" 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google_transaction_id\":\"google-transaction-id\"," 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"" 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kAuthenticateInstrumentValidRequest[] = 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"instrument_id\":\"instrument_id\"," 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"" 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetFullWalletValidRequest[] = 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"feature\":\"REQUEST_AUTOCOMPLETE\"," 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google_transaction_id\":\"google_transaction_id\"," 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"," 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"selected_address_id\":\"shipping_address_id\"," 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"selected_instrument_id\":\"instrument_id\"," 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"supported_risk_challenge\":" 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]" 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetFullWalletWithRiskCapabilitesValidRequest[] = 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"feature\":\"REQUEST_AUTOCOMPLETE\"," 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google_transaction_id\":\"google_transaction_id\"," 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"," 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"selected_address_id\":\"shipping_address_id\"," 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"selected_instrument_id\":\"instrument_id\"," 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"supported_risk_challenge\":" 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"VERIFY_CVC\"" 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]" 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kGetWalletItemsValidRequest[] = 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"" 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveAddressValidRequest[] = 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"," 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"shipping_address\":" 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"phone_number\":\"save_phone_number\"," 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_address\":" 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line\":" 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"save_address_line_1\"," 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"save_address_line_2\"" 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"administrative_area_name\":\"save_admin_area_name\"," 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"locality_name\":\"save_locality_name\"," 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_code_number\":\"save_postal_code_number\"," 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"recipient_name\":\"save_recipient_name\"" 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}" 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}" 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentValidRequest[] = 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"instrument\":" 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"credit_card\":" 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address\":" 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line\":" 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line_1\"," 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line_2\"" 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"administrative_area_name\":\"admin_area_name\"," 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"locality_name\":\"locality_name\"," 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_code_number\":\"postal_code_number\"," 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"recipient_name\":\"recipient_name\"" 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"exp_month\":12," 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"exp_year\":3000," 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"fop_type\":\"VISA\"," 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"last_4_digits\":\"4448\"" 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"type\":\"CREDIT_CARD\"" 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"instrument_phone_number\":\"phone_number\"," 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"" 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSaveInstrumentAndAddressValidRequest[] = 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"instrument\":" 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"credit_card\":" 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address\":" 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line\":" 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line_1\"," 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line_2\"" 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"administrative_area_name\":\"admin_area_name\"," 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"locality_name\":\"locality_name\"," 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_code_number\":\"postal_code_number\"," 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"recipient_name\":\"recipient_name\"" 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"exp_month\":12," 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"exp_year\":3000," 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"fop_type\":\"VISA\"," 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"last_4_digits\":\"4448\"" 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"type\":\"CREDIT_CARD\"" 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}," 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"instrument_phone_number\":\"phone_number\"," 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"," 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"shipping_address\":" 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"phone_number\":\"save_phone_number\"," 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_address\":" 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line\":" 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"save_address_line_1\"," 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"save_address_line_2\"" 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"administrative_area_name\":\"save_admin_area_name\"," 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"locality_name\":\"save_locality_name\"," 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_code_number\":\"save_postal_code_number\"," 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"recipient_name\":\"save_recipient_name\"" 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}" 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}" 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSendAutocheckoutStatusOfSuccessValidRequest[] = 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google_transaction_id\":\"google_transaction_id\"," 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"success\":true" 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 456eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst char kSendAutocheckoutStatusWithStatisticsValidRequest[] = 457eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "{" 458eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google_transaction_id\":\"google_transaction_id\"," 459eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"merchant_domain\":\"https://example.com/\"," 460eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"steps\":[{\"step_description\":\"1_AUTOCHECKOUT_STEP_SHIPPING\"" 461eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ",\"time_taken\":100}]," 462eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"success\":true" 463eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "}"; 464eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSendAutocheckoutStatusOfFailureValidRequest[] = 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google_transaction_id\":\"google_transaction_id\"," 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"reason\":\"CANNOT_PROCEED\"," 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"success\":false" 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUpdateAddressValidRequest[] = 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"risk_params\":\"risky business\"," 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"shipping_address\":" 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"id\":\"shipping_address_id\"," 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"phone_number\":\"ship_phone_number\"," 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_address\":" 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"address_line\":" 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[" 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"ship_address_line_1\"," 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"ship_address_line_2\"" 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "]," 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"administrative_area_name\":\"ship_admin_area_name\"," 489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"locality_name\":\"ship_locality_name\"," 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"postal_code_number\":\"ship_postal_code_number\"," 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"recipient_name\":\"ship_recipient_name\"" 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}" 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}" 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}"; 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kUpdateInstrumentAddressValidRequest[] = 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"instrument_phone_number\":\"phone_number\"," 500c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"risk_params\":\"risky business\"," 502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"upgraded_billing_address\":" 503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line\":" 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "[" 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line_1\"," 507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line_2\"" 508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "]," 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"administrative_area_name\":\"admin_area_name\"," 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"locality_name\":\"locality_name\"," 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"postal_code_number\":\"postal_code_number\"," 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"recipient_name\":\"recipient_name\"" 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}," 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"upgraded_instrument_id\":\"instrument_id\"" 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}"; 517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kUpdateInstrumentAddressWithNameChangeValidRequest[] = 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{" 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"instrument_phone_number\":\"phone_number\"," 521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"risk_params\":\"risky business\"," 523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"upgraded_billing_address\":" 524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line\":" 526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "[" 527c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line_1\"," 528c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"address_line_2\"" 529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "]," 530c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"administrative_area_name\":\"admin_area_name\"," 531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"country_name_code\":\"US\"," 532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"locality_name\":\"locality_name\"," 533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"postal_code_number\":\"postal_code_number\"," 534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"recipient_name\":\"recipient_name\"" 535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}," 536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"upgraded_instrument_id\":\"instrument_id\"" 537c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}"; 538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kUpdateInstrumentExpirationDateValidRequest[] = 540c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 541c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"instrument\":" 542c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 543c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"credit_card\":" 544c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{" 545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"exp_month\":12," 546ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "\"exp_year\":3000" 547a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) "}," 548a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) "\"type\":\"CREDIT_CARD\"" 549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}," 550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"merchant_domain\":\"https://example.com/\"," 551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"risk_params\":\"risky business\"," 552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"upgraded_instrument_id\":\"instrument_id\"" 553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "}"; 554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MockAutofillMetrics : public AutofillMetrics { 556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockAutofillMetrics() {} 558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MOCK_CONST_METHOD2(LogWalletApiCallDuration, 559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void(WalletApiCallMetric metric, 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::TimeDelta& duration)); 561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MOCK_CONST_METHOD2(LogWalletErrorMetric, 562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void(DialogType dialog_type, WalletErrorMetric metric)); 563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MOCK_CONST_METHOD2(LogWalletRequiredActionMetric, 564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void(DialogType dialog_type, 565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WalletRequiredActionMetric action)); 566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockAutofillMetrics); 568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockWalletClientDelegate : public WalletClientDelegate { 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockWalletClientDelegate() 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : full_wallets_received_(0), wallet_items_received_(0) {} 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~MockWalletClientDelegate() {} 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual const AutofillMetrics& GetMetricLogger() const OVERRIDE { 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return metric_logger_; 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual DialogType GetDialogType() const OVERRIDE { 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return DIALOG_TYPE_REQUEST_AUTOCOMPLETE; 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual std::string GetRiskData() const OVERRIDE { 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "risky business"; 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual std::string GetWalletCookieValue() const OVERRIDE { 5897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return "gdToken"; 5907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 5917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectLogWalletApiCallDuration( 593c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::WalletApiCallMetric metric, 594c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t times) { 595c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(metric_logger_, 596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LogWalletApiCallDuration(metric, testing::_)).Times(times); 597c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 598c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectWalletErrorMetric(AutofillMetrics::WalletErrorMetric metric) { 600c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL( 601c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) metric_logger_, 602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LogWalletErrorMetric( 603c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DIALOG_TYPE_REQUEST_AUTOCOMPLETE, metric)).Times(1); 604c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 606c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectWalletRequiredActionMetric( 607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::WalletRequiredActionMetric metric) { 608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL( 609c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) metric_logger_, 610c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LogWalletRequiredActionMetric( 611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DIALOG_TYPE_REQUEST_AUTOCOMPLETE, metric)).Times(1); 612c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 613c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 614ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void ExpectBaselineMetrics() { 615c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL( 616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) metric_logger_, 617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LogWalletErrorMetric( 618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DIALOG_TYPE_REQUEST_AUTOCOMPLETE, 619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::WALLET_ERROR_BASELINE_ISSUED_REQUEST)) 620ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch .Times(1); 621ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ExpectWalletRequiredActionMetric( 622ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch AutofillMetrics::WALLET_REQUIRED_ACTION_BASELINE_ISSUED_REQUEST); 623c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 624c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockAutofillMetrics* metric_logger() { 626c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return &metric_logger_; 627c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 628c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(OnDidAcceptLegalDocuments, void()); 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(OnDidAuthenticateInstrument, void(bool success)); 631ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch MOCK_METHOD4(OnDidSaveToWallet, 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void(const std::string& instrument_id, 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& shipping_address_id, 6347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::vector<RequiredAction>& required_actions, 6357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::vector<FormFieldError>& form_field_errors)); 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(OnWalletError, void(WalletClient::ErrorType error_type)); 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnDidGetFullWallet(scoped_ptr<FullWallet> full_wallet) OVERRIDE { 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(full_wallet); 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++full_wallets_received_; 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnDidGetWalletItems(scoped_ptr<WalletItems> wallet_items) 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OVERRIDE { 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(wallet_items); 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++wallet_items_received_; 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t full_wallets_received() const { return full_wallets_received_; } 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t wallet_items_received() const { return wallet_items_received_; } 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t full_wallets_received_; 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t wallet_items_received_; 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 654c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testing::StrictMock<MockAutofillMetrics> metric_logger_; 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WalletClientTest : public testing::Test { 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 661eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WalletClientTest() {} 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_.reset( 665eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new WalletClient(browser_context_.GetRequestContext(), &delegate_)); 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE { 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_.reset(); 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void VerifyAndFinishRequest(net::HttpStatusCode response_code, 673ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& request_body, 674ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& response_body) { 675ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 676ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ASSERT_TRUE(fetcher); 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 678ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& upload_data = fetcher->upload_data(); 679ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(request_body, GetData(upload_data)); 680ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::HttpRequestHeaders request_headers; 681ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch fetcher->GetExtraRequestHeaders(&request_headers); 682ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string auth_header_value; 683ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(request_headers.GetHeader( 684ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::HttpRequestHeaders::kAuthorization, 685ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &auth_header_value)); 686ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("GoogleLogin auth=gdToken", auth_header_value); 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 688ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch fetcher->set_response_code(response_code); 689ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch fetcher->SetResponseString(response_body); 690ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 691b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 692b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 693ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void VerifyAndFinishFormEncodedRequest(net::HttpStatusCode response_code, 694ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& json_payload, 695ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& response_body, 696ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch size_t expected_parameter_number) { 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(fetcher); 699ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 7007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::HttpRequestHeaders request_headers; 7017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->GetExtraRequestHeaders(&request_headers); 7027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string auth_header_value; 7037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(request_headers.GetHeader( 7047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::HttpRequestHeaders::kAuthorization, 7057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch &auth_header_value)); 7067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ("GoogleLogin auth=gdToken", auth_header_value); 707ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 708ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& upload_data = fetcher->upload_data(); 709ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<std::pair<std::string, std::string> > tokens; 710ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::SplitStringIntoKeyValuePairs(upload_data, '=', '&', &tokens); 711ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(tokens.size(), expected_parameter_number); 712ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 713ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch size_t num_params = 0U; 714ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for (size_t i = 0; i < tokens.size(); ++i) { 715ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& key = tokens[i].first; 716ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& value = tokens[i].second; 717ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 718ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (key == "request_content_type") { 719ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("application/json", value); 720ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch num_params++; 721ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 722ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 723ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (key == "request") { 724ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(json_payload, 725ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetData( 726ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::UnescapeURLComponent( 727ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch value, net::UnescapeRule::URL_SPECIAL_CHARS | 728ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::UnescapeRule::REPLACE_PLUS_WITH_SPACE))); 729ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch num_params++; 730ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 731ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 732ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (key == "cvn") { 733ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("123", value); 734ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch num_params++; 735ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 736ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 737ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (key == "card_number") { 738ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("4444444444444448", value); 739ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch num_params++; 740ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 741ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 742ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (key == "otp") { 743ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_FALSE(value.empty()); 744ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch num_params++; 745ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 746ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 747ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(expected_parameter_number, num_params); 748ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->set_response_code(response_code); 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->SetResponseString(response_body); 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<WalletClient> wallet_client_; 756eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content::TestBrowserContext browser_context_; 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockWalletClientDelegate delegate_; 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 760ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string GetData(const std::string& upload_data) { 761ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<Value> root(base::JSONReader::Read(upload_data)); 762ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 763ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // If this is not a JSON dictionary, return plain text. 764ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (!root || !root->IsType(Value::TYPE_DICTIONARY)) 765ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return upload_data; 766ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 767ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Remove api_key entry (to prevent accidental leak), return JSON as text. 768ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DictionaryValue* dict = static_cast<DictionaryValue*>(root.get()); 769ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch dict->Remove("api_key", NULL); 770ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string clean_upload_data; 771ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::JSONWriter::Write(dict, &clean_upload_data); 772ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return clean_upload_data; 773ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 774ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 775b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) net::TestURLFetcherFactory factory_; 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, WalletError) { 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnWalletError( 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletClient::SERVICE_UNAVAILABLE)).Times(1); 781c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); 782ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 783c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric( 784c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::WALLET_SERVICE_UNAVAILABLE); 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 786eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<AutocheckoutStatistic> statistics; 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_->SendAutocheckoutStatus(autofill::SUCCESS, 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(kMerchantUrl), 789eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch statistics, 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "google_transaction_id"); 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR, 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSendAutocheckoutStatusOfSuccessValidRequest, 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kErrorResponse); 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, WalletErrorResponseMissing) { 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnWalletError( 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletClient::UNKNOWN_ERROR)).Times(1); 799c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); 800ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 801c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_UNKNOWN_ERROR); 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 803eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<AutocheckoutStatistic> statistics; 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_->SendAutocheckoutStatus(autofill::SUCCESS, 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(kMerchantUrl), 806eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch statistics, 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "google_transaction_id"); 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR, 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSendAutocheckoutStatusOfSuccessValidRequest, 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kErrorTypeMissingInResponse); 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, NetworkFailureOnExpectedVoidResponse) { 8147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, OnWalletError(WalletClient::NETWORK_ERROR)).Times(1); 815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); 816ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 817c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_NETWORK_ERROR); 8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 819eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<AutocheckoutStatistic> statistics; 820b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) wallet_client_->SendAutocheckoutStatus(autofill::SUCCESS, 821b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) GURL(kMerchantUrl), 822eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch statistics, 823b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) "google_transaction_id"); 824b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_UNAUTHORIZED, 825b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) kSendAutocheckoutStatusOfSuccessValidRequest, 826b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) std::string()); 8272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, NetworkFailureOnExpectedResponse) { 8307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, OnWalletError(WalletClient::NETWORK_ERROR)).Times(1); 831c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 832c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 833ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 834c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_NETWORK_ERROR); 8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 836c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_client_->GetWalletItems(GURL(kMerchantUrl)); 837b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_UNAUTHORIZED, 838b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) kGetWalletItemsValidRequest, 839b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) std::string()); 8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, RequestError) { 8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnWalletError(WalletClient::BAD_REQUEST)).Times(1); 844c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); 845ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 846c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_BAD_REQUEST); 8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 848eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<AutocheckoutStatistic> statistics; 849b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) wallet_client_->SendAutocheckoutStatus(autofill::SUCCESS, 850b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) GURL(kMerchantUrl), 851eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch statistics, 852b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) "google_transaction_id"); 853b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_BAD_REQUEST, 854b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) kSendAutocheckoutStatusOfSuccessValidRequest, 855b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) std::string()); 8562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, GetFullWalletSuccess) { 859c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_FULL_WALLET, 1); 860ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 861c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletClient::FullWalletRequest full_wallet_request( 8632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "instrument_id", 8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "shipping_address_id", 8652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(kMerchantUrl), 8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "google_transaction_id", 8672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<WalletClient::RiskCapability>()); 8682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_->GetFullWallet(full_wallet_request); 8692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 870ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 871ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletValidRequest, 872ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletValidResponse, 873ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 8742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, delegate_.full_wallets_received()); 8752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, GetFullWalletWithRiskCapabilitesSuccess) { 878c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_FULL_WALLET, 1); 879ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 880c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<WalletClient::RiskCapability> risk_capabilities; 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) risk_capabilities.push_back(WalletClient::VERIFY_CVC); 8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletClient::FullWalletRequest full_wallet_request( 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "instrument_id", 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "shipping_address_id", 8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(kMerchantUrl), 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "google_transaction_id", 8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) risk_capabilities); 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_->GetFullWallet(full_wallet_request); 8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 891ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest( 892ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::HTTP_OK, 893ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletWithRiskCapabilitesValidRequest, 894ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletValidResponse, 895ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 8962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, delegate_.full_wallets_received()); 8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, GetFullWalletMalformedResponse) { 9017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 9027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 903c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_FULL_WALLET, 1); 904ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 905c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletClient::FullWalletRequest full_wallet_request( 9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "instrument_id", 9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "shipping_address_id", 9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(kMerchantUrl), 9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "google_transaction_id", 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<WalletClient::RiskCapability>()); 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_->GetFullWallet(full_wallet_request); 9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 915ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 916ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletValidRequest, 917ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kGetFullWalletInvalidResponse, 918ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0U, delegate_.full_wallets_received()); 9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, AcceptLegalDocuments) { 9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnDidAcceptLegalDocuments()).Times(1); 924c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 925c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::ACCEPT_LEGAL_DOCUMENTS, 926c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 927ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 928c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedVector<WalletItems::LegalDocument> docs; 930c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue document; 931c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) document.SetString("legal_document_id", "doc_id_1"); 932c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) document.SetString("display_name", "doc_1"); 933c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) docs.push_back( 934c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WalletItems::LegalDocument::CreateLegalDocument(document).release()); 935c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) document.SetString("legal_document_id", "doc_id_2"); 936c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) document.SetString("display_name", "doc_2"); 937c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) docs.push_back( 938c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WalletItems::LegalDocument::CreateLegalDocument(document).release()); 939c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) docs.push_back( 940c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WalletItems::LegalDocument::CreatePrivacyPolicyDocument().release()); 941c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_client_->AcceptLegalDocuments(docs.get(), 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kGoogleTransactionId, 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(kMerchantUrl)); 944b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 945b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) kAcceptLegalDocumentsValidRequest, 946b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ")}'"); // Invalid JSON. Should be ignored. 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, AuthenticateInstrumentSucceeded) { 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnDidAuthenticateInstrument(true)).Times(1); 951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 952c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::AUTHENTICATE_INSTRUMENT, 953c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 954ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 956ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->AuthenticateInstrument("instrument_id", "123"); 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 958ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 959ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kAuthenticateInstrumentValidRequest, 960ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kAuthenticateInstrumentSuccessResponse, 961ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 9622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, AuthenticateInstrumentFailed) { 9652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnDidAuthenticateInstrument(false)).Times(1); 966c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::AUTHENTICATE_INSTRUMENT, 968c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 969ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 9702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 971ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->AuthenticateInstrument("instrument_id", "123"); 9722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 973ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 974ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kAuthenticateInstrumentValidRequest, 975ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kAuthenticateInstrumentFailureResponse, 976ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, AuthenticateInstrumentFailedMalformedResponse) { 9807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 9817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 982c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 983c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::AUTHENTICATE_INSTRUMENT, 984c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 985ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 986c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 9872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 988ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->AuthenticateInstrument("instrument_id", "123"); 9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 990ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 991ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kAuthenticateInstrumentValidRequest, 992ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInvalidResponse, 993ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 9942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(ahutter): Add failure tests for GetWalletItems. 9972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, GetWalletItems) { 999c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1000c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1001ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 10022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1003c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_client_->GetWalletItems(GURL(kMerchantUrl)); 10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kGetWalletItemsValidRequest, 10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kGetWalletItemsValidResponse); 10082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, delegate_.wallet_items_received()); 10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveAddressSucceeded) { 10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1013ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1014ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "saved_address_id", 1015ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1016ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1017ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1018ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 10192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 1021ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 1022ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch address.Pass(), 1023ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 10252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressValidRequest, 10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressValidResponse); 10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveAddressWithRequiredActionsSucceeded) { 1030ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1031ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1033c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::REQUIRE_PHONE_NUMBER); 1034c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1035c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::INVALID_FORM_FIELD); 10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_actions; 10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(REQUIRE_PHONE_NUMBER); 10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(INVALID_FORM_FIELD); 10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<FormFieldError> form_errors; 10427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE, 10437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FormFieldError::SHIPPING_ADDRESS)); 10447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1046ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1047ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1048ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch required_actions, 1049ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch form_errors)).Times(1); 10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 1052ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 1053ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch address.Pass(), 1054ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 10552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 10562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressValidRequest, 10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressWithRequiredActionsValidResponse); 10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveAddressFailedInvalidRequiredAction) { 10617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 10627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1063ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1064ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1065c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 10662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 1068ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 1069ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch address.Pass(), 1070ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 10722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressValidRequest, 10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveWithInvalidRequiredActionsResponse); 10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveAddressFailedMalformedResponse) { 10777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 10787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1079ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1080ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1081c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 10822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 1084ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 1085ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch address.Pass(), 1086ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 10872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 10882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveAddressValidRequest, 10892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveInvalidResponse); 10902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentSucceeded) { 10932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1094ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet("instrument_id", 1095ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1096ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1097ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1098ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1099ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 11002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 1102ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(instrument.Pass(), 1103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<Address>(), 1104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 1105ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1106ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1107ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentValidRequest, 1108ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentValidResponse, 1109ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 11102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentWithRequiredActionsSucceeded) { 1113ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1114ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::REQUIRE_PHONE_NUMBER); 1117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::INVALID_FORM_FIELD); 11192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_actions; 11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(REQUIRE_PHONE_NUMBER); 11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(INVALID_FORM_FIELD); 11232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<FormFieldError> form_errors; 11257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE, 11267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FormFieldError::SHIPPING_ADDRESS)); 11277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1130ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1131ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch required_actions, 1132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch form_errors)).Times(1); 11332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 1135ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(instrument.Pass(), 1136ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<Address>(), 1137ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 11382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1139ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest( 1140ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::HTTP_OK, 1141ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentValidRequest, 1142ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentWithRequiredActionsValidResponse, 1143ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 11442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentFailedInvalidRequiredActions) { 1147ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1148ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 11502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 11527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)); 11532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 1155ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(instrument.Pass(), 1156ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<Address>(), 1157ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 1158ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1159ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1160ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentValidRequest, 1161ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveWithInvalidRequiredActionsResponse, 1162ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 11632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentFailedMalformedResponse) { 11667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 11677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1168ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1169ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 11712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 1173ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(instrument.Pass(), 1174ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<Address>(), 1175ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 1176ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1177ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1178ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentValidRequest, 1179ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInvalidResponse, 1180ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 11812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentAndAddressSucceeded) { 11842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1185ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet("saved_instrument_id", 1186ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "saved_address_id", 1187ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1188ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 1190ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch AutofillMetrics::SAVE_TO_WALLET, 1191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1192ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 11932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 11952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 1196ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(instrument.Pass(), 1197ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch address.Pass(), 1198ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 1199ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1200ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1201ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentAndAddressValidRequest, 1202ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentAndAddressValidResponse, 1203ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentAndAddressWithRequiredActionsSucceeded) { 1207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 1208ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch AutofillMetrics::SAVE_TO_WALLET, 1209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1210ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::REQUIRE_PHONE_NUMBER); 1213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::INVALID_FORM_FIELD); 12152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_actions; 12172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(REQUIRE_PHONE_NUMBER); 12182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(INVALID_FORM_FIELD); 12192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<FormFieldError> form_errors; 12217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE, 12227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FormFieldError::SHIPPING_ADDRESS)); 12237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1225ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1226ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1227ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch required_actions, 1228ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch form_errors)).Times(1); 12292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 12312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 1232ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(instrument.Pass(), 1233ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch address.Pass(), 1234ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 12352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1236ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest( 12372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::HTTP_OK, 12382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveInstrumentAndAddressValidRequest, 1239ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentAndAddressWithRequiredActionsValidResponse, 1240ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 12412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SaveInstrumentAndAddressFailedInvalidRequiredAction) { 12447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 12457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration( 1247ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch AutofillMetrics::SAVE_TO_WALLET, 1248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1249ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Instrument> instrument = GetTestInstrument(); 12532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestSaveableAddress(); 1254ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(instrument.Pass(), 1255ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch address.Pass(), 1256ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 1257ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1258ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1259ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveInstrumentAndAddressValidRequest, 1260ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kSaveWithInvalidRequiredActionsResponse, 1261ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4U); 12622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateAddressSucceeded) { 12652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1266ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1267ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "shipping_address_id", 1268ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1269ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1270ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1271ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 12722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestShippingAddress(); 12742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) address->set_object_id("shipping_address_id"); 12752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1276ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 1277ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch address.Pass(), 1278ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 12792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 12802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateAddressValidRequest, 12812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateAddressValidResponse); 12822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateAddressWithRequiredActionsSucceeded) { 1285ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1286ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::REQUIRE_PHONE_NUMBER); 1289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::INVALID_FORM_FIELD); 12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_actions; 12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(REQUIRE_PHONE_NUMBER); 12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(INVALID_FORM_FIELD); 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<FormFieldError> form_errors; 12977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE, 12987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FormFieldError::SHIPPING_ADDRESS)); 12997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1300ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_CALL(delegate_, OnDidSaveToWallet(std::string(), 1301ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1302ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch required_actions, 1303ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch form_errors)).Times(1); 13042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestShippingAddress(); 13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) address->set_object_id("shipping_address_id"); 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1308ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 1309ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch address.Pass(), 1310ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 13112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 13122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateAddressValidRequest, 13132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateWithRequiredActionsValidResponse); 13142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateAddressFailedInvalidRequiredAction) { 13177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 13187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1319ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1320ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 13222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestShippingAddress(); 13242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) address->set_object_id("shipping_address_id"); 13252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1326ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 1327ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch address.Pass(), 1328ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 13292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 13302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateAddressValidRequest, 13312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveWithInvalidRequiredActionsResponse); 13322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateAddressMalformedResponse) { 13357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 13367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1337ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1); 1338ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 13402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = GetTestShippingAddress(); 13422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) address->set_object_id("shipping_address_id"); 13432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1344ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(scoped_ptr<Instrument>(), 1345ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch address.Pass(), 1346ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 13472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 13482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateAddressValidRequest, 13492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateMalformedResponse); 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentAddressSucceeded) { 1353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(delegate_, 1354ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet("instrument_id", 1355ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1356ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1357ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1358ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1360ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1362ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(), 1363ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<Address>(), 1364ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 1365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kUpdateInstrumentAddressValidRequest, 1368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kUpdateInstrumentValidResponse); 1369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentExpirationDateSuceeded) { 1372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(delegate_, 1373ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet("instrument_id", 1374ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1375ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1376ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1377ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1379ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1381ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(GetTestExpirationDateChangeInstrument(), 1382ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<Address>(), 1383ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 1384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1385ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest(net::HTTP_OK, 1386ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kUpdateInstrumentExpirationDateValidRequest, 1387ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kUpdateInstrumentValidResponse, 1388ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 1389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentAddressWithNameChangeSucceeded) { 13922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1393ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet("instrument_id", 1394ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1395ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<RequiredAction>(), 1396ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<FormFieldError>())).Times(1); 1397ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1399ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1401ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(GetTestAddressNameChangeInstrument(), 1402ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<Address>(), 1403ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 1404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1405ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyAndFinishFormEncodedRequest( 1406ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::HTTP_OK, 1407ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kUpdateInstrumentAddressWithNameChangeValidRequest, 1408ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kUpdateInstrumentValidResponse, 1409ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3U); 14102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentWithRequiredActionsSucceeded) { 1413ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1415ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::REQUIRE_PHONE_NUMBER); 1418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletRequiredActionMetric( 1419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::INVALID_FORM_FIELD); 14202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_actions; 14222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(REQUIRE_PHONE_NUMBER); 14232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions.push_back(INVALID_FORM_FIELD); 14242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<FormFieldError> form_errors; 14267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE, 14277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FormFieldError::SHIPPING_ADDRESS)); 14287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 14292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, 1430ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch OnDidSaveToWallet(std::string(), 1431ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string(), 1432ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch required_actions, 1433ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch form_errors)).Times(1); 1434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1435ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(), 1436ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<Address>(), 1437ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 1438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 14392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kUpdateInstrumentAddressValidRequest, 14412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateWithRequiredActionsValidResponse); 14422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentFailedInvalidRequiredAction) { 14457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 14467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1447ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1449ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 1451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1452ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(), 1453ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<Address>(), 1454ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 14552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kUpdateInstrumentAddressValidRequest, 14582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSaveWithInvalidRequiredActionsResponse); 14592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, UpdateInstrumentMalformedResponse) { 14627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(delegate_, 14637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1); 1464ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SAVE_TO_WALLET, 1465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1466ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_MALFORMED_RESPONSE); 1468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1469ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(), 1470ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<Address>(), 1471ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GURL(kMerchantUrl)); 14722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kUpdateInstrumentAddressValidRequest, 14752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kUpdateMalformedResponse); 14762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SendAutocheckoutOfStatusSuccess) { 1479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); 1480ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 14812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1482eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutocheckoutStatistic statistic; 1483eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch statistic.page_number = 1; 1484eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch statistic.steps.push_back(AUTOCHECKOUT_STEP_SHIPPING); 1485eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch statistic.time_taken = base::TimeDelta::FromMilliseconds(100); 1486eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<AutocheckoutStatistic> statistics; 1487eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch statistics.push_back(statistic); 14882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_->SendAutocheckoutStatus(autofill::SUCCESS, 14892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(kMerchantUrl), 1490eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch statistics, 14912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "google_transaction_id"); 1492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1493eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch kSendAutocheckoutStatusWithStatisticsValidRequest, 1494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ")]}"); // Invalid JSON. Should be ignored. 14952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, SendAutocheckoutStatusOfFailure) { 1498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); 1499ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 15002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1501eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<AutocheckoutStatistic> statistics; 15022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_client_->SendAutocheckoutStatus(autofill::CANNOT_PROCEED, 15032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(kMerchantUrl), 1504eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch statistics, 15052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "google_transaction_id"); 1506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 1507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kSendAutocheckoutStatusOfFailureValidRequest, 1508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ")]}"); // Invalid JSON. Should be ignored. 15092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, HasRequestInProgress) { 15122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(wallet_client_->HasRequestInProgress()); 1513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1515ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 15162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_client_->GetWalletItems(GURL(kMerchantUrl)); 15182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(wallet_client_->HasRequestInProgress()); 15192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 15212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kGetWalletItemsValidRequest, 15222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kGetWalletItemsValidResponse); 15232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(wallet_client_->HasRequestInProgress()); 15242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(WalletClientTest, PendingRequest) { 1527c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0U, wallet_client_->pending_requests_.size()); 15282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Shouldn't queue the first request. 1530ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 1531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_client_->GetWalletItems(GURL(kMerchantUrl)); 15322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0U, wallet_client_->pending_requests_.size()); 1533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testing::Mock::VerifyAndClear(delegate_.metric_logger()); 15342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_client_->GetWalletItems(GURL(kMerchantUrl)); 15362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, wallet_client_->pending_requests_.size()); 15372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1540ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 15412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_OK, 15422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kGetWalletItemsValidRequest, 15432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kGetWalletItemsValidResponse); 15442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0U, wallet_client_->pending_requests_.size()); 1545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testing::Mock::VerifyAndClear(delegate_.metric_logger()); 15462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(delegate_, OnWalletError( 15482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletClient::SERVICE_UNAVAILABLE)).Times(1); 1549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); 1551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectWalletErrorMetric( 1552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics::WALLET_SERVICE_UNAVAILABLE); 1553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Finish the second request. 15552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR, 15562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kGetWalletItemsValidRequest, 15572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kErrorResponse); 15582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WalletClientTest, CancelRequests) { 15612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(0U, wallet_client_->pending_requests_.size()); 1562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, 1563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0); 1564ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch delegate_.ExpectBaselineMetrics(); 15652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_client_->GetWalletItems(GURL(kMerchantUrl)); 1567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_client_->GetWalletItems(GURL(kMerchantUrl)); 1568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_client_->GetWalletItems(GURL(kMerchantUrl)); 15692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2U, wallet_client_->pending_requests_.size()); 15702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1571c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_client_->CancelRequests(); 15722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0U, wallet_client_->pending_requests_.size()); 1573c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(wallet_client_->HasRequestInProgress()); 15742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace wallet 15772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace autofill 1578