summaryrefslogtreecommitdiffstats
path: root/browser/components/payments/test/mochitest/test_accepted_cards.html
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/payments/test/mochitest/test_accepted_cards.html')
-rw-r--r--browser/components/payments/test/mochitest/test_accepted_cards.html111
1 files changed, 111 insertions, 0 deletions
diff --git a/browser/components/payments/test/mochitest/test_accepted_cards.html b/browser/components/payments/test/mochitest/test_accepted_cards.html
new file mode 100644
index 0000000000..8e1da1bf3c
--- /dev/null
+++ b/browser/components/payments/test/mochitest/test_accepted_cards.html
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+Test the accepted-cards element
+-->
+<head>
+ <meta charset="utf-8">
+ <title>Test the accepted-cards element</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="/tests/SimpleTest/EventUtils.js"></script>
+ <script src="sinon-7.2.7.js"></script>
+ <script src="payments_common.js"></script>
+ <script src="../../res/unprivileged-fallbacks.js"></script>
+
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <link rel="stylesheet" type="text/css" href="../../res/paymentRequest.css"/>
+ <link rel="stylesheet" type="text/css" href="../../res/components/accepted-cards.css"/>
+</head>
+<body>
+ <p id="display">
+ <accepted-cards label="Accepted:"></accepted-cards>
+ </p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+</pre>
+<script type="module">
+/** Test the accepted-cards component **/
+
+/* global sinon, PaymentDialogUtils */
+
+import "../../res/components/accepted-cards.js";
+import {requestStore} from "../../res/mixins/PaymentStateSubscriberMixin.js";
+let emptyState = requestStore.getState();
+let acceptedElem = document.querySelector("accepted-cards");
+let allNetworks = PaymentDialogUtils.getCreditCardNetworks();
+
+add_task(async function test_reConnected() {
+ let itemsCount = acceptedElem.querySelectorAll(".accepted-cards-item").length;
+ is(itemsCount, allNetworks.length, "Same number of items as there are supported networks");
+
+ let container = acceptedElem.parentNode;
+ let removed = container.removeChild(acceptedElem);
+ container.appendChild(removed);
+ let newItemsCount = acceptedElem.querySelectorAll(".accepted-cards-item").length;
+ is(itemsCount, newItemsCount, "Number of items doesnt changed when re-connected");
+});
+
+add_task(async function test_someAccepted() {
+ let supportedNetworks = ["discover", "amex"];
+ let paymentMethods = [{
+ supportedMethods: "basic-card",
+ data: {
+ supportedNetworks,
+ },
+ }];
+ requestStore.setState({
+ request: Object.assign({}, emptyState.request, {
+ paymentMethods,
+ }),
+ });
+ await asyncElementRendered();
+
+ let showingItems = acceptedElem.querySelectorAll(".accepted-cards-item:not([hidden])");
+ is(showingItems.length, 2,
+ "Expected 2 items to be showing when 2 supportedNetworks are indicated");
+ for (let network of allNetworks) {
+ if (supportedNetworks.includes(network)) {
+ ok(acceptedElem.querySelector(`[data-network-id='${network}']:not([hidden])`),
+ `Item for the ${network} network expected to be visible`);
+ } else {
+ ok(acceptedElem.querySelector(`[data-network-id='${network}'][hidden]`),
+ `Item for the ${network} network expected to be hidden`);
+ }
+ }
+});
+
+add_task(async function test_officialBranding() {
+ // verify we get the expected result when isOfficialBranding returns true
+ sinon.stub(PaymentDialogUtils, "isOfficialBranding").callsFake(() => { return true; });
+
+ let container = acceptedElem.parentNode;
+ let removed = container.removeChild(acceptedElem);
+ container.appendChild(removed);
+
+ ok(PaymentDialogUtils.isOfficialBranding.calledOnce,
+ "isOfficialBranding was called");
+ ok(acceptedElem.classList.contains("branded"),
+ "The branded class is added when isOfficialBranding returns true");
+ PaymentDialogUtils.isOfficialBranding.restore();
+
+ // verify we get the expected result when isOfficialBranding returns false
+ sinon.stub(PaymentDialogUtils, "isOfficialBranding").callsFake(() => { return false; });
+
+ // the branded class is toggled in the 'connectedCallback',
+ // so remove and re-add the element to re-evaluate branded-ness
+ removed = container.removeChild(acceptedElem);
+ container.appendChild(removed);
+
+ ok(PaymentDialogUtils.isOfficialBranding.calledOnce,
+ "isOfficialBranding was called");
+ ok(!acceptedElem.classList.contains("branded"),
+ "The branded class is removed when isOfficialBranding returns false");
+ PaymentDialogUtils.isOfficialBranding.restore();
+});
+
+</script>
+
+</body>
+</html>