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

Side by Side Diff: third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp

Issue 1931233002: Implement PaymentRequestUpdateEvent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@explicit-shipping
Patch Set: Rebase 1 Created 4 years, 7 months 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/payments/PaymentRequest.h" 5 #include "modules/payments/PaymentRequest.h"
6 6
7 #include "bindings/core/v8/ExceptionState.h" 7 #include "bindings/core/v8/ExceptionState.h"
8 #include "bindings/core/v8/JSONValuesForV8.h"
8 #include "bindings/core/v8/ScriptState.h" 9 #include "bindings/core/v8/ScriptState.h"
9 #include "core/dom/ExceptionCode.h" 10 #include "core/dom/ExceptionCode.h"
10 #include "core/testing/DummyPageHolder.h" 11 #include "core/testing/DummyPageHolder.h"
11 #include "modules/payments/CurrencyAmount.h" 12 #include "modules/payments/CurrencyAmount.h"
12 #include "modules/payments/PaymentDetailsTestHelper.h" 13 #include "modules/payments/PaymentDetailsTestHelper.h"
13 #include "modules/payments/PaymentItem.h" 14 #include "modules/payments/PaymentItem.h"
14 #include "modules/payments/ShippingOption.h" 15 #include "modules/payments/ShippingOption.h"
15 #include "platform/heap/HeapAllocator.h" 16 #include "platform/heap/HeapAllocator.h"
16 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 { 219 {
219 ScriptState::Scope scope(getScriptState()); 220 ScriptState::Scope scope(getScriptState());
220 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState()); 221 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
221 EXPECT_FALSE(getExceptionState().hadException()); 222 EXPECT_FALSE(getExceptionState().hadException());
222 223
223 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState())); 224 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState()));
224 225
225 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingAddress Change(mojom::blink::ShippingAddress::New()); 226 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingAddress Change(mojom::blink::ShippingAddress::New());
226 } 227 }
227 228
229 TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidShippingAddressInResponse)
230 {
231 ScriptState::Scope scope(getScriptState());
232 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
233 EXPECT_FALSE(getExceptionState().hadException());
234 mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::N ew();
235 response->shipping_address = mojom::blink::ShippingAddress::New();
236
237 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState()));
238
239 ((mojom::blink::PaymentRequestClient*)request)->OnPaymentResponse(std::move( response));
Marijn Kruisselbrink 2016/05/03 17:57:28 static_cast (also in the rest of the file)
please use gerrit instead 2016/05/03 21:38:33 Done.
240 }
241
228 TEST_F(PaymentRequestTest, DontRejectShowPromiseForValidShippingAddress) 242 TEST_F(PaymentRequestTest, DontRejectShowPromiseForValidShippingAddress)
229 { 243 {
230 ScriptState::Scope scope(getScriptState()); 244 ScriptState::Scope scope(getScriptState());
231 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState()); 245 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
232 EXPECT_FALSE(getExceptionState().hadException()); 246 EXPECT_FALSE(getExceptionState().hadException());
233 mojom::blink::ShippingAddressPtr shippingAddress = mojom::blink::ShippingAdd ress::New(); 247 mojom::blink::ShippingAddressPtr shippingAddress = mojom::blink::ShippingAdd ress::New();
234 shippingAddress->region_code = "US"; 248 shippingAddress->region_code = "US";
235 shippingAddress->language_code = "en"; 249 shippingAddress->language_code = "en";
236 shippingAddress->script_code = "Latn"; 250 shippingAddress->script_code = "Latn";
237 251
238 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectNoCall(getScriptState())); 252 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectNoCall(getScriptState()));
239 253
240 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingAddress Change(std::move(shippingAddress)); 254 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingAddress Change(std::move(shippingAddress));
241 } 255 }
242 256
257 TEST_F(PaymentRequestTest, ResolveShowPromiseWithValidShippingAddressInResponse)
258 {
259 ScriptState::Scope scope(getScriptState());
260 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
261 EXPECT_FALSE(getExceptionState().hadException());
262 mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::N ew();
263 response->shipping_address = mojom::blink::ShippingAddress::New();
264 response->shipping_address->region_code = "US";
265 response->shipping_address->language_code = "en";
266 response->shipping_address->script_code = "Latn";
267
268 request->show(getScriptState()).then(MockFunction::expectCall(getScriptState ()), MockFunction::expectNoCall(getScriptState()));
269
270 ((mojom::blink::PaymentRequestClient*)request)->OnPaymentResponse(std::move( response));
271 }
272
243 TEST_F(PaymentRequestTest, ResolveShowPromiseWithoutShippingAddressInResponse) 273 TEST_F(PaymentRequestTest, ResolveShowPromiseWithoutShippingAddressInResponse)
244 { 274 {
245 ScriptState::Scope scope(getScriptState()); 275 ScriptState::Scope scope(getScriptState());
246 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState()); 276 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
247 EXPECT_FALSE(getExceptionState().hadException()); 277 EXPECT_FALSE(getExceptionState().hadException());
248 278
249 request->show(getScriptState()).then(MockFunction::expectCall(getScriptState ()), MockFunction::expectNoCall(getScriptState())); 279 request->show(getScriptState()).then(MockFunction::expectCall(getScriptState ()), MockFunction::expectNoCall(getScriptState()));
250 280
251 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (mojom::blink::PaymentResponse::New()); 281 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (mojom::blink::PaymentResponse::New());
252 } 282 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState()); 344 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
315 EXPECT_FALSE(getExceptionState().hadException()); 345 EXPECT_FALSE(getExceptionState().hadException());
316 request->show(getScriptState()); 346 request->show(getScriptState());
317 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (mojom::blink::PaymentResponse::New()); 347 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (mojom::blink::PaymentResponse::New());
318 348
319 request->complete(getScriptState(), true).then(MockFunction::expectCall(getS criptState()), MockFunction::expectNoCall(getScriptState())); 349 request->complete(getScriptState(), true).then(MockFunction::expectCall(getS criptState()), MockFunction::expectNoCall(getScriptState()));
320 350
321 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnComplete(); 351 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnComplete();
322 } 352 }
323 353
354 TEST_F(PaymentRequestTest, RejectShowPromiseOnUpdateDetailsFailure)
355 {
356 ScriptState::Scope scope(getScriptState());
357 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
358 EXPECT_FALSE(getExceptionState().hadException());
359
360 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState()));
361
362 request->onUpdatePaymentDetailsFailure(ScriptValue::from(getScriptState(), " oops"));
363 }
364
365 TEST_F(PaymentRequestTest, RejectCompletePromiseOnUpdateDetailsFailure)
366 {
367 ScriptState::Scope scope(getScriptState());
368 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
369 EXPECT_FALSE(getExceptionState().hadException());
370 request->show(getScriptState()).then(MockFunction::expectCall(getScriptState ()), MockFunction::expectNoCall(getScriptState()));
371 ((mojom::blink::PaymentRequestClient*)request)->OnPaymentResponse(mojom::bli nk::PaymentResponse::New());
372
373 request->complete(getScriptState(), true).then(MockFunction::expectNoCall(ge tScriptState()), MockFunction::expectCall(getScriptState()));
374
375 request->onUpdatePaymentDetailsFailure(ScriptValue::from(getScriptState(), " oops"));
376 }
377
378 TEST_F(PaymentRequestTest, IgnoreUpdatePaymentDetailsAfterShowPromiseResolved)
379 {
380 ScriptState::Scope scope(getScriptState());
381 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
382 EXPECT_FALSE(getExceptionState().hadException());
383 request->show(getScriptState()).then(MockFunction::expectCall(getScriptState ()), MockFunction::expectNoCall(getScriptState()));
384 ((mojom::blink::PaymentRequestClient*)request)->OnPaymentResponse(mojom::bli nk::PaymentResponse::New());
385
386 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), "foo"));
387 }
388
389 TEST_F(PaymentRequestTest, RejectShowPromiseOnNonPaymentDetailsUpdate)
390 {
391 ScriptState::Scope scope(getScriptState());
392 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
393 EXPECT_FALSE(getExceptionState().hadException());
394
395 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState()));
396
397 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), "NotPaym entDetails"));
398 }
399
400 TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidPaymentDetailsUpdate)
401 {
402 ScriptState::Scope scope(getScriptState());
403 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
404 EXPECT_FALSE(getExceptionState().hadException());
405
406 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState()));
407
408 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), "{}", getExceptionState())));
409 EXPECT_FALSE(getExceptionState().hadException());
410 }
411
412 TEST_F(PaymentRequestTest, ClearShippingOptionOnPaymentDetailsUpdateWithoutShipp ingOptions)
413 {
414 ScriptState::Scope scope(getScriptState());
415 PaymentDetails details;
416 details.setItems(HeapVector<PaymentItem>(1, buildPaymentItemForTest()));
417 PaymentOptions options;
418 options.setRequestShipping(true);
419 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), details, options, getExceptionState());
420 EXPECT_FALSE(getExceptionState().hadException());
421 EXPECT_TRUE(request->shippingOption().isNull());
422 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectNoCall(getScriptState()));
423 String detailWithShippingOptions = "{\"items\": [{\"id\": \"total\", \"label \": \"Total\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}}],"
424 "\"shippingOptions\": [{\"id\": \"standardShippingOption\", \"label\": \ "Standard shipping\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\ "}}]}";
425 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detailWithShippingOptions, getExceptionState())));
426 EXPECT_FALSE(getExceptionState().hadException());
427 EXPECT_EQ("standardShippingOption", request->shippingOption());
428 String detailWithoutShippingOptions = "{\"items\": [{\"id\": \"total\", \"la bel\": \"Total\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}}] }";
429
430 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detailWithoutShippingOptions, getExceptionState())));
431
432 EXPECT_FALSE(getExceptionState().hadException());
433 EXPECT_TRUE(request->shippingOption().isNull());
434 }
435
436 TEST_F(PaymentRequestTest, ClearShippingOptionOnPaymentDetailsUpdateWithMultiple ShippingOptions)
437 {
438 ScriptState::Scope scope(getScriptState());
439 PaymentOptions options;
440 options.setRequestShipping(true);
441 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), options, getExceptionState());
442 EXPECT_FALSE(getExceptionState().hadException());
443 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectNoCall(getScriptState()));
444 String detail = "{\"items\": [{\"id\": \"total\", \"label\": \"Total\", \"am ount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}}],"
445 "\"shippingOptions\": [{\"id\": \"slow\", \"label\": \"Slow\", \"amount\ ": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}},"
446 "{\"id\": \"fast\", \"label\": \"Fast\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"50.00\"}}]}";
447
448 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detail, getExceptionState())));
449 EXPECT_FALSE(getExceptionState().hadException());
450
451 EXPECT_TRUE(request->shippingOption().isNull());
452 }
453
454 TEST_F(PaymentRequestTest, UseTheSingleShippingOptionFromPaymentDetailsUpdate)
455 {
456 ScriptState::Scope scope(getScriptState());
457 PaymentOptions options;
458 options.setRequestShipping(true);
459 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), options, getExceptionState());
460 EXPECT_FALSE(getExceptionState().hadException());
461 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectNoCall(getScriptState()));
462 String detail = "{\"items\": [{\"id\": \"total\", \"label\": \"Total\", \"am ount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}}],"
463 "\"shippingOptions\": [{\"id\": \"standardShippingOption\", \"label\": \ "Standard shipping\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\ "}}]}";
464
465 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detail, getExceptionState())));
466 EXPECT_FALSE(getExceptionState().hadException());
467
468 EXPECT_EQ("standardShippingOption", request->shippingOption());
469 }
470
324 } // namespace 471 } // namespace
325 } // namespace blink 472 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698