| Index: components/autofill/content/browser/wallet/wallet_client_unittest.cc
|
| diff --git a/components/autofill/content/browser/wallet/wallet_client_unittest.cc b/components/autofill/content/browser/wallet/wallet_client_unittest.cc
|
| deleted file mode 100644
|
| index 7c1040d78a8f3078d7cafe870d7afe2e92fb4a63..0000000000000000000000000000000000000000
|
| --- a/components/autofill/content/browser/wallet/wallet_client_unittest.cc
|
| +++ /dev/null
|
| @@ -1,1903 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "base/json/json_reader.h"
|
| -#include "base/json/json_writer.h"
|
| -#include "base/logging.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/string_split.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/test/histogram_tester.h"
|
| -#include "base/thread_task_runner_handle.h"
|
| -#include "base/values.h"
|
| -#include "components/autofill/content/browser/wallet/full_wallet.h"
|
| -#include "components/autofill/content/browser/wallet/instrument.h"
|
| -#include "components/autofill/content/browser/wallet/wallet_client.h"
|
| -#include "components/autofill/content/browser/wallet/wallet_client_delegate.h"
|
| -#include "components/autofill/content/browser/wallet/wallet_items.h"
|
| -#include "components/autofill/content/browser/wallet/wallet_test_util.h"
|
| -#include "components/autofill/core/browser/autofill_metrics.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| -#include "net/base/escape.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/http/http_request_headers.h"
|
| -#include "net/http/http_status_code.h"
|
| -#include "net/url_request/test_url_fetcher_factory.h"
|
| -#include "net/url_request/url_fetcher_delegate.h"
|
| -#include "net/url_request/url_request_status.h"
|
| -#include "net/url_request/url_request_test_util.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "url/gurl.h"
|
| -
|
| -namespace autofill {
|
| -namespace wallet {
|
| -
|
| -namespace {
|
| -
|
| -const char kGoogleTransactionId[] = "google-transaction-id";
|
| -const char kMerchantUrl[] = "https://example.com/path?key=value";
|
| -
|
| -const char kGetFullWalletValidResponse[] =
|
| - "{"
|
| - " \"expiration_month\":12,"
|
| - " \"expiration_year\":3000,"
|
| - " \"iin\":\"iin\","
|
| - " \"rest\":\"rest\","
|
| - " \"billing_address\":"
|
| - " {"
|
| - " \"id\":\"id\","
|
| - " \"phone_number\":\"phone_number\","
|
| - " \"postal_address\":"
|
| - " {"
|
| - " \"recipient_name\":\"recipient_name\","
|
| - " \"address_line\":"
|
| - " ["
|
| - " \"address_line_1\","
|
| - " \"address_line_2\""
|
| - " ],"
|
| - " \"locality_name\":\"locality_name\","
|
| - " \"administrative_area_name\":\"administrative_area_name\","
|
| - " \"postal_code_number\":\"postal_code_number\","
|
| - " \"country_name_code\":\"US\","
|
| - " \"language_code\":\"language_code\""
|
| - " }"
|
| - " },"
|
| - " \"shipping_address\":"
|
| - " {"
|
| - " \"id\":\"ship_id\","
|
| - " \"phone_number\":\"ship_phone_number\","
|
| - " \"postal_address\":"
|
| - " {"
|
| - " \"recipient_name\":\"ship_recipient_name\","
|
| - " \"address_line\":"
|
| - " ["
|
| - " \"ship_address_line_1\","
|
| - " \"ship_address_line_2\""
|
| - " ],"
|
| - " \"locality_name\":\"ship_locality_name\","
|
| - " \"administrative_area_name\":\"ship_administrative_area_name\","
|
| - " \"postal_code_number\":\"ship_postal_code_number\","
|
| - " \"country_name_code\":\"US\","
|
| - " \"language_code\":\"ship_language_code\""
|
| - " }"
|
| - " },"
|
| - " \"required_action\":"
|
| - " ["
|
| - " ]"
|
| - "}";
|
| -
|
| -const char kGetFullWalletInvalidResponse[] =
|
| - "{"
|
| - " \"garbage\":123"
|
| - "}";
|
| -
|
| -const char kGetWalletItemsValidResponse[] =
|
| - "{"
|
| - " \"required_action\":"
|
| - " ["
|
| - " ],"
|
| - " \"google_transaction_id\":\"google_transaction_id\","
|
| - " \"instrument\":"
|
| - " ["
|
| - " {"
|
| - " \"descriptive_name\":\"descriptive_name\","
|
| - " \"type\":\"VISA\","
|
| - " \"last_four_digits\":\"4111\","
|
| - " \"expiration_month\":12,"
|
| - " \"expiration_year\":3000,"
|
| - " \"brand\":\"monkeys\","
|
| - " \"billing_address\":"
|
| - " {"
|
| - " \"name\":\"name\","
|
| - " \"address1\":\"address1\","
|
| - " \"address2\":\"address2\","
|
| - " \"city\":\"city\","
|
| - " \"state\":\"state\","
|
| - " \"postal_code\":\"postal_code\","
|
| - " \"phone_number\":\"phone_number\","
|
| - " \"country_code\":\"US\","
|
| - " \"language_code\":\"language_code\""
|
| - " },"
|
| - " \"status\":\"VALID\","
|
| - " \"object_id\":\"default_instrument_id\""
|
| - " }"
|
| - " ],"
|
| - " \"default_instrument_id\":\"default_instrument_id\","
|
| - " \"obfuscated_gaia_id\":\"obfuscated_gaia_id\","
|
| - " \"address\":"
|
| - " ["
|
| - " ],"
|
| - " \"default_address_id\":\"default_address_id\","
|
| - " \"required_legal_document\":"
|
| - " ["
|
| - " ]"
|
| - "}";
|
| -
|
| -const char kSaveAddressValidResponse[] =
|
| - "{"
|
| - " \"shipping_address_id\":\"saved_address_id\""
|
| - "}";
|
| -
|
| -const char kSaveAddressWithRequiredActionsValidResponse[] =
|
| - "{"
|
| - " \"form_field_error\":"
|
| - " ["
|
| - " {"
|
| - " \"location\":\"SHIPPING_ADDRESS\","
|
| - " \"type\":\"INVALID_POSTAL_CODE\""
|
| - " }"
|
| - " ],"
|
| - " \"required_action\":"
|
| - " ["
|
| - " \" \\treqUIRE_PhOnE_number \\n\\r\","
|
| - " \"INVALID_form_field\""
|
| - " ]"
|
| - "}";
|
| -
|
| -const char kSaveWithInvalidRequiredActionsResponse[] =
|
| - "{"
|
| - " \"required_action\":"
|
| - " ["
|
| - " \" setup_wallet\","
|
| - " \" \\treqUIRE_PhOnE_number \\n\\r\","
|
| - " \"INVALID_form_field\""
|
| - " ]"
|
| - "}";
|
| -
|
| -const char kSaveInvalidResponse[] =
|
| - "{"
|
| - " \"garbage\":123"
|
| - "}";
|
| -
|
| -const char kSaveInstrumentValidResponse[] =
|
| - "{"
|
| - " \"instrument_id\":\"instrument_id\""
|
| - "}";
|
| -
|
| -const char kSaveInstrumentWithRequiredActionsValidResponse[] =
|
| - "{"
|
| - " \"form_field_error\":"
|
| - " ["
|
| - " {"
|
| - " \"location\":\"SHIPPING_ADDRESS\","
|
| - " \"type\":\"INVALID_POSTAL_CODE\""
|
| - " }"
|
| - " ],"
|
| - " \"required_action\":"
|
| - " ["
|
| - " \" \\treqUIRE_PhOnE_number \\n\\r\","
|
| - " \"INVALID_form_field\""
|
| - " ]"
|
| - "}";
|
| -
|
| -const char kSaveInstrumentAndAddressValidResponse[] =
|
| - "{"
|
| - " \"shipping_address_id\":\"saved_address_id\","
|
| - " \"instrument_id\":\"saved_instrument_id\""
|
| - "}";
|
| -
|
| -const char kSaveInstrumentAndAddressWithRequiredActionsValidResponse[] =
|
| - "{"
|
| - " \"form_field_error\":"
|
| - " ["
|
| - " {"
|
| - " \"location\":\"SHIPPING_ADDRESS\","
|
| - " \"type\":\"INVALID_POSTAL_CODE\""
|
| - " }"
|
| - " ],"
|
| - " \"required_action\":"
|
| - " ["
|
| - " \" \\treqUIRE_PhOnE_number \\n\\r\","
|
| - " \"INVALID_form_field\""
|
| - " ]"
|
| - "}";
|
| -
|
| -const char kUpdateInstrumentValidResponse[] =
|
| - "{"
|
| - " \"instrument_id\":\"instrument_id\""
|
| - "}";
|
| -
|
| -const char kUpdateAddressValidResponse[] =
|
| - "{"
|
| - " \"shipping_address_id\":\"shipping_address_id\""
|
| - "}";
|
| -
|
| -const char kUpdateWithRequiredActionsValidResponse[] =
|
| - "{"
|
| - " \"form_field_error\":"
|
| - " ["
|
| - " {"
|
| - " \"location\":\"SHIPPING_ADDRESS\","
|
| - " \"type\":\"INVALID_POSTAL_CODE\""
|
| - " }"
|
| - " ],"
|
| - " \"required_action\":"
|
| - " ["
|
| - " \" \\treqUIRE_PhOnE_number \\n\\r\","
|
| - " \"INVALID_form_field\""
|
| - " ]"
|
| - "}";
|
| -
|
| -const char kUpdateMalformedResponse[] =
|
| - "{"
|
| - " \"cheese\":\"monkeys\""
|
| - "}";
|
| -
|
| -const char kAuthenticateInstrumentFailureResponse[] =
|
| - "{"
|
| - " \"auth_result\":\"anything else\""
|
| - "}";
|
| -
|
| -const char kAuthenticateInstrumentSuccessResponse[] =
|
| - "{"
|
| - " \"auth_result\":\"SUCCESS\""
|
| - "}";
|
| -
|
| -const char kErrorResponse[] =
|
| - "{"
|
| - " \"error_type\":\"APPLICATION_ERROR\","
|
| - " \"error_detail\":\"error_detail\","
|
| - " \"application_error\":\"application_error\","
|
| - " \"debug_data\":"
|
| - " {"
|
| - " \"debug_message\":\"debug_message\","
|
| - " \"stack_trace\":\"stack_trace\""
|
| - " },"
|
| - " \"application_error_data\":\"application_error_data\","
|
| - " \"wallet_error\":"
|
| - " {"
|
| - " \"error_type\":\"SERVICE_UNAVAILABLE\","
|
| - " \"error_detail\":\"error_detail\","
|
| - " \"message_for_user\":"
|
| - " {"
|
| - " \"text\":\"text\","
|
| - " \"subtext\":\"subtext\","
|
| - " \"details\":\"details\""
|
| - " }"
|
| - " }"
|
| - "}";
|
| -
|
| -const char kErrorResponseSpendingLimitExceeded[] =
|
| - "{"
|
| - " \"error_type\":\"APPLICATION_ERROR\","
|
| - " \"error_detail\":\"error_detail\","
|
| - " \"application_error\":\"application_error\","
|
| - " \"debug_data\":"
|
| - " {"
|
| - " \"debug_message\":\"debug_message\","
|
| - " \"stack_trace\":\"stack_trace\""
|
| - " },"
|
| - " \"application_error_data\":\"application_error_data\","
|
| - " \"wallet_error\":"
|
| - " {"
|
| - " \"error_type\":\"SPENDING_LIMIT_EXCEEDED\","
|
| - " \"error_detail\":\"error_detail\","
|
| - " \"message_for_user\":"
|
| - " {"
|
| - " \"text\":\"text\","
|
| - " \"subtext\":\"subtext\","
|
| - " \"details\":\"details\""
|
| - " }"
|
| - " }"
|
| - "}";
|
| -
|
| -const char kErrorTypeMissingInResponse[] =
|
| - "{"
|
| - " \"error_type\":\"Not APPLICATION_ERROR\","
|
| - " \"error_detail\":\"error_detail\","
|
| - " \"application_error\":\"application_error\","
|
| - " \"debug_data\":"
|
| - " {"
|
| - " \"debug_message\":\"debug_message\","
|
| - " \"stack_trace\":\"stack_trace\""
|
| - " },"
|
| - " \"application_error_data\":\"application_error_data\""
|
| - "}";
|
| -
|
| -// The JSON below is used to test against the request payload being sent to
|
| -// Online Wallet. It's indented differently since JSONWriter creates compact
|
| -// JSON from DictionaryValues. NB: The values must be alphabetical to pass
|
| -// the tests.
|
| -
|
| -const char kAcceptLegalDocumentsValidRequest[] =
|
| - "{"
|
| - "\"accepted_legal_document\":"
|
| - "["
|
| - "\"doc_id_1\","
|
| - "\"doc_id_2\""
|
| - "],"
|
| - "\"google_transaction_id\":\"google-transaction-id\","
|
| - "\"merchant_domain\":\"https://example.com/\""
|
| - "}";
|
| -
|
| -const char kAuthenticateInstrumentValidRequest[] =
|
| - "{"
|
| - "\"instrument_id\":\"instrument_id\","
|
| - "\"risk_params\":\"risky business\""
|
| - "}";
|
| -
|
| -const char kGetFullWalletValidRequest[] =
|
| - "{"
|
| - "\"feature\":\"REQUEST_AUTOCOMPLETE\","
|
| - "\"google_transaction_id\":\"google_transaction_id\","
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"new_wallet_user\":false,"
|
| - "\"phone_number_required\":true,"
|
| - "\"risk_params\":\"risky business\","
|
| - "\"selected_address_id\":\"shipping_address_id\","
|
| - "\"selected_instrument_id\":\"instrument_id\","
|
| - "\"supported_risk_challenge\":"
|
| - "["
|
| - "],"
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kGetFullWalletValidRequestNewUser[] =
|
| - "{"
|
| - "\"feature\":\"REQUEST_AUTOCOMPLETE\","
|
| - "\"google_transaction_id\":\"google_transaction_id\","
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"new_wallet_user\":true,"
|
| - "\"phone_number_required\":true,"
|
| - "\"risk_params\":\"risky business\","
|
| - "\"selected_address_id\":\"shipping_address_id\","
|
| - "\"selected_instrument_id\":\"instrument_id\","
|
| - "\"supported_risk_challenge\":"
|
| - "["
|
| - "],"
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kGetFullWalletWithRiskCapabilitesValidRequest[] =
|
| - "{"
|
| - "\"feature\":\"REQUEST_AUTOCOMPLETE\","
|
| - "\"google_transaction_id\":\"google_transaction_id\","
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"new_wallet_user\":false,"
|
| - "\"phone_number_required\":true,"
|
| - "\"risk_params\":\"risky business\","
|
| - "\"selected_address_id\":\"shipping_address_id\","
|
| - "\"selected_instrument_id\":\"instrument_id\","
|
| - "\"supported_risk_challenge\":"
|
| - "["
|
| - "\"VERIFY_CVC\""
|
| - "],"
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kGetWalletItemsValidRequest[] =
|
| - "{"
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"phone_number_required\":true,"
|
| - "\"shipping_address_required\":true,"
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kGetWalletItemsWithTransactionDetails[] =
|
| - "{"
|
| - "\"currency_code\":\"USD\","
|
| - "\"estimated_total_price\":\"100.00\","
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"phone_number_required\":true,"
|
| - "\"shipping_address_required\":true,"
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kGetWalletItemsNoShippingRequest[] =
|
| - "{"
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"phone_number_required\":true,"
|
| - "\"shipping_address_required\":false,"
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kSaveAddressValidRequest[] =
|
| - "{"
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"phone_number_required\":true,"
|
| - "\"risk_params\":\"risky business\","
|
| - "\"shipping_address\":"
|
| - "{"
|
| - "\"phone_number\":\"save_phone_number\","
|
| - "\"postal_address\":"
|
| - "{"
|
| - "\"address_line\":"
|
| - "["
|
| - "\"save_address_line_1\","
|
| - "\"save_address_line_2\""
|
| - "],"
|
| - "\"administrative_area_name\":\"save_admin_area_name\","
|
| - "\"country_name_code\":\"US\","
|
| - "\"dependent_locality_name\":\"save_dependent_locality_name\","
|
| - "\"language_code\":\"save_language_code\","
|
| - "\"locality_name\":\"save_locality_name\","
|
| - "\"postal_code_number\":\"save_postal_code_number\","
|
| - "\"recipient_name\":\"save_recipient_name\","
|
| - "\"sorting_code\":\"save_sorting_code\""
|
| - "}"
|
| - "},"
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kSaveInstrumentValidRequest[] =
|
| - "{"
|
| - "\"instrument\":"
|
| - "{"
|
| - "\"credit_card\":"
|
| - "{"
|
| - "\"address\":"
|
| - "{"
|
| - "\"address_line\":"
|
| - "["
|
| - "\"address_line_1\","
|
| - "\"address_line_2\""
|
| - "],"
|
| - "\"administrative_area_name\":\"admin_area_name\","
|
| - "\"country_name_code\":\"US\","
|
| - "\"dependent_locality_name\":\"dependent_locality_name\","
|
| - "\"language_code\":\"language_code\","
|
| - "\"locality_name\":\"locality_name\","
|
| - "\"postal_code_number\":\"postal_code_number\","
|
| - "\"recipient_name\":\"recipient_name\","
|
| - "\"sorting_code\":\"sorting_code\""
|
| - "},"
|
| - "\"exp_month\":12,"
|
| - "\"exp_year\":3000,"
|
| - "\"fop_type\":\"VISA\","
|
| - "\"last_4_digits\":\"4448\""
|
| - "},"
|
| - "\"type\":\"CREDIT_CARD\""
|
| - "},"
|
| - "\"instrument_phone_number\":\"phone_number\","
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"phone_number_required\":true,"
|
| - "\"risk_params\":\"risky business\","
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kSaveInstrumentAndAddressValidRequest[] =
|
| - "{"
|
| - "\"instrument\":"
|
| - "{"
|
| - "\"credit_card\":"
|
| - "{"
|
| - "\"address\":"
|
| - "{"
|
| - "\"address_line\":"
|
| - "["
|
| - "\"address_line_1\","
|
| - "\"address_line_2\""
|
| - "],"
|
| - "\"administrative_area_name\":\"admin_area_name\","
|
| - "\"country_name_code\":\"US\","
|
| - "\"dependent_locality_name\":\"dependent_locality_name\","
|
| - "\"language_code\":\"language_code\","
|
| - "\"locality_name\":\"locality_name\","
|
| - "\"postal_code_number\":\"postal_code_number\","
|
| - "\"recipient_name\":\"recipient_name\","
|
| - "\"sorting_code\":\"sorting_code\""
|
| - "},"
|
| - "\"exp_month\":12,"
|
| - "\"exp_year\":3000,"
|
| - "\"fop_type\":\"VISA\","
|
| - "\"last_4_digits\":\"4448\""
|
| - "},"
|
| - "\"type\":\"CREDIT_CARD\""
|
| - "},"
|
| - "\"instrument_phone_number\":\"phone_number\","
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"phone_number_required\":true,"
|
| - "\"risk_params\":\"risky business\","
|
| - "\"shipping_address\":"
|
| - "{"
|
| - "\"phone_number\":\"save_phone_number\","
|
| - "\"postal_address\":"
|
| - "{"
|
| - "\"address_line\":"
|
| - "["
|
| - "\"save_address_line_1\","
|
| - "\"save_address_line_2\""
|
| - "],"
|
| - "\"administrative_area_name\":\"save_admin_area_name\","
|
| - "\"country_name_code\":\"US\","
|
| - "\"dependent_locality_name\":\"save_dependent_locality_name\","
|
| - "\"language_code\":\"save_language_code\","
|
| - "\"locality_name\":\"save_locality_name\","
|
| - "\"postal_code_number\":\"save_postal_code_number\","
|
| - "\"recipient_name\":\"save_recipient_name\","
|
| - "\"sorting_code\":\"save_sorting_code\""
|
| - "}"
|
| - "},"
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kUpdateAddressValidRequest[] =
|
| - "{"
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"phone_number_required\":true,"
|
| - "\"risk_params\":\"risky business\","
|
| - "\"shipping_address\":"
|
| - "{"
|
| - "\"id\":\"address_id\","
|
| - "\"phone_number\":\"ship_phone_number\","
|
| - "\"postal_address\":"
|
| - "{"
|
| - "\"address_line\":"
|
| - "["
|
| - "\"ship_address_line_1\","
|
| - "\"ship_address_line_2\""
|
| - "],"
|
| - "\"administrative_area_name\":\"ship_admin_area_name\","
|
| - "\"country_name_code\":\"US\","
|
| - "\"dependent_locality_name\":\"ship_dependent_locality_name\","
|
| - "\"language_code\":\"ship_language_code\","
|
| - "\"locality_name\":\"ship_locality_name\","
|
| - "\"postal_code_number\":\"ship_postal_code_number\","
|
| - "\"recipient_name\":\"ship_recipient_name\","
|
| - "\"sorting_code\":\"ship_sorting_code\""
|
| - "}"
|
| - "},"
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kUpdateInstrumentAddressValidRequest[] =
|
| - "{"
|
| - "\"instrument_phone_number\":\"phone_number\","
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"phone_number_required\":true,"
|
| - "\"risk_params\":\"risky business\","
|
| - "\"upgraded_billing_address\":"
|
| - "{"
|
| - "\"address_line\":"
|
| - "["
|
| - "\"address_line_1\","
|
| - "\"address_line_2\""
|
| - "],"
|
| - "\"administrative_area_name\":\"admin_area_name\","
|
| - "\"country_name_code\":\"US\","
|
| - "\"dependent_locality_name\":\"dependent_locality_name\","
|
| - "\"language_code\":\"language_code\","
|
| - "\"locality_name\":\"locality_name\","
|
| - "\"postal_code_number\":\"postal_code_number\","
|
| - "\"recipient_name\":\"recipient_name\","
|
| - "\"sorting_code\":\"sorting_code\""
|
| - "},"
|
| - "\"upgraded_instrument_id\":\"default_instrument_id\","
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kUpdateInstrumentAddressWithNameChangeValidRequest[] =
|
| - "{"
|
| - "\"instrument_phone_number\":\"phone_number\","
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"phone_number_required\":true,"
|
| - "\"risk_params\":\"risky business\","
|
| - "\"upgraded_billing_address\":"
|
| - "{"
|
| - "\"address_line\":"
|
| - "["
|
| - "\"address_line_1\","
|
| - "\"address_line_2\""
|
| - "],"
|
| - "\"administrative_area_name\":\"admin_area_name\","
|
| - "\"country_name_code\":\"US\","
|
| - "\"dependent_locality_name\":\"dependent_locality_name\","
|
| - "\"language_code\":\"language_code\","
|
| - "\"locality_name\":\"locality_name\","
|
| - "\"postal_code_number\":\"postal_code_number\","
|
| - "\"recipient_name\":\"recipient_name\","
|
| - "\"sorting_code\":\"sorting_code\""
|
| - "},"
|
| - "\"upgraded_instrument_id\":\"default_instrument_id\","
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -const char kUpdateInstrumentExpirationDateValidRequest[] =
|
| - "{"
|
| - "\"instrument\":"
|
| - "{"
|
| - "\"credit_card\":"
|
| - "{"
|
| - "\"exp_month\":12,"
|
| - "\"exp_year\":3001"
|
| - "},"
|
| - "\"type\":\"CREDIT_CARD\""
|
| - "},"
|
| - "\"merchant_domain\":\"https://example.com/\","
|
| - "\"phone_number_required\":true,"
|
| - "\"risk_params\":\"risky business\","
|
| - "\"upgraded_instrument_id\":\"instrument_id\","
|
| - "\"use_minimal_addresses\":false"
|
| - "}";
|
| -
|
| -void ExpectBaselineMetrics(const base::HistogramTester& histogram) {
|
| - histogram.ExpectBucketCount(
|
| - "RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_ERROR_BASELINE_ISSUED_REQUEST, 1);
|
| - histogram.ExpectBucketCount(
|
| - "RequestAutocomplete.WalletRequiredActions",
|
| - AutofillMetrics::WALLET_REQUIRED_ACTION_BASELINE_ISSUED_REQUEST, 1);
|
| -}
|
| -
|
| -void ExpectCommonWalletRequiredActionMetrics(
|
| - const base::HistogramTester& histogram) {
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletRequiredActions",
|
| - AutofillMetrics::REQUIRE_PHONE_NUMBER, 1);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletRequiredActions",
|
| - AutofillMetrics::INVALID_FORM_FIELD, 1);
|
| -}
|
| -
|
| -class MockWalletClientDelegate : public WalletClientDelegate {
|
| - public:
|
| - MockWalletClientDelegate()
|
| - : full_wallets_received_(0),
|
| - wallet_items_received_(0),
|
| - is_shipping_required_(true) {}
|
| - ~MockWalletClientDelegate() {}
|
| -
|
| - std::string GetRiskData() const override {
|
| - return "risky business";
|
| - }
|
| -
|
| - std::string GetWalletCookieValue() const override {
|
| - return "gdToken";
|
| - }
|
| -
|
| - bool IsShippingAddressRequired() const override {
|
| - return is_shipping_required_;
|
| - }
|
| -
|
| - void SetIsShippingAddressRequired(bool is_shipping_required) {
|
| - is_shipping_required_ = is_shipping_required;
|
| - }
|
| -
|
| - MOCK_METHOD0(OnDidAcceptLegalDocuments, void());
|
| - MOCK_METHOD1(OnDidAuthenticateInstrument, void(bool success));
|
| - MOCK_METHOD4(OnDidSaveToWallet,
|
| - void(const std::string& instrument_id,
|
| - const std::string& shipping_address_id,
|
| - const std::vector<RequiredAction>& required_actions,
|
| - const std::vector<FormFieldError>& form_field_errors));
|
| - MOCK_METHOD1(OnWalletError, void(WalletClient::ErrorType error_type));
|
| -
|
| - void OnDidGetFullWallet(scoped_ptr<FullWallet> full_wallet) override {
|
| - EXPECT_TRUE(full_wallet);
|
| - ++full_wallets_received_;
|
| - }
|
| - void OnDidGetWalletItems(scoped_ptr<WalletItems> wallet_items) override {
|
| - EXPECT_TRUE(wallet_items);
|
| - ++wallet_items_received_;
|
| - }
|
| - size_t full_wallets_received() const { return full_wallets_received_; }
|
| - size_t wallet_items_received() const { return wallet_items_received_; }
|
| -
|
| - private:
|
| - size_t full_wallets_received_;
|
| - size_t wallet_items_received_;
|
| - bool is_shipping_required_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -class WalletClientTest : public testing::Test {
|
| - public:
|
| - WalletClientTest()
|
| - : request_context_(new net::TestURLRequestContextGetter(
|
| - base::ThreadTaskRunnerHandle::Get())) {}
|
| - ~WalletClientTest() override {}
|
| -
|
| - void SetUp() override {
|
| - wallet_client_.reset(new WalletClient(
|
| - request_context_.get(), &delegate_, GURL(kMerchantUrl)));
|
| - }
|
| -
|
| - void TearDown() override { wallet_client_.reset(); }
|
| -
|
| - void VerifyAndFinishRequest(net::HttpStatusCode response_code,
|
| - const std::string& request_body,
|
| - const std::string& response_body) {
|
| - net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - const std::string& upload_data = fetcher->upload_data();
|
| - EXPECT_EQ(request_body, GetData(upload_data));
|
| - net::HttpRequestHeaders request_headers;
|
| - fetcher->GetExtraRequestHeaders(&request_headers);
|
| - std::string auth_header_value;
|
| - EXPECT_TRUE(request_headers.GetHeader(
|
| - net::HttpRequestHeaders::kAuthorization,
|
| - &auth_header_value));
|
| - EXPECT_EQ("GoogleLogin auth=gdToken", auth_header_value);
|
| -
|
| - fetcher->set_response_code(response_code);
|
| - fetcher->SetResponseString(response_body);
|
| - fetcher->delegate()->OnURLFetchComplete(fetcher);
|
| -
|
| - // Pump the message loop to catch up to any asynchronous tasks that might
|
| - // have been posted from OnURLFetchComplete().
|
| - base::RunLoop().RunUntilIdle();
|
| - }
|
| -
|
| - void VerifyAndFinishFormEncodedRequest(net::HttpStatusCode response_code,
|
| - const std::string& json_payload,
|
| - const std::string& response_body,
|
| - size_t expected_parameter_number) {
|
| - net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - net::HttpRequestHeaders request_headers;
|
| - fetcher->GetExtraRequestHeaders(&request_headers);
|
| - std::string auth_header_value;
|
| - EXPECT_TRUE(request_headers.GetHeader(
|
| - net::HttpRequestHeaders::kAuthorization,
|
| - &auth_header_value));
|
| - EXPECT_EQ("GoogleLogin auth=gdToken", auth_header_value);
|
| -
|
| - const std::string& upload_data = fetcher->upload_data();
|
| - base::StringPairs tokens;
|
| - base::SplitStringIntoKeyValuePairs(upload_data, '=', '&', &tokens);
|
| - EXPECT_EQ(tokens.size(), expected_parameter_number);
|
| -
|
| - size_t num_params = 0U;
|
| - for (base::StringPairs::const_iterator iter = tokens.begin();
|
| - iter != tokens.end();
|
| - ++iter) {
|
| - const std::string& key = iter->first;
|
| - const std::string& value = iter->second;
|
| -
|
| - if (key == "request_content_type") {
|
| - EXPECT_EQ("application/json", value);
|
| - num_params++;
|
| - }
|
| -
|
| - if (key == "request") {
|
| - EXPECT_EQ(json_payload,
|
| - GetData(
|
| - net::UnescapeURLComponent(
|
| - value, net::UnescapeRule::URL_SPECIAL_CHARS |
|
| - net::UnescapeRule::REPLACE_PLUS_WITH_SPACE)));
|
| - num_params++;
|
| - }
|
| -
|
| - if (key == "cvn") {
|
| - EXPECT_EQ("123", value);
|
| - num_params++;
|
| - }
|
| -
|
| - if (key == "card_number") {
|
| - EXPECT_EQ("4444444444444448", value);
|
| - num_params++;
|
| - }
|
| -
|
| - if (key == "otp") {
|
| - EXPECT_FALSE(value.empty());
|
| - num_params++;
|
| - }
|
| - }
|
| - EXPECT_EQ(expected_parameter_number, num_params);
|
| -
|
| - fetcher->set_response_code(response_code);
|
| - fetcher->SetResponseString(response_body);
|
| - fetcher->delegate()->OnURLFetchComplete(fetcher);
|
| - }
|
| -
|
| - void TestWalletErrorCode(
|
| - const std::string& error_type_string,
|
| - const std::string& message_type_for_buyer_string,
|
| - WalletClient::ErrorType expected_error_type,
|
| - AutofillMetrics::WalletErrorMetric expected_autofill_metric) {
|
| - static const char kResponseTemplate[] =
|
| - "{"
|
| - " \"error_type\":\"APPLICATION_ERROR\","
|
| - " \"error_detail\":\"error_detail\","
|
| - " \"application_error\":\"application_error\","
|
| - " \"debug_data\":"
|
| - " {"
|
| - " \"debug_message\":\"debug_message\","
|
| - " \"stack_trace\":\"stack_trace\""
|
| - " },"
|
| - " \"application_error_data\":\"application_error_data\","
|
| - " \"wallet_error\":"
|
| - " {"
|
| - " \"error_type\":\"%s\","
|
| - " %s" // Placeholder for |user_error_type|.
|
| - " \"error_detail\":\"error_detail\","
|
| - " \"message_for_user\":"
|
| - " {"
|
| - " \"text\":\"text\","
|
| - " \"subtext\":\"subtext\","
|
| - " \"details\":\"details\""
|
| - " }"
|
| - " }"
|
| - "}";
|
| - EXPECT_CALL(delegate_, OnWalletError(expected_error_type)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| - std::string buyer_error;
|
| - if (!message_type_for_buyer_string.empty()) {
|
| - buyer_error = base::StringPrintf("\"message_type_for_buyer\":\"%s\",",
|
| - message_type_for_buyer_string.c_str());
|
| - }
|
| - std::string response = base::StringPrintf(kResponseTemplate,
|
| - error_type_string.c_str(),
|
| - buyer_error.c_str());
|
| - VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR,
|
| - kGetWalletItemsValidRequest,
|
| - response);
|
| -
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - expected_autofill_metric, 1);
|
| - ExpectBaselineMetrics(histogram);
|
| - }
|
| -
|
| - protected:
|
| - content::TestBrowserThreadBundle thread_bundle_;
|
| - scoped_ptr<WalletClient> wallet_client_;
|
| - scoped_refptr<net::TestURLRequestContextGetter> request_context_;
|
| - MockWalletClientDelegate delegate_;
|
| -
|
| - private:
|
| - std::string GetData(const std::string& upload_data) {
|
| - scoped_ptr<base::Value> root = base::JSONReader::Read(upload_data);
|
| -
|
| - // If this is not a JSON dictionary, return plain text.
|
| - if (!root || !root->IsType(base::Value::TYPE_DICTIONARY))
|
| - return upload_data;
|
| -
|
| - // Remove api_key entry (to prevent accidental leak), return JSON as text.
|
| - base::DictionaryValue* dict =
|
| - static_cast<base::DictionaryValue*>(root.get());
|
| - dict->Remove("api_key", NULL);
|
| - std::string clean_upload_data;
|
| - base::JSONWriter::Write(*dict, &clean_upload_data);
|
| - return clean_upload_data;
|
| - }
|
| -
|
| - net::TestURLFetcherFactory factory_;
|
| -};
|
| -
|
| -TEST_F(WalletClientTest, WalletErrorCodes) {
|
| - struct {
|
| - std::string error_type_string;
|
| - std::string message_type_for_buyer_string;
|
| - WalletClient::ErrorType expected_error_type;
|
| - AutofillMetrics::WalletErrorMetric expected_autofill_metric;
|
| - } test_cases[] = {
|
| - // General |BUYER_ACCOUNT_ERROR| with no |message_type_for_buyer_string|.
|
| - {
|
| - "buyer_account_error",
|
| - "",
|
| - WalletClient::BUYER_ACCOUNT_ERROR,
|
| - AutofillMetrics::WALLET_BUYER_ACCOUNT_ERROR
|
| - },
|
| - // |BUYER_ACCOUNT_ERROR| with "buyer_legal_address_not_supported" in
|
| - // message_type_for_buyer field.
|
| - {
|
| - "buyer_account_error",
|
| - "bla_country_not_supported",
|
| - WalletClient::BUYER_LEGAL_ADDRESS_NOT_SUPPORTED,
|
| - AutofillMetrics::WALLET_BUYER_LEGAL_ADDRESS_NOT_SUPPORTED
|
| - },
|
| - // |BUYER_ACCOUNT_ERROR| with KYC error code in message_type_for_buyer
|
| - // field.
|
| - {
|
| - "buyer_account_error",
|
| - "buyer_kyc_error",
|
| - WalletClient::UNVERIFIED_KNOW_YOUR_CUSTOMER_STATUS,
|
| - AutofillMetrics::WALLET_UNVERIFIED_KNOW_YOUR_CUSTOMER_STATUS
|
| - },
|
| - // |BUYER_ACCOUNT_ERROR| with un-recognizable |message_type_for_buyer|.
|
| - {
|
| - "buyer_account_error",
|
| - "random_string",
|
| - WalletClient::BUYER_ACCOUNT_ERROR,
|
| - AutofillMetrics::WALLET_BUYER_ACCOUNT_ERROR
|
| - },
|
| - // The following are other error types we could get from Wallet.
|
| - {
|
| - "unsupported_merchant",
|
| - "",
|
| - WalletClient::UNSUPPORTED_MERCHANT,
|
| - AutofillMetrics::WALLET_UNSUPPORTED_MERCHANT
|
| - },
|
| - {
|
| - "internal_error",
|
| - "",
|
| - WalletClient::INTERNAL_ERROR,
|
| - AutofillMetrics::WALLET_INTERNAL_ERROR
|
| - },
|
| - {
|
| - "invalid_params",
|
| - "",
|
| - WalletClient::INVALID_PARAMS,
|
| - AutofillMetrics::WALLET_INVALID_PARAMS
|
| - },
|
| - {
|
| - "service_unavailable",
|
| - "",
|
| - WalletClient::SERVICE_UNAVAILABLE,
|
| - AutofillMetrics::WALLET_SERVICE_UNAVAILABLE
|
| - },
|
| - {
|
| - "unsupported_api_version",
|
| - "",
|
| - WalletClient::UNSUPPORTED_API_VERSION,
|
| - AutofillMetrics::WALLET_UNSUPPORTED_API_VERSION
|
| - },
|
| - // Any un-recognizable |error_type| is a |UNKNOWN_ERROR|.
|
| - {
|
| - "random_string_1",
|
| - "",
|
| - WalletClient::UNKNOWN_ERROR,
|
| - AutofillMetrics::WALLET_UNKNOWN_ERROR
|
| - },
|
| - {
|
| - "random_string_2",
|
| - "",
|
| - WalletClient::UNKNOWN_ERROR,
|
| - AutofillMetrics::WALLET_UNKNOWN_ERROR
|
| - },
|
| - };
|
| -
|
| - for (size_t i = 0; i < arraysize(test_cases); ++i) {
|
| - SCOPED_TRACE(
|
| - base::StringPrintf(
|
| - "%s - %s",
|
| - test_cases[i].error_type_string.c_str(),
|
| - test_cases[i].message_type_for_buyer_string.c_str()));
|
| - TestWalletErrorCode(test_cases[i].error_type_string,
|
| - test_cases[i].message_type_for_buyer_string,
|
| - test_cases[i].expected_error_type,
|
| - test_cases[i].expected_autofill_metric);
|
| - }
|
| -}
|
| -
|
| -
|
| -TEST_F(WalletClientTest, WalletErrorResponseMissing) {
|
| - EXPECT_CALL(delegate_, OnWalletError(
|
| - WalletClient::UNKNOWN_ERROR)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| - VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR,
|
| - kGetWalletItemsValidRequest,
|
| - kErrorTypeMissingInResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_UNKNOWN_ERROR, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, NetworkFailureOnExpectedResponse) {
|
| - EXPECT_CALL(delegate_, OnWalletError(WalletClient::NETWORK_ERROR)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| - VerifyAndFinishRequest(net::HTTP_UNAUTHORIZED,
|
| - kGetWalletItemsValidRequest,
|
| - std::string());
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_NETWORK_ERROR, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, RequestError) {
|
| - EXPECT_CALL(delegate_, OnWalletError(WalletClient::BAD_REQUEST)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| - VerifyAndFinishRequest(net::HTTP_BAD_REQUEST,
|
| - kGetWalletItemsValidRequest,
|
| - std::string());
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_BAD_REQUEST, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, GetFullWalletSuccess) {
|
| - base::HistogramTester histogram;
|
| -
|
| - WalletClient::FullWalletRequest full_wallet_request(
|
| - "instrument_id",
|
| - "shipping_address_id",
|
| - "google_transaction_id",
|
| - std::vector<WalletClient::RiskCapability>(),
|
| - false);
|
| - wallet_client_->GetFullWallet(full_wallet_request);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kGetFullWalletValidRequest,
|
| - kGetFullWalletValidResponse,
|
| - 3U);
|
| - EXPECT_EQ(1U, delegate_.full_wallets_received());
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetFullWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, GetFullWalletSuccessNewuser) {
|
| - base::HistogramTester histogram;
|
| -
|
| - WalletClient::FullWalletRequest full_wallet_request(
|
| - "instrument_id",
|
| - "shipping_address_id",
|
| - "google_transaction_id",
|
| - std::vector<WalletClient::RiskCapability>(),
|
| - true);
|
| - wallet_client_->GetFullWallet(full_wallet_request);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kGetFullWalletValidRequestNewUser,
|
| - kGetFullWalletValidResponse,
|
| - 3U);
|
| - EXPECT_EQ(1U, delegate_.full_wallets_received());
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetFullWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, GetFullWalletWithRiskCapabilitesSuccess) {
|
| - base::HistogramTester histogram;
|
| -
|
| - std::vector<WalletClient::RiskCapability> risk_capabilities;
|
| - risk_capabilities.push_back(WalletClient::VERIFY_CVC);
|
| - WalletClient::FullWalletRequest full_wallet_request(
|
| - "instrument_id",
|
| - "shipping_address_id",
|
| - "google_transaction_id",
|
| - risk_capabilities,
|
| - false);
|
| - wallet_client_->GetFullWallet(full_wallet_request);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(
|
| - net::HTTP_OK,
|
| - kGetFullWalletWithRiskCapabilitesValidRequest,
|
| - kGetFullWalletValidResponse,
|
| - 3U);
|
| - EXPECT_EQ(1U, delegate_.full_wallets_received());
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetFullWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, GetFullWalletMalformedResponse) {
|
| - EXPECT_CALL(delegate_,
|
| - OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - WalletClient::FullWalletRequest full_wallet_request(
|
| - "instrument_id",
|
| - "shipping_address_id",
|
| - "google_transaction_id",
|
| - std::vector<WalletClient::RiskCapability>(),
|
| - false);
|
| - wallet_client_->GetFullWallet(full_wallet_request);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kGetFullWalletValidRequest,
|
| - kGetFullWalletInvalidResponse,
|
| - 3U);
|
| - EXPECT_EQ(0U, delegate_.full_wallets_received());
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetFullWallet", 1);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_MALFORMED_RESPONSE, 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::GET_FULL_WALLET, 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, AcceptLegalDocuments) {
|
| - EXPECT_CALL(delegate_, OnDidAcceptLegalDocuments()).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - ScopedVector<WalletItems::LegalDocument> docs;
|
| - base::DictionaryValue document;
|
| - document.SetString("legal_document_id", "doc_id_1");
|
| - document.SetString("url", "https://example.com");
|
| - document.SetString("display_name", "doc_1");
|
| - docs.push_back(
|
| - WalletItems::LegalDocument::CreateLegalDocument(document).release());
|
| - document.SetString("legal_document_id", "doc_id_2");
|
| - document.SetString("display_name", "doc_2");
|
| - docs.push_back(
|
| - WalletItems::LegalDocument::CreateLegalDocument(document).release());
|
| - ASSERT_TRUE(docs.back());
|
| - docs.push_back(
|
| - WalletItems::LegalDocument::CreatePrivacyPolicyDocument().release());
|
| - ASSERT_TRUE(docs.back());
|
| - wallet_client_->AcceptLegalDocuments(docs.get(),
|
| - kGoogleTransactionId);
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kAcceptLegalDocumentsValidRequest,
|
| - ")}'"); // Invalid JSON. Should be ignored.
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.AcceptLegalDocuments", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, AuthenticateInstrumentSucceeded) {
|
| - EXPECT_CALL(delegate_, OnDidAuthenticateInstrument(true)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - wallet_client_->AuthenticateInstrument("instrument_id", "123");
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kAuthenticateInstrumentValidRequest,
|
| - kAuthenticateInstrumentSuccessResponse,
|
| - 3U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.AuthenticateInstrument",
|
| - 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, AuthenticateInstrumentFailed) {
|
| - EXPECT_CALL(delegate_, OnDidAuthenticateInstrument(false)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - wallet_client_->AuthenticateInstrument("instrument_id", "123");
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kAuthenticateInstrumentValidRequest,
|
| - kAuthenticateInstrumentFailureResponse,
|
| - 3U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.AuthenticateInstrument",
|
| - 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, AuthenticateInstrumentFailedMalformedResponse) {
|
| - EXPECT_CALL(delegate_,
|
| - OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - wallet_client_->AuthenticateInstrument("instrument_id", "123");
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kAuthenticateInstrumentValidRequest,
|
| - kSaveInvalidResponse,
|
| - 3U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_MALFORMED_RESPONSE, 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::AUTHENTICATE_INSTRUMENT, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.AuthenticateInstrument",
|
| - 1);
|
| -}
|
| -
|
| -// TODO(ahutter): Add failure tests for GetWalletItems.
|
| -
|
| -TEST_F(WalletClientTest, GetWalletItems) {
|
| - base::HistogramTester histogram;
|
| -
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kGetWalletItemsValidRequest,
|
| - kGetWalletItemsValidResponse);
|
| - EXPECT_EQ(1U, delegate_.wallet_items_received());
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, GetWalletItemsWithTransactionDetails) {
|
| - base::HistogramTester histogram;
|
| -
|
| - wallet_client_->GetWalletItems(base::ASCIIToUTF16("100.00"),
|
| - base::ASCIIToUTF16("USD"));
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kGetWalletItemsWithTransactionDetails,
|
| - kGetWalletItemsValidResponse);
|
| - EXPECT_EQ(1U, delegate_.wallet_items_received());
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, GetWalletItemsRespectsDelegateForShippingRequired) {
|
| - base::HistogramTester histogram;
|
| - delegate_.SetIsShippingAddressRequired(false);
|
| -
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kGetWalletItemsNoShippingRequest,
|
| - kGetWalletItemsValidResponse);
|
| - EXPECT_EQ(1U, delegate_.wallet_items_received());
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, SaveAddressSucceeded) {
|
| - EXPECT_CALL(delegate_,
|
| - OnDidSaveToWallet(std::string(),
|
| - "saved_address_id",
|
| - std::vector<RequiredAction>(),
|
| - std::vector<FormFieldError>())).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<Address> address = GetTestSaveableAddress();
|
| - wallet_client_->SaveToWallet(scoped_ptr<Instrument>(),
|
| - address.Pass(),
|
| - NULL,
|
| - NULL);
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kSaveAddressValidRequest,
|
| - kSaveAddressValidResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, SaveAddressWithRequiredActionsSucceeded) {
|
| - base::HistogramTester histogram;
|
| -
|
| - std::vector<RequiredAction> required_actions;
|
| - required_actions.push_back(REQUIRE_PHONE_NUMBER);
|
| - required_actions.push_back(INVALID_FORM_FIELD);
|
| -
|
| - std::vector<FormFieldError> form_errors;
|
| - form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE,
|
| - FormFieldError::SHIPPING_ADDRESS));
|
| -
|
| - EXPECT_CALL(delegate_,
|
| - OnDidSaveToWallet(std::string(),
|
| - std::string(),
|
| - required_actions,
|
| - form_errors)).Times(1);
|
| -
|
| - scoped_ptr<Address> address = GetTestSaveableAddress();
|
| - wallet_client_->SaveToWallet(scoped_ptr<Instrument>(),
|
| - address.Pass(),
|
| - NULL,
|
| - NULL);
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kSaveAddressValidRequest,
|
| - kSaveAddressWithRequiredActionsValidResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - ExpectCommonWalletRequiredActionMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, SaveAddressFailedInvalidRequiredAction) {
|
| - EXPECT_CALL(delegate_,
|
| - OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<Address> address = GetTestSaveableAddress();
|
| - wallet_client_->SaveToWallet(scoped_ptr<Instrument>(),
|
| - address.Pass(),
|
| - NULL,
|
| - NULL);
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kSaveAddressValidRequest,
|
| - kSaveWithInvalidRequiredActionsResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_MALFORMED_RESPONSE, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, SaveAddressFailedMalformedResponse) {
|
| - EXPECT_CALL(delegate_,
|
| - OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<Address> address = GetTestSaveableAddress();
|
| - wallet_client_->SaveToWallet(scoped_ptr<Instrument>(),
|
| - address.Pass(),
|
| - NULL,
|
| - NULL);
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kSaveAddressValidRequest,
|
| - kSaveInvalidResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_MALFORMED_RESPONSE, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, SaveInstrumentSucceeded) {
|
| - EXPECT_CALL(delegate_,
|
| - OnDidSaveToWallet("instrument_id",
|
| - std::string(),
|
| - std::vector<RequiredAction>(),
|
| - std::vector<FormFieldError>())).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<Instrument> instrument = GetTestInstrument();
|
| - wallet_client_->SaveToWallet(instrument.Pass(),
|
| - scoped_ptr<Address>(),
|
| - NULL,
|
| - NULL);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kSaveInstrumentValidRequest,
|
| - kSaveInstrumentValidResponse,
|
| - 4U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, SaveInstrumentWithRequiredActionsSucceeded) {
|
| - base::HistogramTester histogram;
|
| -
|
| - std::vector<RequiredAction> required_actions;
|
| - required_actions.push_back(REQUIRE_PHONE_NUMBER);
|
| - required_actions.push_back(INVALID_FORM_FIELD);
|
| -
|
| - std::vector<FormFieldError> form_errors;
|
| - form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE,
|
| - FormFieldError::SHIPPING_ADDRESS));
|
| -
|
| - EXPECT_CALL(delegate_,
|
| - OnDidSaveToWallet(std::string(),
|
| - std::string(),
|
| - required_actions,
|
| - form_errors)).Times(1);
|
| -
|
| - scoped_ptr<Instrument> instrument = GetTestInstrument();
|
| - wallet_client_->SaveToWallet(instrument.Pass(),
|
| - scoped_ptr<Address>(),
|
| - NULL,
|
| - NULL);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(
|
| - net::HTTP_OK,
|
| - kSaveInstrumentValidRequest,
|
| - kSaveInstrumentWithRequiredActionsValidResponse,
|
| - 4U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| - ExpectCommonWalletRequiredActionMetrics(histogram);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, SaveInstrumentFailedInvalidRequiredActions) {
|
| - base::HistogramTester histogram;
|
| -
|
| - EXPECT_CALL(delegate_,
|
| - OnWalletError(WalletClient::MALFORMED_RESPONSE));
|
| -
|
| - scoped_ptr<Instrument> instrument = GetTestInstrument();
|
| - wallet_client_->SaveToWallet(instrument.Pass(),
|
| - scoped_ptr<Address>(),
|
| - NULL,
|
| - NULL);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kSaveInstrumentValidRequest,
|
| - kSaveWithInvalidRequiredActionsResponse,
|
| - 4U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_MALFORMED_RESPONSE, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, SaveInstrumentFailedMalformedResponse) {
|
| - EXPECT_CALL(delegate_,
|
| - OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<Instrument> instrument = GetTestInstrument();
|
| - wallet_client_->SaveToWallet(instrument.Pass(),
|
| - scoped_ptr<Address>(),
|
| - NULL,
|
| - NULL);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kSaveInstrumentValidRequest,
|
| - kSaveInvalidResponse,
|
| - 4U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_MALFORMED_RESPONSE, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, SaveInstrumentAndAddressSucceeded) {
|
| - EXPECT_CALL(delegate_,
|
| - OnDidSaveToWallet("saved_instrument_id",
|
| - "saved_address_id",
|
| - std::vector<RequiredAction>(),
|
| - std::vector<FormFieldError>())).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<Instrument> instrument = GetTestInstrument();
|
| - scoped_ptr<Address> address = GetTestSaveableAddress();
|
| - wallet_client_->SaveToWallet(instrument.Pass(), address.Pass(), NULL, NULL);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kSaveInstrumentAndAddressValidRequest,
|
| - kSaveInstrumentAndAddressValidResponse,
|
| - 4U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, SaveInstrumentAndAddressWithRequiredActionsSucceeded) {
|
| - base::HistogramTester histogram;
|
| -
|
| - std::vector<RequiredAction> required_actions;
|
| - required_actions.push_back(REQUIRE_PHONE_NUMBER);
|
| - required_actions.push_back(INVALID_FORM_FIELD);
|
| -
|
| - std::vector<FormFieldError> form_errors;
|
| - form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE,
|
| - FormFieldError::SHIPPING_ADDRESS));
|
| -
|
| - EXPECT_CALL(delegate_,
|
| - OnDidSaveToWallet(std::string(),
|
| - std::string(),
|
| - required_actions,
|
| - form_errors)).Times(1);
|
| -
|
| - scoped_ptr<Instrument> instrument = GetTestInstrument();
|
| - scoped_ptr<Address> address = GetTestSaveableAddress();
|
| - wallet_client_->SaveToWallet(instrument.Pass(), address.Pass(), NULL, NULL);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(
|
| - net::HTTP_OK,
|
| - kSaveInstrumentAndAddressValidRequest,
|
| - kSaveInstrumentAndAddressWithRequiredActionsValidResponse,
|
| - 4U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| - ExpectCommonWalletRequiredActionMetrics(histogram);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, SaveInstrumentAndAddressFailedInvalidRequiredAction) {
|
| - EXPECT_CALL(delegate_,
|
| - OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<Instrument> instrument = GetTestInstrument();
|
| - scoped_ptr<Address> address = GetTestSaveableAddress();
|
| - wallet_client_->SaveToWallet(instrument.Pass(), address.Pass(), NULL, NULL);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kSaveInstrumentAndAddressValidRequest,
|
| - kSaveWithInvalidRequiredActionsResponse,
|
| - 4U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_MALFORMED_RESPONSE, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, UpdateAddressSucceeded) {
|
| - EXPECT_CALL(delegate_,
|
| - OnDidSaveToWallet(std::string(),
|
| - "shipping_address_id",
|
| - std::vector<RequiredAction>(),
|
| - std::vector<FormFieldError>())).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<Address> reference_address = GetTestNonDefaultShippingAddress();
|
| - wallet_client_->SaveToWallet(scoped_ptr<Instrument>(),
|
| - GetTestShippingAddress(),
|
| - NULL,
|
| - reference_address.get());
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kUpdateAddressValidRequest,
|
| - kUpdateAddressValidResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, UpdateAddressWithRequiredActionsSucceeded) {
|
| - base::HistogramTester histogram;
|
| -
|
| - std::vector<RequiredAction> required_actions;
|
| - required_actions.push_back(REQUIRE_PHONE_NUMBER);
|
| - required_actions.push_back(INVALID_FORM_FIELD);
|
| -
|
| - std::vector<FormFieldError> form_errors;
|
| - form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE,
|
| - FormFieldError::SHIPPING_ADDRESS));
|
| -
|
| - EXPECT_CALL(delegate_, OnDidSaveToWallet(std::string(),
|
| - std::string(),
|
| - required_actions,
|
| - form_errors)).Times(1);
|
| -
|
| - scoped_ptr<Address> reference_address = GetTestNonDefaultShippingAddress();
|
| - wallet_client_->SaveToWallet(scoped_ptr<Instrument>(),
|
| - GetTestShippingAddress(),
|
| - NULL,
|
| - reference_address.get());
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kUpdateAddressValidRequest,
|
| - kUpdateWithRequiredActionsValidResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - ExpectCommonWalletRequiredActionMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, UpdateAddressFailedInvalidRequiredAction) {
|
| - EXPECT_CALL(delegate_,
|
| - OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<Address> reference_address = GetTestNonDefaultShippingAddress();
|
| - wallet_client_->SaveToWallet(scoped_ptr<Instrument>(),
|
| - GetTestShippingAddress(),
|
| - NULL,
|
| - reference_address.get());
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kUpdateAddressValidRequest,
|
| - kSaveWithInvalidRequiredActionsResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_MALFORMED_RESPONSE, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, UpdateAddressMalformedResponse) {
|
| - EXPECT_CALL(delegate_,
|
| - OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<Address> reference_address = GetTestNonDefaultShippingAddress();
|
| - wallet_client_->SaveToWallet(scoped_ptr<Instrument>(),
|
| - GetTestShippingAddress(),
|
| - NULL,
|
| - reference_address.get());
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kUpdateAddressValidRequest,
|
| - kUpdateMalformedResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_MALFORMED_RESPONSE, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, UpdateInstrumentAddressSucceeded) {
|
| - EXPECT_CALL(delegate_,
|
| - OnDidSaveToWallet("instrument_id",
|
| - std::string(),
|
| - std::vector<RequiredAction>(),
|
| - std::vector<FormFieldError>())).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<WalletItems::MaskedInstrument> reference_instrument =
|
| - GetTestMaskedInstrument();
|
| - wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(),
|
| - scoped_ptr<Address>(),
|
| - reference_instrument.get(),
|
| - NULL);
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kUpdateInstrumentAddressValidRequest,
|
| - kUpdateInstrumentValidResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, UpdateInstrumentExpirationDateSuceeded) {
|
| - EXPECT_CALL(delegate_,
|
| - OnDidSaveToWallet("instrument_id",
|
| - std::string(),
|
| - std::vector<RequiredAction>(),
|
| - std::vector<FormFieldError>())).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<Instrument> instrument = GetTestExpirationDateChangeInstrument();
|
| - scoped_ptr<WalletItems::MaskedInstrument> reference_instrument =
|
| - GetTestMaskedInstrumentWithId("instrument_id");
|
| -
|
| - int new_month = instrument->expiration_month();
|
| - int new_year = instrument->expiration_year();
|
| - ASSERT_TRUE(new_month != reference_instrument->expiration_month() ||
|
| - new_year != reference_instrument->expiration_year());
|
| -
|
| - wallet_client_->SaveToWallet(instrument.Pass(),
|
| - scoped_ptr<Address>(),
|
| - reference_instrument.get(),
|
| - NULL);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(net::HTTP_OK,
|
| - kUpdateInstrumentExpirationDateValidRequest,
|
| - kUpdateInstrumentValidResponse,
|
| - 3U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, UpdateInstrumentAddressWithNameChangeSucceeded) {
|
| - EXPECT_CALL(delegate_,
|
| - OnDidSaveToWallet("instrument_id",
|
| - std::string(),
|
| - std::vector<RequiredAction>(),
|
| - std::vector<FormFieldError>())).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<WalletItems::MaskedInstrument> reference_instrument =
|
| - GetTestMaskedInstrument();
|
| - wallet_client_->SaveToWallet(GetTestAddressNameChangeInstrument(),
|
| - scoped_ptr<Address>(),
|
| - reference_instrument.get(),
|
| - NULL);
|
| -
|
| - VerifyAndFinishFormEncodedRequest(
|
| - net::HTTP_OK,
|
| - kUpdateInstrumentAddressWithNameChangeValidRequest,
|
| - kUpdateInstrumentValidResponse,
|
| - 3U);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, UpdateInstrumentWithRequiredActionsSucceeded) {
|
| - base::HistogramTester histogram;
|
| -
|
| - std::vector<RequiredAction> required_actions;
|
| - required_actions.push_back(REQUIRE_PHONE_NUMBER);
|
| - required_actions.push_back(INVALID_FORM_FIELD);
|
| -
|
| - std::vector<FormFieldError> form_errors;
|
| - form_errors.push_back(FormFieldError(FormFieldError::INVALID_POSTAL_CODE,
|
| - FormFieldError::SHIPPING_ADDRESS));
|
| -
|
| - EXPECT_CALL(delegate_,
|
| - OnDidSaveToWallet(std::string(),
|
| - std::string(),
|
| - required_actions,
|
| - form_errors)).Times(1);
|
| -
|
| - scoped_ptr<WalletItems::MaskedInstrument> reference_instrument =
|
| - GetTestMaskedInstrument();
|
| - wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(),
|
| - scoped_ptr<Address>(),
|
| - reference_instrument.get(),
|
| - NULL);
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kUpdateInstrumentAddressValidRequest,
|
| - kUpdateWithRequiredActionsValidResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - ExpectCommonWalletRequiredActionMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, UpdateInstrumentFailedInvalidRequiredAction) {
|
| - EXPECT_CALL(delegate_,
|
| - OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<WalletItems::MaskedInstrument> reference_instrument =
|
| - GetTestMaskedInstrument();
|
| - wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(),
|
| - scoped_ptr<Address>(),
|
| - reference_instrument.get(),
|
| - NULL);
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kUpdateInstrumentAddressValidRequest,
|
| - kSaveWithInvalidRequiredActionsResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_MALFORMED_RESPONSE, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, UpdateInstrumentMalformedResponse) {
|
| - EXPECT_CALL(delegate_,
|
| - OnWalletError(WalletClient::MALFORMED_RESPONSE)).Times(1);
|
| - base::HistogramTester histogram;
|
| -
|
| - scoped_ptr<WalletItems::MaskedInstrument> reference_instrument =
|
| - GetTestMaskedInstrument();
|
| - wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(),
|
| - scoped_ptr<Address>(),
|
| - reference_instrument.get(),
|
| - NULL);
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kUpdateInstrumentAddressValidRequest,
|
| - kUpdateMalformedResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_MALFORMED_RESPONSE, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.SaveToWallet", 1);
|
| - histogram.ExpectUniqueSample("Wallet.MalformedResponse",
|
| - AutofillMetrics::SAVE_TO_WALLET, 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, HasRequestInProgress) {
|
| - EXPECT_FALSE(wallet_client_->HasRequestInProgress());
|
| - base::HistogramTester histogram;
|
| -
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| - EXPECT_TRUE(wallet_client_->HasRequestInProgress());
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_OK,
|
| - kGetWalletItemsValidRequest,
|
| - kGetWalletItemsValidResponse);
|
| - EXPECT_FALSE(wallet_client_->HasRequestInProgress());
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| -}
|
| -
|
| -// 500 (INTERNAL_SERVER_ERROR) - response json is parsed.
|
| -TEST_F(WalletClientTest, ErrorResponse500) {
|
| - base::HistogramTester histogram;
|
| - EXPECT_FALSE(wallet_client_->HasRequestInProgress());
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| - EXPECT_TRUE(wallet_client_->HasRequestInProgress());
|
| -
|
| - EXPECT_CALL(delegate_, OnWalletError(
|
| - WalletClient::SERVICE_UNAVAILABLE)).Times(1);
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR,
|
| - kGetWalletItemsValidRequest,
|
| - kErrorResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_SERVICE_UNAVAILABLE, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| -}
|
| -
|
| -// 403 (FORBIDDEN) - response json is parsed.
|
| -TEST_F(WalletClientTest, ErrorResponse403) {
|
| - base::HistogramTester histogram;
|
| - EXPECT_FALSE(wallet_client_->HasRequestInProgress());
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| - EXPECT_TRUE(wallet_client_->HasRequestInProgress());
|
| -
|
| - EXPECT_CALL(delegate_, OnWalletError(WalletClient::SPENDING_LIMIT_EXCEEDED))
|
| - .Times(1);
|
| -
|
| - VerifyAndFinishRequest(net::HTTP_FORBIDDEN,
|
| - kGetWalletItemsValidRequest,
|
| - kErrorResponseSpendingLimitExceeded);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_SPENDING_LIMIT_EXCEEDED,
|
| - 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| -}
|
| -
|
| -// 400 (BAD_REQUEST) - response json is ignored.
|
| -TEST_F(WalletClientTest, ErrorResponse400) {
|
| - base::HistogramTester histogram;
|
| - EXPECT_FALSE(wallet_client_->HasRequestInProgress());
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| - EXPECT_TRUE(wallet_client_->HasRequestInProgress());
|
| -
|
| - EXPECT_CALL(delegate_, OnWalletError(WalletClient::BAD_REQUEST)).Times(1);
|
| -
|
| - VerifyAndFinishRequest(
|
| - net::HTTP_BAD_REQUEST, kGetWalletItemsValidRequest, kErrorResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_BAD_REQUEST, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| -}
|
| -
|
| -// Anything else - response json is ignored.
|
| -TEST_F(WalletClientTest, ErrorResponseOther) {
|
| - base::HistogramTester histogram;
|
| - EXPECT_FALSE(wallet_client_->HasRequestInProgress());
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| - EXPECT_TRUE(wallet_client_->HasRequestInProgress());
|
| -
|
| - EXPECT_CALL(delegate_, OnWalletError(WalletClient::NETWORK_ERROR)).Times(1);
|
| -
|
| - VerifyAndFinishRequest(
|
| - net::HTTP_NOT_FOUND, kGetWalletItemsValidRequest, kErrorResponse);
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectBucketCount("RequestAutocomplete.WalletErrors",
|
| - AutofillMetrics::WALLET_NETWORK_ERROR, 1);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 1);
|
| -}
|
| -
|
| -TEST_F(WalletClientTest, CancelRequest) {
|
| - EXPECT_FALSE(wallet_client_->HasRequestInProgress());
|
| - base::HistogramTester histogram;
|
| -
|
| - wallet_client_->GetWalletItems(base::string16(), base::string16());
|
| - EXPECT_TRUE(wallet_client_->HasRequestInProgress());
|
| - wallet_client_->CancelRequest();
|
| - EXPECT_FALSE(wallet_client_->HasRequestInProgress());
|
| -
|
| - ExpectBaselineMetrics(histogram);
|
| - histogram.ExpectTotalCount("Wallet.ApiCallDuration.GetWalletItems", 0);
|
| -}
|
| -
|
| -} // namespace wallet
|
| -} // namespace autofill
|
|
|