<!doctype html>
<meta charset=utf-8>
<title>PaymentResponse.prototype.onpayerdetailchange attribute</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src="helpers.js"></script>
<script>
function runTest(button, options, expected){
  button.disabled = true;
  promise_test(async () => {
    const response = await getPaymentResponse(options);
    const eventPromise = new Promise(resolve => {
      response.addEventListener("payerdetailchange", resolve);
    });
    const error = button.previousElementSibling.textContent.trim();
    await response.retry({ error });
    const event = await eventPromise;
    assert_true(event instanceof PaymentRequestUpdateEvent);
    for(const [prop, value] of Object.entries(expected)){
      assert_equals(response[prop], value);
    }
    await response.complete("success");
  }, button.textContent.trim());
}
</script>
<h2>Handling PaymentResponse.prototype.onpayerdetailchange events</h2>
<p>
  Each button will bring up the Payment Request UI window.
  When shown the payment sheet, use any details and hit pay.
</p>
<p>
  When asked to retry the payment:
</p>
<ol>
  <li>
    <p>
      Change payer's name to "pass".
    </p>
    <button onclick="runTest(this, { requestPayerName: true }, { payerName: 'pass' });">
      PaymentRequestUpdateEvent is dispatched when payer name changes.
    </button>
  </li>
  <li>
    <p>
      Change payer's email to "pass@pass.pass".
    </p>
    <button onclick="runTest(this, {requestPayerEmail: true}, { payerEmail: 'pass@pass.pass' });">
      PaymentRequestUpdateEvent is dispatched when payer email changes.
    </button>
  </li>
  <li>
    <p>
      Change payer's phone to "+1-800-000-0000".
    </p>
    <button onclick="runTest(this, {requestPayerPhone: true}, { payerPhone: '+1-800-000-0000' })">
      PaymentRequestUpdateEvent is dispatched when payer phone changes.
    </button>
  </li>
  <li>
    <button onclick="done();">DONE!</button>
  </li>
</ol>
<small>
  If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a>
  and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/OWNERS">owners</a>.
</small>
