<!doctype html>
<meta charset="utf-8">
<title>Tests for PaymentRequestEvent</title>
<link rel="help" href="https://w3c.github.io/payment-handler/#the-paymentrequestevent">
<link rel="manifest" href="/payment-handler/basic-card.json">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="register-and-activate-service-worker.js"></script>
<p>When the payment sheet is shown, please authorize the mock payment.</p>
<script>
async function setInstrumentsAndRunTests(registration) {
  const methodName = window.location.origin + '/payment-handler/payment-app/';
  await registration.paymentManager.instruments.clear();
  await registration.paymentManager.instruments.set('instrument-key', {
    name: 'Instrument Name',
    icons: [
      {src: '/images/rgrg-256x256.png', sizes: '256x256', type: 'image/png'},
    ],
    method: methodName,
    capabilities: {supportedNetworks: ['mir']},
  });
  runTests();
}

function runTests() {
  promise_test(async t => {
    const response = await new PaymentRequest(
      [
        {supportedMethods: methodName, data: {}},
        {supportedMethods: 'interledger', data: {supportedNetworks: ['mir']}},
      ],
      {
        id: 'test-payment-request-identifier',
        total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}},
        displayItems: [
          {label: 'Item 1', amount: {currency: 'CAD', value: '0.005'}},
          {label: 'Item 2', amount: {currency: 'EUR', value: '0.005'}},
        ],
        modifiers: [
          {
            supportedMethods: methodName,
            data: {supportedNetworks: ['mir']},
            total: {
              label: 'MIR total',
              amount: {currency: 'USD', value: '0.0099'},
            },
            additionalDisplayItems: [
              {label: 'Item 3', amount: {currency: 'GBP', value: '-0.0001'}},
            ],
          },
          {
            supportedMethods: methodName,
            data: {supportedNetworks: ['visa']},
            total: {
              label: 'VISA total',
              amount: {currency: 'USD', value: '0.0098'},
            },
            additionalDisplayItems: [
              {label: 'Item 4', amount: {currency: 'CNY', value: '-0.0002'}},
            ],
          },
          {
            supportedMethods: 'interledger',
            data: {},
            total: {
              label: 'Prepaid total',
              amount: {currency: 'USD', value: '0.0097'},
            },
            additionalDisplayItems: [
              {label: 'Item 5', amount: {currency: 'JPY', value: '-0.0003'}},
            ],
          },
        ],
      },
    ).show();
    const promise = response.complete('success');
    assert_equals(response.requestId, 'test-payment-request-identifier');
    assert_equals(response.methodName, methodName);
    return promise;
  }, 'Can perform payment');
}

registerAndActiveServiceWorker(
  'app-simple.js',
  'payment-app/',
  setInstrumentsAndRunTests,
);
</script>
