blob: c5b68b5c2ca7b5546087ec6f200107bf133752a3 [file] [log] [blame]
// Copyright 2017 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 "components/payments/core/payment_item.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace payments {
// Tests the success case when populating a PaymentItem from a dictionary.
TEST(PaymentRequestTest, PaymentItemFromDictionaryValueSuccess) {
PaymentItem expected;
expected.label = "Payment Total";
expected.amount->currency = "NZD";
expected.amount->value = "2,242,093.00";
base::DictionaryValue item_dict;
item_dict.SetString("label", "Payment Total");
auto amount_dict = std::make_unique<base::DictionaryValue>();
amount_dict->SetString("currency", "NZD");
amount_dict->SetString("value", "2,242,093.00");
item_dict.Set("amount", std::move(amount_dict));
PaymentItem actual;
EXPECT_TRUE(actual.FromDictionaryValue(item_dict));
EXPECT_EQ(expected, actual);
}
// Tests the failure case when populating a PaymentItem from a dictionary.
TEST(PaymentRequestTest, PaymentItemFromDictionaryValueFailure) {
// Both a label and an amount are required.
PaymentItem actual;
base::DictionaryValue item_dict;
EXPECT_FALSE(actual.FromDictionaryValue(item_dict));
item_dict.SetString("label", "Payment Total");
EXPECT_FALSE(actual.FromDictionaryValue(item_dict));
// Even with both present, the label must be a string.
auto amount_dict = std::make_unique<base::DictionaryValue>();
amount_dict->SetString("currency", "NZD");
amount_dict->SetString("value", "2,242,093.00");
item_dict.Set("amount", std::move(amount_dict));
item_dict.SetInteger("label", 42);
EXPECT_FALSE(actual.FromDictionaryValue(item_dict));
}
// Tests that two payment item objects are not equal if their property values
// differ or one is missing a value present in the other, and equal otherwise.
// Doesn't test all properties of child objects, relying instead on their
// respective tests.
TEST(PaymentRequestTest, PaymentItemEquality) {
PaymentItem item1;
PaymentItem item2;
EXPECT_EQ(item1, item2);
item1.label = "Subtotal";
EXPECT_NE(item1, item2);
item2.label = "Total";
EXPECT_NE(item1, item2);
item2.label = "Subtotal";
EXPECT_EQ(item1, item2);
item1.amount->value = "104.34";
EXPECT_NE(item1, item2);
item2.amount->value = "104";
EXPECT_NE(item1, item2);
item2.amount->value = "104.34";
EXPECT_EQ(item1, item2);
item1.pending = true;
EXPECT_NE(item1, item2);
item2.pending = true;
EXPECT_EQ(item1, item2);
}
// Tests that serializing a default PaymentItem yields the expected result.
TEST(PaymentRequestTest, EmptyPaymentItemDictionary) {
base::DictionaryValue expected_value;
expected_value.SetString("label", "");
std::unique_ptr<base::DictionaryValue> amount_dict =
std::make_unique<base::DictionaryValue>();
amount_dict->SetString("currency", "");
amount_dict->SetString("value", "");
expected_value.SetDictionary("amount", std::move(amount_dict));
expected_value.SetBoolean("pending", false);
PaymentItem payment_item;
EXPECT_TRUE(expected_value.Equals(payment_item.ToDictionaryValue().get()));
}
// Tests that serializing a populated PaymentItem yields the expected result.
TEST(PaymentRequestTest, PopulatedPaymentItemDictionary) {
base::DictionaryValue expected_value;
expected_value.SetString("label", "Payment Total");
std::unique_ptr<base::DictionaryValue> amount_dict =
std::make_unique<base::DictionaryValue>();
amount_dict->SetString("currency", "NZD");
amount_dict->SetString("value", "2,242,093.00");
expected_value.SetDictionary("amount", std::move(amount_dict));
expected_value.SetBoolean("pending", true);
PaymentItem payment_item;
payment_item.label = "Payment Total";
payment_item.amount->currency = "NZD";
payment_item.amount->value = "2,242,093.00";
payment_item.pending = true;
EXPECT_TRUE(expected_value.Equals(payment_item.ToDictionaryValue().get()));
}
} // namespace payments