| <!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> |