summaryrefslogtreecommitdiffstats
path: root/browser/components/payments/test/mochitest/test_accepted_cards.html
blob: 8e1da1bf3c09c865a23805131c3156180e59fc4b (plain)
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
<!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>