Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1092)

Unified Diff: chrome/browser/autofill/wallet/wallet_data_retriever_unittest.cc

Issue 11293078: Integrating Online Wallet into Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase and most fixes from Albert's initial review. Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/autofill/wallet/wallet_data_retriever_unittest.cc
diff --git a/chrome/browser/autofill/wallet/wallet_data_retriever_unittest.cc b/chrome/browser/autofill/wallet/wallet_data_retriever_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..31432082ac6bd920aaaba92389677c4348c7de22
--- /dev/null
+++ b/chrome/browser/autofill/wallet/wallet_data_retriever_unittest.cc
@@ -0,0 +1,350 @@
+// Copyright (c) 2012 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/logging.h"
+#include "base/message_loop.h"
+#include "base/string_number_conversions.h"
+#include "base/string_util.h"
+#include "chrome/browser/autofill/wallet/cart.h"
+#include "chrome/browser/autofill/wallet/full_wallet.h"
+#include "chrome/browser/autofill/wallet/wallet_data_retriever.h"
+#include "chrome/browser/autofill/wallet/wallet_items.h"
+#include "chrome/test/base/testing_profile.h"
+#include "googleurl/src/gurl.h"
+#include "net/base/net_errors.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 "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+static const char kGoogleTransactionId[] = "google-transaction-id";
+
+static const char kGetFullWalletValidResponse[] =
+ "{"
+ " \"expiration_month\":12,"
+ " \"expiration_year\":2012,"
+ " \"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\":\"country_name_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\":\"ship_country_name_code\""
+ " }"
+ " },"
+ " \"required_action\":"
+ " ["
+ " ]"
+ "}";
+
+static const char kGetWalletItemsValidResponse[] =
+ "{"
+ " \"required_action\":"
+ " ["
+ " ],"
+ " \"google_transaction_id\":\"google_transaction_id\","
+ " \"instrument\":"
+ " ["
+ " {"
+ " \"descriptive_name\":\"descriptive_name\","
+ " \"type\":\"VISA\","
+ " \"supported_currency\":\"currency_code\","
+ " \"last_four_digits\":\"last_four_digits\","
+ " \"expiration_month\":12,"
+ " \"expiration_year\":2012,"
+ " \"brand\":\"monkeys\","
+ " \"billing_address\":"
+ " {"
+ " \"name\":\"name\","
+ " \"address1\":\"address1\","
+ " \"address2\":\"address2\","
+ " \"city\":\"city\","
+ " \"state\":\"state\","
+ " \"postal_code\":\"postal_code\","
+ " \"phone_number\":\"phone_number\","
+ " \"country_code\":\"country_code\""
+ " },"
+ " \"status\":\"VALID\","
+ " \"object_id\":\"default_instrument_id\""
+ " }"
+ " ],"
+ " \"default_instrument_id\":\"default_instrument_id\","
+ " \"address\":"
+ " ["
+ " ],"
+ " \"default_address_id\":\"default_address_id\","
+ " \"required_legal_document\":"
+ " ["
+ " ]"
+ "}";
+
+static const char kAcceptLegalDocumentsValidRequest[] =
+ "{"
+ "\"accepted_legal_document\":"
+ "["
+ "\"doc_1\","
+ "\"doc_2\""
+ "],"
+ "\"api_key\":\"abcdefg\","
+ "\"google_transaction_id\":\"google-transaction-id\""
+ "}";
+
+static const char kGetFullWalletValidRequest[] =
+ "{"
+ "\"api_key\":\"abcdefg\","
+ "\"cart\":"
+ "{"
+ "\"currency_code\":\"currency_code\","
+ "\"total_price\":\"currency_code\""
+ "},"
+ "\"encrypted_otp\":\"encrypted_otp\","
+ "\"google_transaction_id\":\"google_transaction_id\","
+ "\"merchant_domain\":\"merchant_domain\","
+ "\"risk_params\":\"\","
+ "\"selected_address_id\":\"shipping_address_id\","
+ "\"selected_instrument_id\":\"instrument_id\","
+ "\"session_material\":\"session_material\""
+ "}";
+
+static const char kGetWalletItemsValidRequest[] =
+ "{"
+ "\"api_key\":\"abcdefg\","
+ "\"risk_params\":\"\""
+ "}";
+
+static const char kSendExtendedAutofillStatusOfSuccessValidRequest[] =
+ "{"
+ "\"api_key\":\"abcdefg\","
+ "\"google_transaction_id\":\"google_transaction_id\","
+ "\"hostname\":\"hostname\","
+ "\"success\":true"
+ "}";
+
+static const char kSendExtendedAutofillStatusOfFailureValidRequest[] =
+ "{"
+ "\"api_key\":\"abcdefg\","
+ "\"google_transaction_id\":\"google_transaction_id\","
+ "\"hostname\":\"hostname\","
+ "\"reason\":\"CANNOT_PROCEED\","
+ "\"success\":false"
+ "}";
+
+} // end anonymous namespace
+
+
+namespace wallet {
+
+class WalletDataRetrieverTest : public testing::Test {
+ public:
+ WalletDataRetrieverTest() {}
+
+ protected:
+ MessageLoop message_loop_;
Dan Beam 2012/12/01 01:19:49 nit: unused? intentionally overriding a different
ahutter 2012/12/01 04:06:51 Supposedly required for TestURLFetcherFactory to w
+ TestingProfile profile_;
+};
+
+class MockWalletDataRetrieverDelegate
+ : public wallet::WalletDataRetriever::Delegate {
Dan Beam 2012/12/01 01:19:49 nit: not totally sure, but I think this should be
ahutter 2012/12/01 04:06:51 Done.
+ public:
+ MockWalletDataRetrieverDelegate() {}
+ ~MockWalletDataRetrieverDelegate() {}
+
+ MOCK_METHOD0(OnAcceptLegalDocuments, void());
+ MOCK_METHOD2(OnEncryptOtp, void(const std::string& encrypted_otp,
+ const std::string& session_material));
+ MOCK_METHOD1(OnGetFullWallet, void(FullWallet* full_wallet));
+ MOCK_METHOD1(OnGetWalletItems, void(WalletItems* wallet_items));
+ MOCK_METHOD0(OnSendExtendedAutofillStatus, void());
+ MOCK_METHOD0(OnWalletError, void());
+ MOCK_METHOD1(OnNetworkError, void(int response_code));
+};
+
+
+TEST_F(WalletDataRetrieverTest, NetworkFailureOnExpectedVoidResponse) {
+ int response_code = net::HTTP_INTERNAL_SERVER_ERROR;
+ MockWalletDataRetrieverDelegate delegate;
+ EXPECT_CALL(delegate, OnNetworkError(response_code)).Times(1);
+
+ net::TestURLFetcherFactory factory;
+
+ WalletDataRetriever wallet_data_retriever(profile_.GetRequestContext());
+ wallet_data_retriever.SendExtendedAutofillStatus(true, "", "", "", &delegate);
+ net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
+ DCHECK(fetcher);
+ fetcher->set_response_code(response_code);
Dan Beam 2012/12/01 01:19:49 nit: why not just inline |response_code| throughou
ahutter 2012/12/01 04:06:51 Done.
+ fetcher->delegate()->OnURLFetchComplete(fetcher);
+}
+
+TEST_F(WalletDataRetrieverTest, NetworkFailureOnExpectedResponse) {
+ int response_code = net::HTTP_INTERNAL_SERVER_ERROR;
+ MockWalletDataRetrieverDelegate delegate;
+ EXPECT_CALL(delegate, OnNetworkError(response_code)).Times(1);
+
+ net::TestURLFetcherFactory factory;
+
+ WalletDataRetriever wallet_data_retriever(profile_.GetRequestContext());
+ Cart cart("currency_code", "currency_code");
+ wallet_data_retriever.GetFullWallet("", "", "", cart, "", "", "", &delegate);
+ net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
+ DCHECK(fetcher);
+ fetcher->set_response_code(response_code);
+ fetcher->delegate()->OnURLFetchComplete(fetcher);
+}
+
+TEST_F(WalletDataRetrieverTest, RequestError) {
+ int response_code = net::HTTP_BAD_REQUEST;
+ MockWalletDataRetrieverDelegate delegate;
+ EXPECT_CALL(delegate, OnWalletError()).Times(1);
+
+ net::TestURLFetcherFactory factory;
+
+ WalletDataRetriever wallet_data_retriever(profile_.GetRequestContext());
+ wallet_data_retriever.SendExtendedAutofillStatus(true, "", "", "", &delegate);
+ net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
+ DCHECK(fetcher);
+ fetcher->set_response_code(response_code);
+ fetcher->delegate()->OnURLFetchComplete(fetcher);
+}
+
+TEST_F(WalletDataRetrieverTest, GetFullWallet) {
+ int response_code = net::HTTP_OK;
+ MockWalletDataRetrieverDelegate delegate;
+ // TODO(ahutter): make this more specific
Dan Beam 2012/12/01 01:19:49 nit: .
ahutter 2012/12/01 04:06:51 Done.
+ EXPECT_CALL(delegate, OnGetFullWallet(testing::_)).Times(1);
+
+ net::TestURLFetcherFactory factory;
+
+ WalletDataRetriever wallet_data_retriever(profile_.GetRequestContext());
+ Cart cart("currency_code", "currency_code");
+ wallet_data_retriever.GetFullWallet("instrument_id",
+ "shipping_address_id",
+ "merchant_domain",
+ cart,
+ "google_transaction_id",
+ "encrypted_otp",
+ "session_material",
+ &delegate);
+ net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
+ DCHECK(fetcher);
+ ASSERT_EQ(kGetFullWalletValidRequest, fetcher->upload_data());
+ fetcher->set_response_code(response_code);
+ fetcher->SetResponseString(kGetFullWalletValidResponse);
+ fetcher->delegate()->OnURLFetchComplete(fetcher);
+}
+
+TEST_F(WalletDataRetrieverTest, AcceptLegalDocuments) {
+ int response_code = net::HTTP_OK;
+ MockWalletDataRetrieverDelegate delegate;
+ EXPECT_CALL(delegate, OnAcceptLegalDocuments()).Times(1);
+
+ net::TestURLFetcherFactory factory;
+
+ WalletDataRetriever wallet_data_retriever(profile_.GetRequestContext());
+ std::vector<std::string> doc_ids;
+ doc_ids.push_back("doc_1");
+ doc_ids.push_back("doc_2");
+ wallet_data_retriever.AcceptLegalDocuments(doc_ids,
+ kGoogleTransactionId,
+ &delegate);
+ net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
+ DCHECK(fetcher);
+ ASSERT_EQ(kAcceptLegalDocumentsValidRequest, fetcher->upload_data());
+ fetcher->set_response_code(response_code);
+ fetcher->delegate()->OnURLFetchComplete(fetcher);
+}
+
+TEST_F(WalletDataRetrieverTest, GetWalletItems) {
+ int response_code = net::HTTP_OK;
+ MockWalletDataRetrieverDelegate delegate;
+ // TODO(ahutter): make this more specific
Dan Beam 2012/12/01 01:19:49 nit: .
ahutter 2012/12/01 04:06:51 Done.
+ EXPECT_CALL(delegate, OnGetWalletItems(testing::_)).Times(1);
+
+ net::TestURLFetcherFactory factory;
+
+ WalletDataRetriever wallet_data_retriever(profile_.GetRequestContext());
+ wallet_data_retriever.GetWalletItems(&delegate);
+ net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
+ DCHECK(fetcher);
+ ASSERT_EQ(kGetWalletItemsValidRequest, fetcher->upload_data());
+ fetcher->set_response_code(response_code);
+ fetcher->SetResponseString(kGetWalletItemsValidResponse);
+ fetcher->delegate()->OnURLFetchComplete(fetcher);
+}
+
+TEST_F(WalletDataRetrieverTest, SendExtendedAutofillOfStatusSuccess) {
+ int response_code = net::HTTP_OK;
+ MockWalletDataRetrieverDelegate delegate;
+ EXPECT_CALL(delegate, OnSendExtendedAutofillStatus()).Times(1);
+
+ net::TestURLFetcherFactory factory;
+
+ WalletDataRetriever wallet_data_retriever(profile_.GetRequestContext());
+ wallet_data_retriever.SendExtendedAutofillStatus(true,
+ "hostname",
+ "",
+ "google_transaction_id",
+ &delegate);
+ net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
+ DCHECK(fetcher);
+ ASSERT_EQ(kSendExtendedAutofillStatusOfSuccessValidRequest,
+ fetcher->upload_data());
+ fetcher->set_response_code(response_code);
+ fetcher->delegate()->OnURLFetchComplete(fetcher);
+}
+
+TEST_F(WalletDataRetrieverTest, SendExtendedAutofillStatusOfFailure) {
+ int response_code = net::HTTP_OK;
+ MockWalletDataRetrieverDelegate delegate;
+ EXPECT_CALL(delegate, OnSendExtendedAutofillStatus()).Times(1);
+
+ net::TestURLFetcherFactory factory;
+
+ WalletDataRetriever wallet_data_retriever(profile_.GetRequestContext());
+ wallet_data_retriever.SendExtendedAutofillStatus(false,
+ "hostname",
+ "CANNOT_PROCEED",
+ "google_transaction_id",
+ &delegate);
+ net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
+ DCHECK(fetcher);
+ ASSERT_EQ(kSendExtendedAutofillStatusOfFailureValidRequest,
+ fetcher->upload_data());
+ fetcher->set_response_code(response_code);
+ fetcher->delegate()->OnURLFetchComplete(fetcher);
+}
+
+} // end wallet namespace

Powered by Google App Engine
This is Rietveld 408576698