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

Side by Side Diff: chrome/browser/autofill/wallet/wallet_client_unittest.cc

Issue 11293078: Integrating Online Wallet into Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More fixes from code review Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/logging.h"
6 #include "base/string_number_conversions.h"
7 #include "base/string_util.h"
8 #include "chrome/browser/autofill/wallet/cart.h"
9 #include "chrome/browser/autofill/wallet/full_wallet.h"
10 #include "chrome/browser/autofill/wallet/wallet_client.h"
11 #include "chrome/browser/autofill/wallet/wallet_items.h"
12 #include "chrome/test/base/testing_profile.h"
13 #include "content/public/test/test_browser_thread.h"
14 #include "googleurl/src/gurl.h"
15 #include "net/base/net_errors.h"
16 #include "net/http/http_status_code.h"
17 #include "net/url_request/test_url_fetcher_factory.h"
18 #include "net/url_request/url_fetcher_delegate.h"
19 #include "net/url_request/url_request_status.h"
20 #include "testing/gmock/include/gmock/gmock.h"
21 #include "testing/gtest/include/gtest/gtest.h"
22
23 namespace {
24
25 static const char kGoogleTransactionId[] = "google-transaction-id";
26
27 static const char kGetFullWalletValidResponse[] =
28 "{"
29 " \"expiration_month\":12,"
30 " \"expiration_year\":2012,"
31 " \"iin\":\"iin\","
32 " \"rest\":\"rest\","
33 " \"billing_address\":"
34 " {"
35 " \"id\":\"id\","
36 " \"phone_number\":\"phone_number\","
37 " \"postal_address\":"
38 " {"
39 " \"recipient_name\":\"recipient_name\","
40 " \"address_line\":"
41 " ["
42 " \"address_line_1\","
43 " \"address_line_2\""
44 " ],"
45 " \"locality_name\":\"locality_name\","
46 " \"administrative_area_name\":\"administrative_area_name\","
47 " \"postal_code_number\":\"postal_code_number\","
48 " \"country_name_code\":\"country_name_code\""
49 " }"
50 " },"
51 " \"shipping_address\":"
52 " {"
53 " \"id\":\"ship_id\","
54 " \"phone_number\":\"ship_phone_number\","
55 " \"postal_address\":"
56 " {"
57 " \"recipient_name\":\"ship_recipient_name\","
58 " \"address_line\":"
59 " ["
60 " \"ship_address_line_1\","
61 " \"ship_address_line_2\""
62 " ],"
63 " \"locality_name\":\"ship_locality_name\","
64 " \"administrative_area_name\":\"ship_administrative_area_name\","
65 " \"postal_code_number\":\"ship_postal_code_number\","
66 " \"country_name_code\":\"ship_country_name_code\""
67 " }"
68 " },"
69 " \"required_action\":"
70 " ["
71 " ]"
72 "}";
73
74 static const char kGetWalletItemsValidResponse[] =
75 "{"
76 " \"required_action\":"
77 " ["
78 " ],"
79 " \"google_transaction_id\":\"google_transaction_id\","
80 " \"instrument\":"
81 " ["
82 " {"
83 " \"descriptive_name\":\"descriptive_name\","
84 " \"type\":\"VISA\","
85 " \"supported_currency\":\"currency_code\","
86 " \"last_four_digits\":\"last_four_digits\","
87 " \"expiration_month\":12,"
88 " \"expiration_year\":2012,"
89 " \"brand\":\"monkeys\","
90 " \"billing_address\":"
91 " {"
92 " \"name\":\"name\","
93 " \"address1\":\"address1\","
94 " \"address2\":\"address2\","
95 " \"city\":\"city\","
96 " \"state\":\"state\","
97 " \"postal_code\":\"postal_code\","
98 " \"phone_number\":\"phone_number\","
99 " \"country_code\":\"country_code\""
100 " },"
101 " \"status\":\"VALID\","
102 " \"object_id\":\"default_instrument_id\""
103 " }"
104 " ],"
105 " \"default_instrument_id\":\"default_instrument_id\","
106 " \"address\":"
107 " ["
108 " ],"
109 " \"default_address_id\":\"default_address_id\","
110 " \"required_legal_document\":"
111 " ["
112 " ]"
113 "}";
114
115 static const char kAcceptLegalDocumentsValidRequest[] =
116 "{"
117 "\"accepted_legal_document\":"
118 "["
119 "\"doc_1\","
120 "\"doc_2\""
121 "],"
122 "\"api_key\":\"abcdefg\","
123 "\"google_transaction_id\":\"google-transaction-id\""
124 "}";
125
126 static const char kGetFullWalletValidRequest[] =
127 "{"
128 "\"api_key\":\"abcdefg\","
Dan Beam 2012/12/05 19:34:59 nit: why did you indent this JSON differently than
ahutter 2012/12/05 23:37:23 ws matters here since I'm testing the request payl
129 "\"cart\":"
130 "{"
131 "\"currency_code\":\"currency_code\","
132 "\"total_price\":\"currency_code\""
133 "},"
134 "\"encrypted_otp\":\"encrypted_otp\","
135 "\"google_transaction_id\":\"google_transaction_id\","
136 "\"merchant_domain\":\"merchant_domain\","
137 "\"risk_params\":\"\","
138 "\"selected_address_id\":\"shipping_address_id\","
139 "\"selected_instrument_id\":\"instrument_id\","
140 "\"session_material\":\"session_material\""
141 "}";
142
143 static const char kGetWalletItemsValidRequest[] =
144 "{"
145 "\"api_key\":\"abcdefg\","
146 "\"risk_params\":\"\""
147 "}";
148
149 static const char kSendExtendedAutofillStatusOfSuccessValidRequest[] =
150 "{"
151 "\"api_key\":\"abcdefg\","
152 "\"google_transaction_id\":\"google_transaction_id\","
153 "\"hostname\":\"hostname\","
154 "\"success\":true"
155 "}";
156
157 static const char kSendExtendedAutofillStatusOfFailureValidRequest[] =
158 "{"
159 "\"api_key\":\"abcdefg\","
160 "\"google_transaction_id\":\"google_transaction_id\","
161 "\"hostname\":\"hostname\","
162 "\"reason\":\"CANNOT_PROCEED\","
163 "\"success\":false"
164 "}";
165
166 } // end anonymous namespace
167
Dan Beam 2012/12/05 19:34:59 nit: s/\n\n/\n/
ahutter 2012/12/05 23:37:23 Done.
168
169 namespace wallet {
170
171 class WalletClientTest : public testing::Test {
172 public:
173 WalletClientTest() : io_thread_(content::BrowserThread::IO) {}
174
175 virtual void SetUp() {
176 io_thread_.StartIOThread();
177 profile_.CreateRequestContext();
178 }
179
180 virtual void TearDown() {
181 profile_.ResetRequestContext();
182 io_thread_.Stop();
183 }
184
185 protected:
186 TestingProfile profile_;
Dan Beam 2012/12/05 19:34:59 nit: \n
ahutter 2012/12/05 23:37:23 Done.
187 private:
188 // The profile's request context must be released on the IO thread.
189 content::TestBrowserThread io_thread_;
190 };
191
192 class MockWalletClientObserver
193 : public wallet::WalletClient::WalletClientObserver {
194 public:
195 MockWalletClientObserver() {}
196 ~MockWalletClientObserver() {}
197
198 MOCK_METHOD0(OnAcceptLegalDocuments, void());
199 MOCK_METHOD2(OnEncryptOtp, void(const std::string& encrypted_otp,
200 const std::string& session_material));
201 MOCK_METHOD1(OnGetFullWallet, void(FullWallet* full_wallet));
202 MOCK_METHOD1(OnGetWalletItems, void(WalletItems* wallet_items));
203 MOCK_METHOD0(OnSendExtendedAutofillStatus, void());
204 MOCK_METHOD0(OnWalletError, void());
205 MOCK_METHOD1(OnNetworkError, void(int response_code));
206 };
207
208 // TODO(ahutter): Improve this when the error body is captured. See
209 // http://crbug.com/164410.
210 TEST_F(WalletClientTest, WalletErrorOnExpectedVoidResponse) {
211 MockWalletClientObserver observer;
212 EXPECT_CALL(observer, OnWalletError()).Times(1);
213
214 net::TestURLFetcherFactory factory;
215
216 WalletClient wallet_client(profile_.GetRequestContext());
217 wallet_client.SendExtendedAutofillStatus(true, "", "", "", &observer);
218 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
219 DCHECK(fetcher);
220 fetcher->set_response_code(net::HTTP_INTERNAL_SERVER_ERROR);
221 fetcher->delegate()->OnURLFetchComplete(fetcher);
222 }
223
224 // TODO(ahutter): Improve this when the error body is captured. See
225 // http://crbug.com/164410.
226 TEST_F(WalletClientTest, WalletErrorOnExpectedResponse) {
227 MockWalletClientObserver observer;
228 EXPECT_CALL(observer, OnWalletError()).Times(1);
229
230 net::TestURLFetcherFactory factory;
231
232 WalletClient wallet_client(profile_.GetRequestContext());
233 Cart cart("currency_code", "currency_code");
234 wallet_client.GetFullWallet("", "", "", cart, "", "", "", &observer);
235 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
236 DCHECK(fetcher);
237 fetcher->set_response_code(net::HTTP_INTERNAL_SERVER_ERROR);
238 fetcher->delegate()->OnURLFetchComplete(fetcher);
239 }
240
241 TEST_F(WalletClientTest, NetworkFailureOnExpectedVoidResponse) {
242 MockWalletClientObserver observer;
243 EXPECT_CALL(observer, OnNetworkError(net::HTTP_UNAUTHORIZED)).Times(1);
244
245 net::TestURLFetcherFactory factory;
246
247 WalletClient wallet_client(profile_.GetRequestContext());
248 wallet_client.SendExtendedAutofillStatus(true, "", "", "", &observer);
249 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
250 DCHECK(fetcher);
251 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
252 // The number of retries is set to 3.
253 fetcher->delegate()->OnURLFetchComplete(fetcher);
254 fetcher->delegate()->OnURLFetchComplete(fetcher);
255 fetcher->delegate()->OnURLFetchComplete(fetcher);
256 fetcher->delegate()->OnURLFetchComplete(fetcher);
257 }
258
259 TEST_F(WalletClientTest, NetworkFailureOnExpectedResponse) {
260 MockWalletClientObserver observer;
261 EXPECT_CALL(observer, OnNetworkError(net::HTTP_UNAUTHORIZED)).Times(1);
262
263 net::TestURLFetcherFactory factory;
264
265 WalletClient wallet_client(profile_.GetRequestContext());
266 Cart cart("currency_code", "currency_code");
267 wallet_client.GetFullWallet("", "", "", cart, "", "", "", &observer);
268 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
269 DCHECK(fetcher);
270 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
271 // The number of retries is set to 3.
272 fetcher->delegate()->OnURLFetchComplete(fetcher);
273 fetcher->delegate()->OnURLFetchComplete(fetcher);
274 fetcher->delegate()->OnURLFetchComplete(fetcher);
275 fetcher->delegate()->OnURLFetchComplete(fetcher);
276 }
277
278 TEST_F(WalletClientTest, RequestError) {
279 MockWalletClientObserver observer;
280 EXPECT_CALL(observer, OnWalletError()).Times(1);
281
282 net::TestURLFetcherFactory factory;
283
284 WalletClient wallet_client(profile_.GetRequestContext());
285 wallet_client.SendExtendedAutofillStatus(true, "", "", "", &observer);
286 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
287 DCHECK(fetcher);
288 fetcher->set_response_code(net::HTTP_BAD_REQUEST);
289 fetcher->delegate()->OnURLFetchComplete(fetcher);
290 }
291
292 // TODO(ahutter): Add test for EncryptOtp.
293 // TODO(ahutter): Add retry and failure tests for EncryptOtp, GetWalletItems,
294 // GetFullWallet for when data is missing or invalid.
295
296 TEST_F(WalletClientTest, GetFullWallet) {
297 MockWalletClientObserver observer;
298 EXPECT_CALL(observer, OnGetFullWallet(testing::NotNull())).Times(1);
Dan Beam 2012/12/05 19:34:59 cool, didn't know about testing::NotNull()
ahutter 2012/12/05 23:37:23 Ack.
299
300 net::TestURLFetcherFactory factory;
301
302 WalletClient wallet_client(profile_.GetRequestContext());
303 Cart cart("currency_code", "currency_code");
304 wallet_client.GetFullWallet("instrument_id",
305 "shipping_address_id",
306 "merchant_domain",
307 cart,
308 "google_transaction_id",
309 "encrypted_otp",
310 "session_material",
311 &observer);
312 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
313 DCHECK(fetcher);
314 ASSERT_EQ(kGetFullWalletValidRequest, fetcher->upload_data());
315 fetcher->set_response_code(net::HTTP_OK);
316 fetcher->SetResponseString(kGetFullWalletValidResponse);
317 fetcher->delegate()->OnURLFetchComplete(fetcher);
318 }
319
320 TEST_F(WalletClientTest, AcceptLegalDocuments) {
321 MockWalletClientObserver observer;
322 EXPECT_CALL(observer, OnAcceptLegalDocuments()).Times(1);
323
324 net::TestURLFetcherFactory factory;
325
326 WalletClient wallet_client(profile_.GetRequestContext());
327 std::vector<std::string> doc_ids;
328 doc_ids.push_back("doc_1");
329 doc_ids.push_back("doc_2");
330 wallet_client.AcceptLegalDocuments(doc_ids,
331 kGoogleTransactionId,
332 &observer);
333 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
334 DCHECK(fetcher);
335 ASSERT_EQ(kAcceptLegalDocumentsValidRequest, fetcher->upload_data());
336 fetcher->set_response_code(net::HTTP_OK);
337 fetcher->delegate()->OnURLFetchComplete(fetcher);
338 }
339
340 TEST_F(WalletClientTest, GetWalletItems) {
341 MockWalletClientObserver observer;
342 EXPECT_CALL(observer, OnGetWalletItems(testing::NotNull())).Times(1);
343
344 net::TestURLFetcherFactory factory;
345
346 WalletClient wallet_client(profile_.GetRequestContext());
347 wallet_client.GetWalletItems(&observer);
348 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
349 DCHECK(fetcher);
350 ASSERT_EQ(kGetWalletItemsValidRequest, fetcher->upload_data());
351 fetcher->set_response_code(net::HTTP_OK);
352 fetcher->SetResponseString(kGetWalletItemsValidResponse);
353 fetcher->delegate()->OnURLFetchComplete(fetcher);
354 }
355
356 TEST_F(WalletClientTest, SendExtendedAutofillOfStatusSuccess) {
357 MockWalletClientObserver observer;
358 EXPECT_CALL(observer, OnSendExtendedAutofillStatus()).Times(1);
359
360 net::TestURLFetcherFactory factory;
361
362 WalletClient wallet_client(profile_.GetRequestContext());
363 wallet_client.SendExtendedAutofillStatus(true,
364 "hostname",
365 "",
366 "google_transaction_id",
367 &observer);
368 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
369 DCHECK(fetcher);
370 ASSERT_EQ(kSendExtendedAutofillStatusOfSuccessValidRequest,
371 fetcher->upload_data());
372 fetcher->set_response_code(net::HTTP_OK);
373 fetcher->delegate()->OnURLFetchComplete(fetcher);
374 }
375
376 TEST_F(WalletClientTest, SendExtendedAutofillStatusOfFailure) {
377 MockWalletClientObserver observer;
378 EXPECT_CALL(observer, OnSendExtendedAutofillStatus()).Times(1);
379
380 net::TestURLFetcherFactory factory;
381
382 WalletClient wallet_client(profile_.GetRequestContext());
383 wallet_client.SendExtendedAutofillStatus(false,
384 "hostname",
385 "CANNOT_PROCEED",
386 "google_transaction_id",
387 &observer);
388 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
389 DCHECK(fetcher);
390 ASSERT_EQ(kSendExtendedAutofillStatusOfFailureValidRequest,
391 fetcher->upload_data());
392 fetcher->set_response_code(net::HTTP_OK);
393 fetcher->delegate()->OnURLFetchComplete(fetcher);
394 }
395
396 } // end wallet namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698