blob: 0114ccf7b724eba93581a95ebe8b2736286dba37 [file] [log] [blame]
// 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/PaymentAppRequestDataConversion.h"
#include "bindings/core/v8/ScriptState.h"
#include "bindings/core/v8/ScriptValue.h"
#include "bindings/core/v8/V8Binding.h"
#include "bindings/core/v8/V8BindingForTesting.h"
#include "public/platform/modules/payments/WebPaymentAppRequestData.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace blink {
namespace {
static WebPaymentItem createWebPaymentItemForTest() {
WebPaymentItem webItem;
webItem.label = WebString::fromUTF8("Label");
webItem.amount.currency = WebString::fromUTF8("USD");
webItem.amount.value = WebString::fromUTF8("9.99");
return webItem;
}
static WebPaymentMethodData createWebPaymentMethodDataForTest() {
WebPaymentMethodData webMethodData;
WebString method = WebString::fromUTF8("foo");
webMethodData.supportedMethods = WebVector<WebString>(&method, 1);
webMethodData.stringifiedData = "{\"merchantId\":\"12345\"}";
return webMethodData;
}
static WebPaymentAppRequestData createWebPaymentAppRequestDataForTest() {
WebPaymentAppRequestData webData;
webData.origin = WebString::fromUTF8("https://example.com");
Vector<WebPaymentMethodData> methodData;
methodData.append(createWebPaymentMethodDataForTest());
webData.methodData = WebVector<WebPaymentMethodData>(methodData);
webData.total = createWebPaymentItemForTest();
webData.optionId = WebString::fromUTF8("payment-app-id");
return webData;
}
TEST(PaymentAppRequestDataConversionTest, ToPaymentAppRequestData) {
V8TestingScope scope;
WebPaymentAppRequestData webData = createWebPaymentAppRequestDataForTest();
PaymentAppRequestData data =
PaymentAppRequestDataConversion::toPaymentAppRequestData(
scope.getScriptState(), webData);
ASSERT_TRUE(data.hasMethodData());
ASSERT_EQ(1UL, data.methodData().size());
ASSERT_TRUE(data.methodData().front().hasSupportedMethods());
ASSERT_EQ(1UL, data.methodData().front().supportedMethods().size());
ASSERT_EQ("foo", data.methodData().front().supportedMethods().front());
ASSERT_TRUE(data.methodData().front().hasData());
ASSERT_TRUE(data.methodData().front().data().isObject());
String stringifiedData = v8StringToWebCoreString<String>(
v8::JSON::Stringify(
scope.context(),
data.methodData().front().data().v8Value().As<v8::Object>())
.ToLocalChecked(),
DoNotExternalize);
EXPECT_EQ("{\"merchantId\":\"12345\"}", stringifiedData);
ASSERT_TRUE(data.hasTotal());
ASSERT_TRUE(data.total().hasLabel());
EXPECT_EQ("Label", data.total().label());
ASSERT_TRUE(data.total().hasAmount());
ASSERT_TRUE(data.total().amount().hasCurrency());
EXPECT_EQ("USD", data.total().amount().currency());
ASSERT_TRUE(data.total().amount().hasValue());
EXPECT_EQ("9.99", data.total().amount().value());
ASSERT_TRUE(data.hasOptionId());
EXPECT_EQ("payment-app-id", data.optionId());
ASSERT_TRUE(data.hasOrigin());
EXPECT_EQ("https://example.com", data.origin());
}
} // namespace
} // namespace blink