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

Side by Side Diff: third_party/WebKit/LayoutTests/payments/payment-request-interface.html

Issue 2030193002: Add 'total' field to 'PaymentDetails'. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase, address comments, and add more tests Created 4 years, 6 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 unified diff | Download patch
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <meta charset="utf-8"> 2 <meta charset="utf-8">
3 <title>Tests for PaymentRequest interface</title> 3 <title>Tests for PaymentRequest interface</title>
4 <script src="../resources/testharness.js"></script> 4 <script src="../resources/testharness.js"></script>
5 <script src="../resources/testharnessreport.js"></script> 5 <script src="../resources/testharnessreport.js"></script>
6 <script> 6 <script>
7 function substitute(originalObject, substituteKeyValuePair) { 7 function substitute(originalObject, substituteKeyValuePair) {
8 for (var key in originalObject) { 8 for (var key in originalObject) {
9 if (originalObject.hasOwnProperty(key) && substituteKeyValuePair.hasOwnP roperty(key)) { 9 if (originalObject.hasOwnProperty(key) && substituteKeyValuePair.hasOwnP roperty(key)) {
10 originalObject[key] = substituteKeyValuePair[key]; 10 originalObject[key] = substituteKeyValuePair[key];
11 } 11 }
12 } 12 }
13 } 13 }
14 14
15 function buildItem(optionalSubstituteKeyValuePair) { 15 function buildItem(optionalSubstituteKeyValuePair) {
16 var item = {'id': 'item_id', 'label': 'Item Description', 'amount': {'curren cy': 'USD', 'value': '10.00'}}; 16 var item = {'id': 'item_id', 'label': 'Item Description', 'amount': {'curren cy': 'USD', 'value': '10.00'}};
17 17
18 if (optionalSubstituteKeyValuePair) { 18 if (optionalSubstituteKeyValuePair) {
19 substitute(item, optionalSubstituteKeyValuePair); 19 substitute(item, optionalSubstituteKeyValuePair);
20 substitute(item['amount'], optionalSubstituteKeyValuePair); 20 substitute(item['amount'], optionalSubstituteKeyValuePair);
21 } 21 }
22 22
23 return item; 23 return item;
24 } 24 }
25 25
26 function buildDetails(optionalDetailName, optionalSubstituteKeyValuePair) { 26 function buildDetails(optionalDetailName, optionalSubstituteKeyValuePair) {
27 var details = {}; 27 var details = {};
28 var detailNames = ['displayItems', 'shippingOptions']; 28 var detailNames = ['total', 'displayItems', 'shippingOptions'];
29 29
30 assert_true(!optionalDetailName || detailNames.indexOf(optionalDetailName) > = 0, 'Detail name "' + optionalDetailName + '" should be either "displayItems" o r "shippingOptions".'); 30 assert_true(!optionalDetailName || detailNames.indexOf(optionalDetailName) > = 0, 'Detail name "' + optionalDetailName + '" should be either "total", "displa yItems", or "shippingOptions".');
31 31
32 for (var i in detailNames) { 32 for (var i in detailNames) {
33 if (optionalDetailName == detailNames[i]) { 33 if (optionalDetailName == detailNames[i]) {
34 details[detailNames[i]] = [buildItem(optionalSubstituteKeyValuePair) ]; 34 if (detailNames[i] == 'total') {
35 details[detailNames[i]] = buildItem(optionalSubstituteKeyValuePa ir);
36 } else {
37 details[detailNames[i]] = [buildItem(optionalSubstituteKeyValueP air)];
38 }
35 } else { 39 } else {
36 details[detailNames[i]] = [buildItem()]; 40 if (detailNames[i] == 'total') {
41 details[detailNames[i]] = buildItem();
42 } else {
43 details[detailNames[i]] = [buildItem()];
44 }
37 } 45 }
38 } 46 }
39 47
40 return details; 48 return details;
41 } 49 }
42 50
43 test(function() { 51 test(function() {
44 new PaymentRequest(['foo'], buildDetails(), {}, {}); 52 new PaymentRequest(['foo'], buildDetails(), {}, {});
45 }, 'Creating a PaymentRequest with empty parameters should not throw or crash.') ; 53 }, 'Creating a PaymentRequest with empty parameters should not throw or crash.') ;
46 54
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 var request = new PaymentRequest(['foo'], buildDetails('shippingOptions', {' id': 'standard'}), {'requestShipping': false}); 107 var request = new PaymentRequest(['foo'], buildDetails('shippingOptions', {' id': 'standard'}), {'requestShipping': false});
100 assert_equals(null, request.shippingOption); 108 assert_equals(null, request.shippingOption);
101 }, 'Shipping option identifier should be null if shipping is explicitly not requ ested.'); 109 }, 'Shipping option identifier should be null if shipping is explicitly not requ ested.');
102 110
103 test(function() { 111 test(function() {
104 var request = new PaymentRequest(['foo'], buildDetails('shippingOptions', {' id': 'standard'}), {'requestShipping': true}); 112 var request = new PaymentRequest(['foo'], buildDetails('shippingOptions', {' id': 'standard'}), {'requestShipping': true});
105 assert_equals('standard', request.shippingOption); 113 assert_equals('standard', request.shippingOption);
106 }, 'Shipping option identifier should default to the single provided option.'); 114 }, 'Shipping option identifier should default to the single provided option.');
107 115
108 test(function() { 116 test(function() {
109 var request = new PaymentRequest(['foo'], {'displayItems': [buildItem()]}, { 'requestShipping': true}); 117 var request = new PaymentRequest(['foo'], {'total': buildItem(), 'displayIte ms': [buildItem()]}, {'requestShipping': true});
110 assert_equals(null, request.shippingOption); 118 assert_equals(null, request.shippingOption);
111 }, 'Shipping option identifier should be null when no shipping options are provi ded.'); 119 }, 'Shipping option identifier should be null when no shipping options are provi ded.');
112 120
113 test(function() { 121 test(function() {
114 var request = new PaymentRequest(['foo'], {'displayItems': [buildItem()], 's hippingOptions': [buildItem({'id': 'standard'}), buildItem({'id': 'express'})]}, {'requestShipping': true}); 122 var request = new PaymentRequest(['foo'], {'total': buildItem(), 'displayIte ms': [buildItem()], 'shippingOptions': [buildItem({'id': 'standard'}), buildItem ({'id': 'express'})]}, {'requestShipping': true});
115 assert_equals(null, request.shippingOption); 123 assert_equals(null, request.shippingOption);
116 }, 'Shipping option identifier should be null at first when multiple shipping op tions are provided.'); 124 }, 'Shipping option identifier should be null at first when multiple shipping op tions are provided.');
117 125
126 test(function() {
127 new PaymentRequest(['foo'], {'total': buildItem(), 'displayItems': undefined });
128 }, 'Undefined display items should not throw.');
129
130 test(function() {
131 new PaymentRequest(['foo'], {'total': buildItem(), 'displayItems': []});
132 }, 'Empty display items should not throw.');
133
134 test(function() {
135 new PaymentRequest(['foo'], buildDetails('total', {'value': '0'}));
136 }, 'Non-negative total value should not throw.');
137
138 test(function() {
139 assert_throws(new TypeError(), function() {
140 new PaymentRequest(['foo'], buildDetails('total', {'value': '-0.01'}));
141 });
142 }, 'Negative total value should throw a TypeError.');
143
144 test(function() {
145 new PaymentRequest(['foo'], buildDetails('displayItems', {'value': '-0.01'}) );
146 }, 'Negative line item value should not throw.');
147
148 test(function() {
149 assert_throws(new TypeError(), function() {
150 new PaymentRequest(['foo'], {'displayItems': [buildItem()]});
151 });
152 }, 'Absence of total should throw TypeError.');
118 153
119 generate_tests(assert_throws, [ 154 generate_tests(assert_throws, [
120 ['PaymentRequest constructor should throw for incorrect parameter types.', n ull, function() { 155 ['PaymentRequest constructor should throw for incorrect parameter types.', n ull, function() {
121 new PaymentRequest('', '', '', '') 156 new PaymentRequest('', '', '', '')
122 }], 157 }],
123 ['PaymentRequest constructor should throw for undefined required parameters. ', null, function() { 158 ['PaymentRequest constructor should throw for undefined required parameters. ', null, function() {
124 new PaymentRequest(undefined, undefined) 159 new PaymentRequest(undefined, undefined)
125 }], 160 }],
126 ['PaymentRequest constructor should throw for null required parameter.', nul l, function() { 161 ['PaymentRequest constructor should throw for null required parameter.', nul l, function() {
127 new PaymentRequest(null, null) 162 new PaymentRequest(null, null)
128 }], 163 }],
129 ['Empty list of supported payment method identifiers should throw TypeError. ', new TypeError(), function() { 164 ['Empty list of supported payment method identifiers should throw TypeError. ', new TypeError(), function() {
130 new PaymentRequest([], buildDetails()) 165 new PaymentRequest([], buildDetails())
131 }], 166 }],
132 ['Keys in payment method specific data object should match accepted method i dentifiers.', null, function() { 167 ['Keys in payment method specific data object should match accepted method i dentifiers.', null, function() {
133 new PaymentRequest(['foo'], buildDetails(), {}, {'bar': {'gateway': 'baz '}}) 168 new PaymentRequest(['foo'], buildDetails(), {}, {'bar': {'gateway': 'baz '}})
134 }], 169 }],
135 ['Empty details should throw', null, function() { 170 ['Empty details should throw', null, function() {
136 new PaymentRequest(['foo'], {}) 171 new PaymentRequest(['foo'], {})
137 }], 172 }],
138 ['Empty items should throw', null, function() { 173 ['Null items should throw', new TypeError(), function() {
139 new PaymentRequest(['foo'], {'displayItems': []}) 174 new PaymentRequest(['foo'], {'total': buildItem(), 'displayItems': null} );
175 }],
176 ['Null shipping options should throw', new TypeError(), function() {
177 new PaymentRequest(['foo'], {'total': buildItem(), 'displayItems': [buil dItem()], 'shippingOptions': null});
140 }], 178 }],
141 ['Aborting before showing should throw.', null, function() { 179 ['Aborting before showing should throw.', null, function() {
142 new PaymentRequest(['foo'], buildDetails()).abort() 180 new PaymentRequest(['foo'], buildDetails()).abort()
143 }], 181 }],
144 182
145 // Payment method specific data should be a JSON-serializable object. 183 // Payment method specific data should be a JSON-serializable object.
146 ['Array value for payment method specific data parameter should throw', null , function() { 184 ['Array value for payment method specific data parameter should throw', null , function() {
147 new PaymentRequest(['foo'], buildDetails(), {}, []) 185 new PaymentRequest(['foo'], buildDetails(), {}, [])
148 }], 186 }],
149 ['String value for payment method specific data parameter should throw', nul l, function() { 187 ['String value for payment method specific data parameter should throw', nul l, function() {
(...skipping 13 matching lines...) Expand all
163 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': []}) 201 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': []})
164 }], 202 }],
165 ['String value for one of the payment method specific data pieces should thr ow', null, function() { 203 ['String value for one of the payment method specific data pieces should thr ow', null, function() {
166 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': 'bar'}) 204 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': 'bar'})
167 }], 205 }],
168 ['Numeric value for one of the payment method specific data pieces should th row', null, function() { 206 ['Numeric value for one of the payment method specific data pieces should th row', null, function() {
169 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': 42}) 207 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': 42})
170 }], 208 }],
171 ]); 209 ]);
172 210
173 var detailNames = ['displayItems', 'shippingOptions']; 211 var detailNames = ['total', 'displayItems', 'shippingOptions'];
174 for (var i in detailNames) { 212 for (var i in detailNames) {
175 generate_tests(assert_throws, [ 213 generate_tests(assert_throws, [
176 // Invalid currency code formats. 214 // Invalid currency code formats.
177 ['Invalid currency code US1 should throw', null, function() { 215 ['Invalid currency code US1 should throw', null, function() {
178 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currency' : 'US1'})) 216 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currency' : 'US1'}))
179 }], 217 }],
180 ['Invalid currency code US should throw', null, function() { 218 ['Invalid currency code US should throw', null, function() {
181 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currency' : 'US'})) 219 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currency' : 'US'}))
182 }], 220 }],
183 ['Invalid currency code USDO should throw', null, function() { 221 ['Invalid currency code USDO should throw', null, function() {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 }], 273 }],
236 ['Null amount should throw', null, function() { 274 ['Null amount should throw', null, function() {
237 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': n ull})) 275 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': n ull}))
238 }], 276 }],
239 ['Undefined amount should throw', null, function() { 277 ['Undefined amount should throw', null, function() {
240 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': u ndefined})) 278 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': u ndefined}))
241 }], 279 }],
242 ]); 280 ]);
243 } 281 }
244 </script> 282 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698