<!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) {
  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: 'basic-card',
    capabilities: {supportedNetworks: ['mir'], supportedTypes: ['prepaid']},
  });
  runTests();
}

function runTests() {
  promise_test(async t => {
    const response = await new PaymentRequest(
      [
        {supportedMethods: 'basic-card', data: {supportedTypes: ['prepaid']}},
        {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: 'basic-card',
            data: {supportedNetworks: ['mir']},
            total: {
              label: 'MIR total',
              amount: {currency: 'USD', value: '0.0099'},
            },
            additionalDisplayItems: [
              {label: 'Item 3', amount: {currency: 'GBP', value: '-0.0001'}},
            ],
          },
          {
            supportedMethods: 'basic-card',
            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: {supportedTypes: ['prepaid']},
            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, 'basic-card');
    assert_array_equals(response.details.billingAddress.addressLine, [
      '1875 Explorer St #1000',
    ]);
    assert_equals(response.details.billingAddress.city, 'Reston');
    assert_equals(response.details.billingAddress.country, 'US');
    assert_equals(response.details.billingAddress.dependentLocality, '');
    assert_equals(response.details.billingAddress.languageCode, '');
    assert_equals(response.details.billingAddress.organization, 'Google');
    assert_equals(response.details.billingAddress.phone, '+15555555555');
    assert_equals(response.details.billingAddress.postalCode, '20190');
    assert_equals(response.details.billingAddress.recipient, 'Jon Doe');
    assert_equals(response.details.billingAddress.region, 'VA');
    assert_equals(response.details.billingAddress.sortingCode, '');
    assert_equals(response.details.cardNumber, '4111111111111111');
    assert_equals(response.details.cardSecurityCode, '123');
    assert_equals(response.details.cardholderName, 'Jon Doe');
    assert_equals(response.details.expiryMonth, '12');
    assert_equals(response.details.expiryYear, '2028');
    return promise;
  }, 'Can perform payment');
}

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