" \"locality_name\":\"locality_name\","
" \"administrative_area_name\":\"administrative_area_name\","
" \"postal_code_number\":\"postal_code_number\","
- " \"country_name_code\":\"US\""
+ " \"country_name_code\":\"US\","
+ " \"language_code\":\"language_code\""
" }"
" },"
" \"shipping_address\":"
" \"locality_name\":\"ship_locality_name\","
" \"administrative_area_name\":\"ship_administrative_area_name\","
" \"postal_code_number\":\"ship_postal_code_number\","
- " \"country_name_code\":\"US\""
+ " \"country_name_code\":\"US\","
+ " \"language_code\":\"ship_language_code\""
" }"
" },"
" \"required_action\":"
" \"state\":\"state\","
" \"postal_code\":\"postal_code\","
" \"phone_number\":\"phone_number\","
- " \"country_code\":\"US\""
+ " \"country_code\":\"US\","
+ " \"language_code\":\"language_code\""
" },"
" \"status\":\"VALID\","
" \"object_id\":\"default_instrument_id\""
" }"
"}";
+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\","
"\"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/\","
"\"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\","
"\"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\","
"\"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\","
"\"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\","
"\"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\","
"\"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\","
"\"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\","
is_shipping_required_(true) {}
~MockWalletClientDelegate() {}
- virtual const AutofillMetrics& GetMetricLogger() const OVERRIDE {
+ virtual const AutofillMetrics& GetMetricLogger() const override {
return metric_logger_;
}
- virtual std::string GetRiskData() const OVERRIDE {
+ virtual std::string GetRiskData() const override {
return "risky business";
}
- virtual std::string GetWalletCookieValue() const OVERRIDE {
+ virtual std::string GetWalletCookieValue() const override {
return "gdToken";
}
- virtual bool IsShippingAddressRequired() const OVERRIDE {
+ virtual bool IsShippingAddressRequired() const override {
return is_shipping_required_;
}
const std::vector<FormFieldError>& form_field_errors));
MOCK_METHOD1(OnWalletError, void(WalletClient::ErrorType error_type));
- virtual void OnDidGetFullWallet(scoped_ptr<FullWallet> full_wallet) OVERRIDE {
+ virtual void OnDidGetFullWallet(scoped_ptr<FullWallet> full_wallet) override {
EXPECT_TRUE(full_wallet);
++full_wallets_received_;
}
virtual void OnDidGetWalletItems(scoped_ptr<WalletItems> wallet_items)
- OVERRIDE {
+ override {
EXPECT_TRUE(wallet_items);
++wallet_items_received_;
}
WalletClientTest()
: request_context_(new net::TestURLRequestContextGetter(
base::MessageLoopProxy::current())) {}
- virtual ~WalletClientTest() {}
+ ~WalletClientTest() override {}
- virtual void SetUp() OVERRIDE {
- wallet_client_.reset(
- new WalletClient(request_context_,
- &delegate_,
- GURL(kMerchantUrl)));
+ void SetUp() override {
+ wallet_client_.reset(new WalletClient(
+ request_context_.get(), &delegate_, GURL(kMerchantUrl)));
}
- virtual void TearDown() OVERRIDE {
- wallet_client_.reset();
- }
+ void TearDown() override { wallet_client_.reset(); }
void VerifyAndFinishRequest(net::HttpStatusCode response_code,
const std::string& request_body,
EXPECT_EQ("GoogleLogin auth=gdToken", auth_header_value);
const std::string& upload_data = fetcher->upload_data();
- std::vector<std::pair<std::string, std::string> > tokens;
+ base::StringPairs tokens;
base::SplitStringIntoKeyValuePairs(upload_data, '=', '&', &tokens);
EXPECT_EQ(tokens.size(), expected_parameter_number);
size_t num_params = 0U;
- for (size_t i = 0; i < tokens.size(); ++i) {
- const std::string& key = tokens[i].first;
- const std::string& value = tokens[i].second;
+ 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);
delegate_.ExpectBaselineMetrics();
delegate_.ExpectWalletErrorMetric(expected_autofill_metric);
- wallet_client_->GetWalletItems();
+ 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\",",
},
};
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
+ for (size_t i = 0; i < arraysize(test_cases); ++i) {
SCOPED_TRACE(
base::StringPrintf(
"%s - %s",
}
}
+
TEST_F(WalletClientTest, WalletErrorResponseMissing) {
EXPECT_CALL(delegate_, OnWalletError(
WalletClient::UNKNOWN_ERROR)).Times(1);
delegate_.ExpectBaselineMetrics();
delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_UNKNOWN_ERROR);
- wallet_client_->GetWalletItems();
+ wallet_client_->GetWalletItems(base::string16(), base::string16());
VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR,
kGetWalletItemsValidRequest,
kErrorTypeMissingInResponse);
delegate_.ExpectBaselineMetrics();
delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_NETWORK_ERROR);
- wallet_client_->GetWalletItems();
+ wallet_client_->GetWalletItems(base::string16(), base::string16());
VerifyAndFinishRequest(net::HTTP_UNAUTHORIZED,
kGetWalletItemsValidRequest,
std::string());
delegate_.ExpectBaselineMetrics();
delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_BAD_REQUEST);
- wallet_client_->GetWalletItems();
+ wallet_client_->GetWalletItems(base::string16(), base::string16());
VerifyAndFinishRequest(net::HTTP_BAD_REQUEST,
kGetWalletItemsValidRequest,
std::string());
1);
delegate_.ExpectBaselineMetrics();
- wallet_client_->GetWalletItems();
+ wallet_client_->GetWalletItems(base::string16(), base::string16());
VerifyAndFinishRequest(net::HTTP_OK,
kGetWalletItemsValidRequest,
EXPECT_EQ(1U, delegate_.wallet_items_received());
}
+TEST_F(WalletClientTest, GetWalletItemsWithTransactionDetails) {
+ delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS,
+ 1);
+ delegate_.ExpectBaselineMetrics();
+
+ wallet_client_->GetWalletItems(base::ASCIIToUTF16("100.00"),
+ base::ASCIIToUTF16("USD"));
+
+ VerifyAndFinishRequest(net::HTTP_OK,
+ kGetWalletItemsWithTransactionDetails,
+ kGetWalletItemsValidResponse);
+ EXPECT_EQ(1U, delegate_.wallet_items_received());
+}
+
TEST_F(WalletClientTest, GetWalletItemsRespectsDelegateForShippingRequired) {
delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS,
1);
delegate_.ExpectBaselineMetrics();
delegate_.SetIsShippingAddressRequired(false);
- wallet_client_->GetWalletItems();
+ wallet_client_->GetWalletItems(base::string16(), base::string16());
VerifyAndFinishRequest(net::HTTP_OK,
kGetWalletItemsNoShippingRequest,
1);
delegate_.ExpectBaselineMetrics();
- wallet_client_->GetWalletItems();
+ wallet_client_->GetWalletItems(base::string16(), base::string16());
EXPECT_TRUE(wallet_client_->HasRequestInProgress());
VerifyAndFinishRequest(net::HTTP_OK,
EXPECT_FALSE(wallet_client_->HasRequestInProgress());
}
-TEST_F(WalletClientTest, ErrorResponse) {
+// 500 (INTERNAL_SERVER_ERROR) - response json is parsed.
+TEST_F(WalletClientTest, ErrorResponse500) {
EXPECT_FALSE(wallet_client_->HasRequestInProgress());
delegate_.ExpectBaselineMetrics();
- wallet_client_->GetWalletItems();
+ wallet_client_->GetWalletItems(base::string16(), base::string16());
EXPECT_TRUE(wallet_client_->HasRequestInProgress());
testing::Mock::VerifyAndClear(delegate_.metric_logger());
kErrorResponse);
}
+// 403 (FORBIDDEN) - response json is parsed.
+TEST_F(WalletClientTest, ErrorResponse403) {
+ EXPECT_FALSE(wallet_client_->HasRequestInProgress());
+ delegate_.ExpectBaselineMetrics();
+ wallet_client_->GetWalletItems(base::string16(), base::string16());
+ EXPECT_TRUE(wallet_client_->HasRequestInProgress());
+ testing::Mock::VerifyAndClear(delegate_.metric_logger());
+
+ EXPECT_CALL(delegate_, OnWalletError(WalletClient::SPENDING_LIMIT_EXCEEDED))
+ .Times(1);
+ delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS,
+ 1);
+ delegate_.ExpectWalletErrorMetric(
+ AutofillMetrics::WALLET_SPENDING_LIMIT_EXCEEDED);
+
+ VerifyAndFinishRequest(net::HTTP_FORBIDDEN,
+ kGetWalletItemsValidRequest,
+ kErrorResponseSpendingLimitExceeded);
+}
+
+// 400 (BAD_REQUEST) - response json is ignored.
+TEST_F(WalletClientTest, ErrorResponse400) {
+ EXPECT_FALSE(wallet_client_->HasRequestInProgress());
+ delegate_.ExpectBaselineMetrics();
+ wallet_client_->GetWalletItems(base::string16(), base::string16());
+ EXPECT_TRUE(wallet_client_->HasRequestInProgress());
+ testing::Mock::VerifyAndClear(delegate_.metric_logger());
+
+ EXPECT_CALL(delegate_, OnWalletError(WalletClient::BAD_REQUEST)).Times(1);
+ delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS,
+ 1);
+ delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_BAD_REQUEST);
+
+ VerifyAndFinishRequest(
+ net::HTTP_BAD_REQUEST, kGetWalletItemsValidRequest, kErrorResponse);
+}
+
+// Anything else - response json is ignored.
+TEST_F(WalletClientTest, ErrorResponseOther) {
+ EXPECT_FALSE(wallet_client_->HasRequestInProgress());
+ delegate_.ExpectBaselineMetrics();
+ wallet_client_->GetWalletItems(base::string16(), base::string16());
+ EXPECT_TRUE(wallet_client_->HasRequestInProgress());
+ testing::Mock::VerifyAndClear(delegate_.metric_logger());
+
+ EXPECT_CALL(delegate_, OnWalletError(WalletClient::NETWORK_ERROR)).Times(1);
+ delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS,
+ 1);
+ delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_NETWORK_ERROR);
+
+ VerifyAndFinishRequest(
+ net::HTTP_NOT_FOUND, kGetWalletItemsValidRequest, kErrorResponse);
+}
+
TEST_F(WalletClientTest, CancelRequest) {
EXPECT_FALSE(wallet_client_->HasRequestInProgress());
delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS,
0);
delegate_.ExpectBaselineMetrics();
- wallet_client_->GetWalletItems();
+ wallet_client_->GetWalletItems(base::string16(), base::string16());
EXPECT_TRUE(wallet_client_->HasRequestInProgress());
wallet_client_->CancelRequest();
EXPECT_FALSE(wallet_client_->HasRequestInProgress());