Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(636)

Unified Diff: components/payments/content/payment_request_spec_unittest.cc

Issue 2742813004: [Payments] Refactor into PaymentRequestState and Spec (Closed)
Patch Set: don't stop rebasin' Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/payments/content/payment_request_spec_unittest.cc
diff --git a/components/payments/content/payment_request_spec_unittest.cc b/components/payments/content/payment_request_spec_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b1230e9ead5f21b198e8bcfc4734f34630f36e93
--- /dev/null
+++ b/components/payments/content/payment_request_spec_unittest.cc
@@ -0,0 +1,212 @@
+// 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/content/payment_request_spec.h"
+
+#include <utility>
+
+#include "base/memory/weak_ptr.h"
+#include "components/payments/content/payment_request.mojom.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace payments {
+
+class PaymentRequestSpecTest : public testing::Test,
+ public PaymentRequestSpec::Observer {
+ protected:
+ ~PaymentRequestSpecTest() override {}
+
+ void OnInvalidSpecProvided() override {
+ on_invalid_spec_provided_called_ = true;
+ }
+
+ void RecreateSpecWithMethodData(
+ std::vector<payments::mojom::PaymentMethodDataPtr> method_data) {
+ spec_ = base::MakeUnique<PaymentRequestSpec>(nullptr, nullptr,
+ std::move(method_data), this);
+ }
+
+ PaymentRequestSpec* spec() { return spec_.get(); }
+ bool on_invalid_spec_provided_called() {
+ return on_invalid_spec_provided_called_;
+ }
+
+ private:
+ std::unique_ptr<PaymentRequestSpec> spec_;
+ bool on_invalid_spec_provided_called_ = false;
+};
+
+// Test that empty method data notifies observers of an invalid spec.
+TEST_F(PaymentRequestSpecTest, EmptyMethodData) {
+ std::vector<mojom::PaymentMethodDataPtr> method_data;
+ RecreateSpecWithMethodData(std::move(method_data));
+ EXPECT_TRUE(on_invalid_spec_provided_called());
+
+ // No supported card networks.
+ EXPECT_EQ(0u, spec()->supported_card_networks().size());
+}
+
+// Test that parsing supported methods (with invalid values and duplicates)
+// works as expected.
+TEST_F(PaymentRequestSpecTest, SupportedMethods) {
+ mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
+ entry->supported_methods.push_back("visa");
+ entry->supported_methods.push_back("mastercard");
+ entry->supported_methods.push_back("invalid");
+ entry->supported_methods.push_back("");
+ entry->supported_methods.push_back("visa");
+ std::vector<mojom::PaymentMethodDataPtr> method_data;
+ method_data.push_back(std::move(entry));
+
+ RecreateSpecWithMethodData(std::move(method_data));
+ EXPECT_FALSE(on_invalid_spec_provided_called());
+
+ // Only "visa" and "mastercard" remain, in order.
+ EXPECT_EQ(2u, spec()->supported_card_networks().size());
+ EXPECT_EQ("visa", spec()->supported_card_networks()[0]);
+ EXPECT_EQ("mastercard", spec()->supported_card_networks()[1]);
+}
+
+// Test that parsing supported methods in different method data entries (with
+// invalid values and duplicates) works as expected.
+TEST_F(PaymentRequestSpecTest, SupportedMethods_MultipleEntries) {
+ mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
+ entry->supported_methods.push_back("visa");
+ mojom::PaymentMethodDataPtr entry2 = mojom::PaymentMethodData::New();
+ entry2->supported_methods.push_back("mastercard");
+ mojom::PaymentMethodDataPtr entry3 = mojom::PaymentMethodData::New();
+ entry3->supported_methods.push_back("invalid");
+
+ std::vector<mojom::PaymentMethodDataPtr> method_data;
+ method_data.push_back(std::move(entry));
+ method_data.push_back(std::move(entry2));
+ method_data.push_back(std::move(entry3));
+
+ RecreateSpecWithMethodData(std::move(method_data));
+ EXPECT_FALSE(on_invalid_spec_provided_called());
+
+ // Only "visa" and "mastercard" remain, in order.
+ EXPECT_EQ(2u, spec()->supported_card_networks().size());
+ EXPECT_EQ("visa", spec()->supported_card_networks()[0]);
+ EXPECT_EQ("mastercard", spec()->supported_card_networks()[1]);
+}
+
+// Test that parsing supported methods in different method data entries fails as
+// soon as one entry doesn't specify anything in supported_methods.
+TEST_F(PaymentRequestSpecTest, SupportedMethods_MultipleEntries_OneEmpty) {
+ // First entry is valid.
+ mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
+ entry->supported_methods.push_back("visa");
+ // Empty method data entry.
+ mojom::PaymentMethodDataPtr entry2 = mojom::PaymentMethodData::New();
+ // Valid one follows the empty.
+ mojom::PaymentMethodDataPtr entry3 = mojom::PaymentMethodData::New();
+ entry3->supported_methods.push_back("mastercard");
+
+ std::vector<mojom::PaymentMethodDataPtr> method_data;
+ method_data.push_back(std::move(entry));
+ method_data.push_back(std::move(entry2));
+ method_data.push_back(std::move(entry3));
+
+ RecreateSpecWithMethodData(std::move(method_data));
+ EXPECT_TRUE(on_invalid_spec_provided_called());
+
+ // Visa was parsed, but not mastercard.
+ EXPECT_EQ(1u, spec()->supported_card_networks().size());
+ EXPECT_EQ("visa", spec()->supported_card_networks()[0]);
+}
+
+// Test that only specifying basic-card means that all are supported.
+TEST_F(PaymentRequestSpecTest, SupportedMethods_OnlyBasicCard) {
+ mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
+ entry->supported_methods.push_back("basic-card");
+ std::vector<mojom::PaymentMethodDataPtr> method_data;
+ method_data.push_back(std::move(entry));
+
+ RecreateSpecWithMethodData(std::move(method_data));
+ EXPECT_FALSE(on_invalid_spec_provided_called());
+
+ // All of the basic card networks are supported.
+ EXPECT_EQ(8u, spec()->supported_card_networks().size());
+ EXPECT_EQ("amex", spec()->supported_card_networks()[0]);
+ EXPECT_EQ("diners", spec()->supported_card_networks()[1]);
+ EXPECT_EQ("discover", spec()->supported_card_networks()[2]);
+ EXPECT_EQ("jcb", spec()->supported_card_networks()[3]);
+ EXPECT_EQ("mastercard", spec()->supported_card_networks()[4]);
+ EXPECT_EQ("mir", spec()->supported_card_networks()[5]);
+ EXPECT_EQ("unionpay", spec()->supported_card_networks()[6]);
+ EXPECT_EQ("visa", spec()->supported_card_networks()[7]);
+}
+
+// Test that specifying a method AND basic-card means that all are supported,
+// but with the method as first.
+TEST_F(PaymentRequestSpecTest, SupportedMethods_BasicCard_WithSpecificMethod) {
+ mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
+ entry->supported_methods.push_back("jcb");
+ entry->supported_methods.push_back("basic-card");
+ std::vector<mojom::PaymentMethodDataPtr> method_data;
+ method_data.push_back(std::move(entry));
+
+ RecreateSpecWithMethodData(std::move(method_data));
+ EXPECT_FALSE(on_invalid_spec_provided_called());
+
+ // All of the basic card networks are supported, but JCB is first because it
+ // was specified first.
+ EXPECT_EQ(8u, spec()->supported_card_networks().size());
+ EXPECT_EQ("jcb", spec()->supported_card_networks()[0]);
+ EXPECT_EQ("amex", spec()->supported_card_networks()[1]);
+ EXPECT_EQ("diners", spec()->supported_card_networks()[2]);
+ EXPECT_EQ("discover", spec()->supported_card_networks()[3]);
+ EXPECT_EQ("mastercard", spec()->supported_card_networks()[4]);
+ EXPECT_EQ("mir", spec()->supported_card_networks()[5]);
+ EXPECT_EQ("unionpay", spec()->supported_card_networks()[6]);
+ EXPECT_EQ("visa", spec()->supported_card_networks()[7]);
+}
+
+// Test that specifying basic-card with a supported network (with previous
+// supported methods) will work as expected
+TEST_F(PaymentRequestSpecTest, SupportedMethods_BasicCard_Overlap) {
+ mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
+ entry->supported_methods.push_back("mastercard");
+ entry->supported_methods.push_back("visa");
+ // Visa and mastercard are repeated, but in reverse order.
+ mojom::PaymentMethodDataPtr entry2 = mojom::PaymentMethodData::New();
+ entry2->supported_methods.push_back("basic-card");
+ entry2->supported_networks.push_back(mojom::BasicCardNetwork::VISA);
+ entry2->supported_networks.push_back(mojom::BasicCardNetwork::MASTERCARD);
+ entry2->supported_networks.push_back(mojom::BasicCardNetwork::UNIONPAY);
+ std::vector<mojom::PaymentMethodDataPtr> method_data;
+ method_data.push_back(std::move(entry));
+ method_data.push_back(std::move(entry2));
+
+ RecreateSpecWithMethodData(std::move(method_data));
+ EXPECT_FALSE(on_invalid_spec_provided_called());
+
+ EXPECT_EQ(3u, spec()->supported_card_networks().size());
+ EXPECT_EQ("mastercard", spec()->supported_card_networks()[0]);
+ EXPECT_EQ("visa", spec()->supported_card_networks()[1]);
+ EXPECT_EQ("unionpay", spec()->supported_card_networks()[2]);
+}
+
+// Test that specifying basic-card with supported networks after specifying
+// some methods
+TEST_F(PaymentRequestSpecTest,
+ SupportedMethods_BasicCard_WithSupportedNetworks) {
+ mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
+ entry->supported_methods.push_back("basic-card");
+ entry->supported_networks.push_back(mojom::BasicCardNetwork::VISA);
+ entry->supported_networks.push_back(mojom::BasicCardNetwork::UNIONPAY);
+ std::vector<mojom::PaymentMethodDataPtr> method_data;
+ method_data.push_back(std::move(entry));
+
+ RecreateSpecWithMethodData(std::move(method_data));
+ EXPECT_FALSE(on_invalid_spec_provided_called());
+
+ // Only the specified networks are supported.
+ EXPECT_EQ(2u, spec()->supported_card_networks().size());
+ EXPECT_EQ("visa", spec()->supported_card_networks()[0]);
+ EXPECT_EQ("unionpay", spec()->supported_card_networks()[1]);
+}
+
+} // namespace payments
« no previous file with comments | « components/payments/content/payment_request_spec.cc ('k') | components/payments/content/payment_request_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698