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
|
<!DOCTYPE html>
<!-- Copyright © 2017 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<meta charset="utf-8">
<title>Test for PaymentRequest shippingOption attribute</title>
<link rel="help" href="https://w3c.github.io/payment-request/#shippingoption-attribute">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
const validMethod = Object.freeze({ supportedMethods: "foo" });
const validMethods = Object.freeze([validMethod]);
const validAmount = Object.freeze({ currency: "USD", value: "5.00" });
const validTotal = Object.freeze({
label: "label",
amount: validAmount,
});
const validDetails = Object.freeze({ total: validTotal });
const validShippingOption = Object.freeze({
id: "valid",
label: "Valid shipping option",
amount: validAmount,
selected: false,
});
const requestShipping = Object.freeze({
requestShipping: true,
});
test(() => {
const request = new PaymentRequest(validMethods, validDetails);
assert_idl_attribute(request, "shippingOption");
}, "Must have a .shippingOption IDL attribute.");
test(() => {
const request = new PaymentRequest(validMethods, validDetails);
assert_equals(request.shippingOption, null, "expected null");
}, ".shippingOption attribute must default to null.");
test(() => {
const detailsWithShippingOptions = Object.assign({}, validDetails, {
shippingOptions: [validShippingOption],
});
const request = new PaymentRequest(
validMethods,
detailsWithShippingOptions,
requestShipping
);
assert_equals(request.shippingOption, null, "expected null");
}, "If there is a single shipping option, but selected is false, then .shippingOption must be null.");
test(() => {
const shippingOption2 = Object.assign({}, validShippingOption, {
id: "valid2",
});
const detailsWithShippingOptions = Object.assign({}, validDetails, {
shippingOptions: [validShippingOption, shippingOption2],
});
const request = new PaymentRequest(
validMethods,
detailsWithShippingOptions,
requestShipping
);
assert_equals(request.shippingOption, null, "expected null");
}, "If there are multiple shipping options all with `selected` set to false, then .shippingOption is null.");
test(() => {
const shippingOption2 = Object.assign({}, validShippingOption, {
id: "pass",
selected: true,
});
const detailsWithShippingOptions = Object.assign({}, validDetails, {
shippingOptions: [shippingOption2, validShippingOption],
});
const request = new PaymentRequest(
validMethods,
detailsWithShippingOptions,
requestShipping
);
assert_equals(request.shippingOption, "pass", "expected 'pass'");
}, "Given multiple shipping options, it must use the selected shipping option for .shippingOption value.");
test(() => {
const shippingOption1 = Object.assign({}, validShippingOption, {
id: "fail",
selected: true,
});
const shippingOption2 = Object.assign({}, validShippingOption, {
id: "pass",
selected: true,
});
const detailsWithShippingOptions = Object.assign({}, validDetails, {
shippingOptions: [shippingOption1, shippingOption2, validShippingOption],
});
const request = new PaymentRequest(
validMethods,
detailsWithShippingOptions,
requestShipping
);
assert_equals(request.shippingOption, "pass", "expected 'pass'");
}, "If there are multiple of the shipping options with selected true, then .shippingOption is the last selected shipping option in order.");
</script>
|