| // Copyright 2016 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 "modules/payments/PaymentEventDataConversion.h" |
| |
| #include "bindings/core/v8/ScriptValue.h" |
| #include "bindings/core/v8/V8BindingForCore.h" |
| #include "bindings/core/v8/V8BindingForTesting.h" |
| #include "platform/bindings/ScriptState.h" |
| #include "public/platform/modules/payments/WebPaymentRequestEventData.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace blink { |
| namespace { |
| |
| static WebPaymentCurrencyAmount CreateWebPaymentCurrencyAmountForTest() { |
| WebPaymentCurrencyAmount web_currency_amount; |
| web_currency_amount.currency = WebString::FromUTF8("USD"); |
| web_currency_amount.value = WebString::FromUTF8("9.99"); |
| return web_currency_amount; |
| } |
| |
| static WebPaymentMethodData CreateWebPaymentMethodDataForTest() { |
| WebPaymentMethodData web_method_data; |
| WebString method = WebString::FromUTF8("foo"); |
| web_method_data.supported_methods = WebVector<WebString>(&method, 1); |
| web_method_data.stringified_data = "{\"merchantId\":\"12345\"}"; |
| return web_method_data; |
| } |
| |
| static WebCanMakePaymentEventData CreateWebCanMakePaymentEventDataForTest() { |
| WebCanMakePaymentEventData web_data; |
| web_data.top_level_origin = WebString::FromUTF8("https://example.com"); |
| web_data.payment_request_origin = WebString::FromUTF8("https://example.com"); |
| Vector<WebPaymentMethodData> method_data; |
| method_data.push_back(CreateWebPaymentMethodDataForTest()); |
| web_data.method_data = WebVector<WebPaymentMethodData>(method_data); |
| return web_data; |
| } |
| |
| static WebPaymentRequestEventData CreateWebPaymentRequestEventDataForTest() { |
| WebPaymentRequestEventData web_data; |
| web_data.top_level_origin = WebString::FromUTF8("https://example.com"); |
| web_data.payment_request_origin = WebString::FromUTF8("https://example.com"); |
| web_data.payment_request_id = WebString::FromUTF8("payment-request-id"); |
| Vector<WebPaymentMethodData> method_data; |
| method_data.push_back(CreateWebPaymentMethodDataForTest()); |
| web_data.method_data = WebVector<WebPaymentMethodData>(method_data); |
| web_data.total = CreateWebPaymentCurrencyAmountForTest(); |
| web_data.instrument_key = WebString::FromUTF8("payment-instrument-key"); |
| return web_data; |
| } |
| |
| TEST(PaymentEventDataConversionTest, ToCanMakePaymentEventData) { |
| V8TestingScope scope; |
| WebCanMakePaymentEventData web_data = |
| CreateWebCanMakePaymentEventDataForTest(); |
| CanMakePaymentEventInit data = |
| PaymentEventDataConversion::ToCanMakePaymentEventInit( |
| scope.GetScriptState(), web_data); |
| |
| ASSERT_TRUE(data.hasTopLevelOrigin()); |
| EXPECT_EQ("https://example.com", data.topLevelOrigin()); |
| |
| ASSERT_TRUE(data.hasPaymentRequestOrigin()); |
| EXPECT_EQ("https://example.com", data.paymentRequestOrigin()); |
| |
| ASSERT_TRUE(data.hasMethodData()); |
| ASSERT_EQ(1UL, data.methodData().size()); |
| ASSERT_TRUE(data.methodData().front().hasSupportedMethods()); |
| ASSERT_EQ(1UL, data.methodData() |
| .front() |
| .supportedMethods() |
| .GetAsStringSequence() |
| .size()); |
| ASSERT_EQ("foo", data.methodData() |
| .front() |
| .supportedMethods() |
| .GetAsStringSequence() |
| .front()); |
| ASSERT_TRUE(data.methodData().front().hasData()); |
| ASSERT_TRUE(data.methodData().front().data().IsObject()); |
| String stringified_data = V8StringToWebCoreString<String>( |
| v8::JSON::Stringify( |
| scope.GetContext(), |
| data.methodData().front().data().V8Value().As<v8::Object>()) |
| .ToLocalChecked(), |
| kDoNotExternalize); |
| EXPECT_EQ("{\"merchantId\":\"12345\"}", stringified_data); |
| } |
| |
| TEST(PaymentEventDataConversionTest, ToPaymentRequestEventData) { |
| V8TestingScope scope; |
| WebPaymentRequestEventData web_data = |
| CreateWebPaymentRequestEventDataForTest(); |
| PaymentRequestEventInit data = |
| PaymentEventDataConversion::ToPaymentRequestEventInit( |
| scope.GetScriptState(), web_data); |
| |
| ASSERT_TRUE(data.hasTopLevelOrigin()); |
| EXPECT_EQ("https://example.com", data.topLevelOrigin()); |
| |
| ASSERT_TRUE(data.hasPaymentRequestOrigin()); |
| EXPECT_EQ("https://example.com", data.paymentRequestOrigin()); |
| |
| ASSERT_TRUE(data.hasPaymentRequestId()); |
| EXPECT_EQ("payment-request-id", data.paymentRequestId()); |
| |
| ASSERT_TRUE(data.hasMethodData()); |
| ASSERT_EQ(1UL, data.methodData().size()); |
| ASSERT_TRUE(data.methodData().front().hasSupportedMethods()); |
| ASSERT_EQ(1UL, data.methodData() |
| .front() |
| .supportedMethods() |
| .GetAsStringSequence() |
| .size()); |
| ASSERT_EQ("foo", data.methodData() |
| .front() |
| .supportedMethods() |
| .GetAsStringSequence() |
| .front()); |
| ASSERT_TRUE(data.methodData().front().hasData()); |
| ASSERT_TRUE(data.methodData().front().data().IsObject()); |
| String stringified_data = V8StringToWebCoreString<String>( |
| v8::JSON::Stringify( |
| scope.GetContext(), |
| data.methodData().front().data().V8Value().As<v8::Object>()) |
| .ToLocalChecked(), |
| kDoNotExternalize); |
| EXPECT_EQ("{\"merchantId\":\"12345\"}", stringified_data); |
| |
| ASSERT_TRUE(data.hasTotal()); |
| ASSERT_TRUE(data.total().hasCurrency()); |
| EXPECT_EQ("USD", data.total().currency()); |
| ASSERT_TRUE(data.total().hasValue()); |
| EXPECT_EQ("9.99", data.total().value()); |
| |
| ASSERT_TRUE(data.hasInstrumentKey()); |
| EXPECT_EQ("payment-instrument-key", data.instrumentKey()); |
| } |
| |
| } // namespace |
| } // namespace blink |