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