payment-request-shippingOption-attribute.https.html (3584B)
1 <!DOCTYPE html> 2 <!-- Copyright © 2017 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> 3 <meta charset="utf-8"> 4 <title>Test for PaymentRequest shippingOption attribute</title> 5 <link rel="help" href="https://w3c.github.io/payment-request/#shippingoption-attribute"> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script> 9 const validMethod = Object.freeze({ supportedMethods: "foo" }); 10 const validMethods = Object.freeze([validMethod]); 11 const validAmount = Object.freeze({ currency: "USD", value: "5.00" }); 12 const validTotal = Object.freeze({ 13 label: "label", 14 amount: validAmount, 15 }); 16 const validDetails = Object.freeze({ total: validTotal }); 17 const validShippingOption = Object.freeze({ 18 id: "valid", 19 label: "Valid shipping option", 20 amount: validAmount, 21 selected: false, 22 }); 23 24 const requestShipping = Object.freeze({ 25 requestShipping: true, 26 }); 27 28 test(() => { 29 const request = new PaymentRequest(validMethods, validDetails); 30 assert_idl_attribute(request, "shippingOption"); 31 }, "Must have a .shippingOption IDL attribute."); 32 33 test(() => { 34 const request = new PaymentRequest(validMethods, validDetails); 35 assert_equals(request.shippingOption, null, "expected null"); 36 }, ".shippingOption attribute must default to null."); 37 38 test(() => { 39 const detailsWithShippingOptions = Object.assign({}, validDetails, { 40 shippingOptions: [validShippingOption], 41 }); 42 const request = new PaymentRequest( 43 validMethods, 44 detailsWithShippingOptions, 45 requestShipping 46 ); 47 assert_equals(request.shippingOption, null, "expected null"); 48 }, "If there is a single shipping option, but selected is false, then .shippingOption must be null."); 49 50 test(() => { 51 const shippingOption2 = Object.assign({}, validShippingOption, { 52 id: "valid2", 53 }); 54 const detailsWithShippingOptions = Object.assign({}, validDetails, { 55 shippingOptions: [validShippingOption, shippingOption2], 56 }); 57 const request = new PaymentRequest( 58 validMethods, 59 detailsWithShippingOptions, 60 requestShipping 61 ); 62 assert_equals(request.shippingOption, null, "expected null"); 63 }, "If there are multiple shipping options all with `selected` set to false, then .shippingOption is null."); 64 65 test(() => { 66 const shippingOption2 = Object.assign({}, validShippingOption, { 67 id: "pass", 68 selected: true, 69 }); 70 const detailsWithShippingOptions = Object.assign({}, validDetails, { 71 shippingOptions: [shippingOption2, validShippingOption], 72 }); 73 const request = new PaymentRequest( 74 validMethods, 75 detailsWithShippingOptions, 76 requestShipping 77 ); 78 assert_equals(request.shippingOption, "pass", "expected 'pass'"); 79 }, "Given multiple shipping options, it must use the selected shipping option for .shippingOption value."); 80 81 test(() => { 82 const shippingOption1 = Object.assign({}, validShippingOption, { 83 id: "fail", 84 selected: true, 85 }); 86 const shippingOption2 = Object.assign({}, validShippingOption, { 87 id: "pass", 88 selected: true, 89 }); 90 const detailsWithShippingOptions = Object.assign({}, validDetails, { 91 shippingOptions: [shippingOption1, shippingOption2, validShippingOption], 92 }); 93 const request = new PaymentRequest( 94 validMethods, 95 detailsWithShippingOptions, 96 requestShipping 97 ); 98 assert_equals(request.shippingOption, "pass", "expected 'pass'"); 99 }, "If there are multiple of the shipping options with selected true, then .shippingOption is the last selected shipping option in order."); 100 </script>