<!DOCTYPE html>
<!--  Copyright © 2017 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang).  -->
<!--  Copyright (C) 2017 Apple Inc. All rights reserved.  -->
<!-- FIXME: Upstream this test to web-platform-tests/payment-request/. -->
<meta charset="utf-8">
<title>Test for PaymentRequest shippingOption attribute</title>
<link rel="help" href="https://w3c.github.io/payment-request/#shippingoption-attribute">
<link rel="help" href="https://w3c.github.io/payment-request/#onshippingoptionchange-attribute">
<script src="/js-test-resources/ui-helper.js"></script>
<script src="/resources/payment-request.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
setup({ explicit_done: true, explicit_timeout: true });
const applePay = Object.freeze({
    supportedMethods: "https://apple.com/apple-pay",
    data: {
        version: 2,
        merchantIdentifier: '',
        merchantCapabilities: ['supports3DS'],
        supportedNetworks: ['visa', 'masterCard'],
        countryCode: 'US',
    },
});
const validMethods = Object.freeze([applePay]);
const validAmount = Object.freeze({ currency: "USD", value: "5.00" });
const validTotal = Object.freeze({
  label: "label",
  amount: validAmount,
});
const validDetails = Object.freeze({ total: validTotal });

const validShippingOption1 = Object.freeze({
  id: "valid-1",
  label: "PICK ME!",
  amount: validAmount,
  selected: false,
});

const validShippingOption2 = Object.freeze({
  id: "initially-selected",
  label: "Valid shipping option 2",
  amount: validAmount,
  selected: true,
});

const requestShipping = Object.freeze({
  requestShipping: true,
});

function testShippingOptionChanged() {
  user_activation_test(async t => {
    const detailsWithShippingOptions = Object.assign({}, validDetails, {
      shippingOptions: [validShippingOption1, validShippingOption2],
    });
    const request = new PaymentRequest(
      validMethods,
      detailsWithShippingOptions,
      requestShipping
    );
    request.onmerchantvalidation = event => {
        event.complete({ });
        internals.mockPaymentCoordinator.changeShippingOption("valid-1");
    };
    assert_equals(
      request.shippingOption,
      "initially-selected",
      "Must be 'initially-selected', as the selected member is true"
    );
    const listenerPromise = new Promise(resolve => {
      request.addEventListener("shippingoptionchange", () => {
        resolve(request.shippingOption);
      });
    });
    const handlerPromise = new Promise(resolve => {
      request.onshippingoptionchange = () => {
        resolve(request.shippingOption);
      };
    });
    request.show().catch(err => err);

    const results = await Promise.all([listenerPromise, handlerPromise]);
    assert_true(
      results.every(result => result === "valid-1"),
      "Expected valid-1 as the shippingOption"
    );
    await request.abort();
  });
  done();
}
testShippingOptionChanged();
</script>
