1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
// Copyright 2017 The Chromium Authors
// 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_shipping_option.h"
#include <memory>
#include "base/values.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace payments {
// Tests the success case when populating a PaymentShippingOption from a
// dictionary.
TEST(PaymentRequestTest, PaymentShippingOptionFromValueDictSuccess) {
PaymentShippingOption expected;
expected.id = "123";
expected.label = "Ground Shipping";
expected.amount->currency = "BRL";
expected.amount->value = "4,000.32";
expected.selected = true;
base::Value::Dict shipping_option_dict;
shipping_option_dict.Set("id", "123");
shipping_option_dict.Set("label", "Ground Shipping");
base::Value::Dict amount_dict;
amount_dict.Set("currency", "BRL");
amount_dict.Set("value", "4,000.32");
shipping_option_dict.Set("amount", std::move(amount_dict));
shipping_option_dict.Set("selected", true);
PaymentShippingOption actual;
EXPECT_TRUE(actual.FromValueDict(shipping_option_dict));
EXPECT_EQ(expected, actual);
}
// Tests the failure case when populating a PaymentShippingOption from a
// dictionary.
TEST(PaymentRequestTest, PaymentShippingOptionFromValueDictFailure) {
PaymentShippingOption expected;
expected.id = "123";
expected.label = "Ground Shipping";
expected.amount->currency = "BRL";
expected.amount->value = "4,000.32";
expected.selected = true;
PaymentShippingOption actual;
base::Value::Dict shipping_option_dict;
// Id, Label, and amount are required.
shipping_option_dict.Set("id", "123");
EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
shipping_option_dict.Set("label", "Ground Shipping");
EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
// Id must be a string.
base::Value::Dict amount_dict;
amount_dict.Set("currency", "BRL");
amount_dict.Set("value", "4,000.32");
shipping_option_dict.Set("amount", std::move(amount_dict));
shipping_option_dict.Set("id", 123);
EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
// Label must be a string.
shipping_option_dict.Set("id", "123");
shipping_option_dict.Set("label", 123);
EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
// Check for trouble with amount.
shipping_option_dict.Set("label", "123");
shipping_option_dict.Set("amount", "123.49 USD");
EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
base::Value::Dict bad_amount_dict;
shipping_option_dict.Set("amount", std::move(bad_amount_dict));
EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
}
// Tests that two shipping option 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, PaymentShippingOptionEquality) {
PaymentShippingOption shipping_option1;
PaymentShippingOption shipping_option2;
EXPECT_EQ(shipping_option1, shipping_option2);
shipping_option1.id = "a8df2";
EXPECT_NE(shipping_option1, shipping_option2);
shipping_option2.id = "k42jk";
EXPECT_NE(shipping_option1, shipping_option2);
shipping_option2.id = "a8df2";
EXPECT_EQ(shipping_option1, shipping_option2);
shipping_option1.label = "Overnight";
EXPECT_NE(shipping_option1, shipping_option2);
shipping_option2.label = "Ground";
EXPECT_NE(shipping_option1, shipping_option2);
shipping_option2.label = "Overnight";
EXPECT_EQ(shipping_option1, shipping_option2);
shipping_option1.amount->currency = "AUD";
EXPECT_NE(shipping_option1, shipping_option2);
shipping_option2.amount->currency = "HKD";
EXPECT_NE(shipping_option1, shipping_option2);
shipping_option2.amount->currency = "AUD";
EXPECT_EQ(shipping_option1, shipping_option2);
shipping_option1.selected = true;
EXPECT_NE(shipping_option1, shipping_option2);
shipping_option2.selected = true;
EXPECT_EQ(shipping_option1, shipping_option2);
}
TEST(PaymentRequestTest, Assign) {
PaymentShippingOption shipping_option1, shipping_option2;
shipping_option1.id = "abc";
shipping_option1.label = "Ground";
shipping_option1.amount.reset();
// All this should be overwritten.
shipping_option2.id = "def";
shipping_option2.label = "Air";
shipping_option2.amount = mojom::PaymentCurrencyAmount::New();
shipping_option2.amount->currency = "USD";
shipping_option2.amount->value = "50.0";
shipping_option2 = shipping_option1;
EXPECT_EQ(shipping_option2, shipping_option1);
// Also test with amount.
shipping_option1.amount = mojom::PaymentCurrencyAmount::New();
shipping_option1.amount->currency = "CAD";
shipping_option1.amount->value = "10.0";
shipping_option2 = shipping_option1;
EXPECT_EQ(shipping_option2, shipping_option1);
}
} // namespace payments
|