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