| Index: third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp
|
| diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp
|
| index bbbf258bd7ca6e2cabcf7c5223cb6cd9636ef459..5eeb5198d237411be497c367caf1eab8323d8c0f 100644
|
| --- a/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp
|
| +++ b/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp
|
| @@ -5,6 +5,7 @@
|
| #include "modules/payments/PaymentRequest.h"
|
|
|
| #include "bindings/core/v8/ExceptionState.h"
|
| +#include "bindings/core/v8/JSONValuesForV8.h"
|
| #include "bindings/core/v8/ScriptState.h"
|
| #include "core/dom/ExceptionCode.h"
|
| #include "core/testing/DummyPageHolder.h"
|
| @@ -225,6 +226,19 @@ TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidShippingAddress)
|
| static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingAddressChange(mojom::blink::ShippingAddress::New());
|
| }
|
|
|
| +TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidShippingAddressInResponse)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->shipping_address = mojom::blink::ShippingAddress::New();
|
| +
|
| + request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState()));
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| TEST_F(PaymentRequestTest, DontRejectShowPromiseForValidShippingAddress)
|
| {
|
| ScriptState::Scope scope(getScriptState());
|
| @@ -240,6 +254,22 @@ TEST_F(PaymentRequestTest, DontRejectShowPromiseForValidShippingAddress)
|
| static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingAddressChange(std::move(shippingAddress));
|
| }
|
|
|
| +TEST_F(PaymentRequestTest, ResolveShowPromiseWithValidShippingAddressInResponse)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->shipping_address = mojom::blink::ShippingAddress::New();
|
| + response->shipping_address->region_code = "US";
|
| + response->shipping_address->language_code = "en";
|
| + response->shipping_address->script_code = "Latn";
|
| +
|
| + request->show(getScriptState()).then(MockFunction::expectCall(getScriptState()), MockFunction::expectNoCall(getScriptState()));
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| TEST_F(PaymentRequestTest, ResolveShowPromiseWithoutShippingAddressInResponse)
|
| {
|
| ScriptState::Scope scope(getScriptState());
|
| @@ -321,5 +351,122 @@ TEST_F(PaymentRequestTest, ResolvePromiseOnComplete)
|
| static_cast<mojom::blink::PaymentRequestClient*>(request)->OnComplete();
|
| }
|
|
|
| +TEST_F(PaymentRequestTest, RejectShowPromiseOnUpdateDetailsFailure)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| +
|
| + request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState()));
|
| +
|
| + request->onUpdatePaymentDetailsFailure(ScriptValue::from(getScriptState(), "oops"));
|
| +}
|
| +
|
| +TEST_F(PaymentRequestTest, RejectCompletePromiseOnUpdateDetailsFailure)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| + request->show(getScriptState()).then(MockFunction::expectCall(getScriptState()), MockFunction::expectNoCall(getScriptState()));
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(mojom::blink::PaymentResponse::New());
|
| +
|
| + request->complete(getScriptState(), true).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState()));
|
| +
|
| + request->onUpdatePaymentDetailsFailure(ScriptValue::from(getScriptState(), "oops"));
|
| +}
|
| +
|
| +TEST_F(PaymentRequestTest, IgnoreUpdatePaymentDetailsAfterShowPromiseResolved)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| + request->show(getScriptState()).then(MockFunction::expectCall(getScriptState()), MockFunction::expectNoCall(getScriptState()));
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(mojom::blink::PaymentResponse::New());
|
| +
|
| + request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), "foo"));
|
| +}
|
| +
|
| +TEST_F(PaymentRequestTest, RejectShowPromiseOnNonPaymentDetailsUpdate)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| +
|
| + request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState()));
|
| +
|
| + request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), "NotPaymentDetails"));
|
| +}
|
| +
|
| +TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidPaymentDetailsUpdate)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState());
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| +
|
| + request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState()));
|
| +
|
| + request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSONString(getScriptState(), "{}", getExceptionState())));
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| +}
|
| +
|
| +TEST_F(PaymentRequestTest, ClearShippingOptionOnPaymentDetailsUpdateWithoutShippingOptions)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + PaymentDetails details;
|
| + details.setItems(HeapVector<PaymentItem>(1, buildPaymentItemForTest()));
|
| + PaymentOptions options;
|
| + options.setRequestShipping(true);
|
| + PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), details, options, getExceptionState());
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| + EXPECT_TRUE(request->shippingOption().isNull());
|
| + request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectNoCall(getScriptState()));
|
| + String detailWithShippingOptions = "{\"items\": [{\"id\": \"total\", \"label\": \"Total\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}}],"
|
| + "\"shippingOptions\": [{\"id\": \"standardShippingOption\", \"label\": \"Standard shipping\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}}]}";
|
| + request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSONString(getScriptState(), detailWithShippingOptions, getExceptionState())));
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| + EXPECT_EQ("standardShippingOption", request->shippingOption());
|
| + String detailWithoutShippingOptions = "{\"items\": [{\"id\": \"total\", \"label\": \"Total\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}}]}";
|
| +
|
| + request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSONString(getScriptState(), detailWithoutShippingOptions, getExceptionState())));
|
| +
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| + EXPECT_TRUE(request->shippingOption().isNull());
|
| +}
|
| +
|
| +TEST_F(PaymentRequestTest, ClearShippingOptionOnPaymentDetailsUpdateWithMultipleShippingOptions)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + PaymentOptions options;
|
| + options.setRequestShipping(true);
|
| + PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), options, getExceptionState());
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| + request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectNoCall(getScriptState()));
|
| + String detail = "{\"items\": [{\"id\": \"total\", \"label\": \"Total\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}}],"
|
| + "\"shippingOptions\": [{\"id\": \"slow\", \"label\": \"Slow\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}},"
|
| + "{\"id\": \"fast\", \"label\": \"Fast\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"50.00\"}}]}";
|
| +
|
| + request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSONString(getScriptState(), detail, getExceptionState())));
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| +
|
| + EXPECT_TRUE(request->shippingOption().isNull());
|
| +}
|
| +
|
| +TEST_F(PaymentRequestTest, UseTheSingleShippingOptionFromPaymentDetailsUpdate)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + PaymentOptions options;
|
| + options.setRequestShipping(true);
|
| + PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), options, getExceptionState());
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| + request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectNoCall(getScriptState()));
|
| + String detail = "{\"items\": [{\"id\": \"total\", \"label\": \"Total\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}}],"
|
| + "\"shippingOptions\": [{\"id\": \"standardShippingOption\", \"label\": \"Standard shipping\", \"amount\": {\"currencyCode\": \"USD\", \"value\": \"5.00\"}}]}";
|
| +
|
| + request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSONString(getScriptState(), detail, getExceptionState())));
|
| + EXPECT_FALSE(getExceptionState().hadException());
|
| +
|
| + EXPECT_EQ("standardShippingOption", request->shippingOption());
|
| +}
|
| +
|
| } // namespace
|
| } // namespace blink
|
|
|