tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_retryPayment.html (11474B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=1435161
      5 -->
      6 <head>
      7  <meta charset="utf-8">
      8  <title>Test for retry PaymentRequest</title>
      9  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     10  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     11  <script type="application/javascript" src="DefaultData.js"></script>
     12  <script type="application/javascript">
     13 
     14  "use strict";
     15  SimpleTest.waitForExplicitFinish();
     16 
     17  const gUrl = SimpleTest.getTestFileURL('RetryPaymentChromeScript.js');
     18  const gScript = SpecialPowers.loadChromeScript(gUrl);
     19 
     20  function testFailHandler(message) {
     21    ok(false, message);
     22  }
     23  function testPassHandler(message) {
     24    ok(true, message);
     25  }
     26  gScript.addMessageListener("test-fail", testFailHandler);
     27  gScript.addMessageListener("test-pass", testPassHandler);
     28 
     29  async function requestChromeAction(action, params) {
     30    gScript.sendAsyncMessage(action, params);
     31    await new Promise(resolve => {
     32      gScript.addMessageListener(`${action}-complete`, function completeListener() {
     33        gScript.removeMessageListener(`${action}-complete`, completeListener);
     34        resolve();
     35      });
     36    });
     37  }
     38 
     39  const validationErrors = {
     40    error: "error",
     41    shippingAddress: {
     42      addressLine: "addressLine error",
     43      city: "city error",
     44      country: "country error",
     45      dependentLocality: "dependentLocality error",
     46      organization: "organization error",
     47      phone: "phone error",
     48      postalCode: "postalCode error",
     49      recipient: "recipient error",
     50      region: "region error",
     51      regionCode: "regionCode error",
     52      sortingCode: "sortingCode error",
     53    },
     54    payer: {
     55      name: "name error",
     56      email: "email error",
     57      phone: "phone error",
     58    },
     59    paymentMethod: {
     60      account: "method account error",
     61      password: "method password error",
     62    },
     63  };
     64 
     65  const options = {
     66    requestPayerName: true,
     67    requestPayerEmail: true,
     68    requestPayerPhone: true,
     69    requestShipping: true,
     70    shippingType: "shipping"
     71  };
     72 
     73  function checkShowResponse(testName, payResponse) {
     74    const { payerName, payerEmail, payerPhone } = payResponse.toJSON();
     75    is(
     76      payerName,
     77      "Bill A. Pacheco",
     78      `${testName}: Expected 'Bill A. Pacheco' on payerName, but got '${payerName}' after show PaymentRequest`
     79    );
     80    is(
     81      payerEmail,
     82      "",
     83      `${testName}: Expected '' on payerEmail, but got '${payerEmail}' after show PaymentRequest`
     84    );
     85    is(
     86      payerPhone,
     87      "",
     88      `${testName}: Expected '' on payerPhone, but got '${payerPhone}' after show PaymentRequest`
     89    );
     90  }
     91 
     92  function checkRetryResponse(testName, payResponse) {
     93    const { payerName, payerEmail, payerPhone } = payResponse.toJSON();
     94    is(
     95      payerName,
     96      "Bill A. Pacheco",
     97      `${testName}: Expected 'Bill A. Pacheco' on payerName, but got '${payerName}' after retry PaymentRequest`
     98    );
     99    is(
    100      payerEmail,
    101      "bpacheco@test.org",
    102      `${testName} : Expected 'bpacheco@test.org' on payerEmail, but got '${payerEmail}' after retry PaymentRequest`
    103    );
    104    is(
    105      payerPhone,
    106      "+123456789",
    107      `${testName} : Expected '+123456789' on payerPhone, but got '${payerPhone}' after retry PaymentRequest`
    108    );
    109  }
    110 
    111  function unexpectedErrMsg(testName, errName, timing) {
    112    return `${testName}: Unexpected error(${errName}) when ${timing} the PaymentRequest.`;
    113  }
    114 
    115  function expectedErrMsg(testName, expectedErr, errName, timing) {
    116    return `${testName}: Expected '${expectedErr}' when ${timing} PaymentResponse, but got '${errName}'.`;
    117  }
    118 
    119  async function testRetryAfterComplete() {
    120    const testName = "testRetryAfterComplete";
    121    await requestChromeAction("start-test", testName);
    122    const payRequest = new PaymentRequest(defaultMethods, defaultDetails, options);
    123    ok(payRequest, testName + ": failed to create PaymentRequest.");
    124    if (!payRequest) {
    125      await requestChromeAction("finish-test");
    126      return;
    127    }
    128    const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
    129    let payResponse;
    130    try {
    131      payResponse = await payRequest.show();
    132      await checkShowResponse(testName, payResponse);
    133      handler.destruct();
    134    } catch(err) {
    135      ok(false, unexpectedErrMsg(testName, err.Name, "showing"));
    136      await requestChromeAction("finish-test");
    137      handler.destruct();
    138      return;
    139    }
    140    try {
    141      await payResponse.complete("success");
    142    } catch(err) {
    143      let errName = err.Name;
    144      ok(false, unexpectedErrMsg(testName, err.Name, "completing"));
    145      await requestChromeAction("finish-test");
    146      return;
    147    }
    148    try {
    149      await payResponse.retry(validationErrors);
    150      ok(false, `${testName}: Unexpected success when retry the PaymentResponse.`);
    151    } catch(err) {
    152      is(err.name,
    153         "InvalidStateError",
    154         expectedErrMsg(testName, "InvalidStateError", err.name, "retrying"));
    155    }
    156    await requestChromeAction("finish-test");
    157  }
    158 
    159  async function testRetryAfterRetry() {
    160    const testName = "testRetryAfterRetry";
    161    await requestChromeAction("start-test", testName);
    162    const payRequest = new PaymentRequest(defaultMethods, defaultDetails, options);
    163    ok(payRequest, testName + ": failed to create PaymentRequest.");
    164    if (!payRequest) {
    165      await requestChromeAction("finish-test");
    166      return;
    167    }
    168    const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
    169    let payResponse;
    170    try {
    171      payResponse = await payRequest.show();
    172      await checkShowResponse(testName, payResponse);
    173      handler.destruct();
    174    } catch(err) {
    175      ok(false, unexpectedErrMsg(testName, err.name, "showing"));
    176      await requestChromeAction("finish-test");
    177      handler.destruct();
    178      return;
    179    }
    180    let retryPromise;
    181    try {
    182      retryPromise = payResponse.retry(validationErrors);
    183      await payResponse.retry(validationErrors);
    184      ok(false, `${testName}: Unexpected success when retry the PaymentResponse.`);
    185      await requestChromeAction("finish-test");
    186      return;
    187    } catch(err) {
    188      is(err.name,
    189         "InvalidStateError",
    190         expectedErrMsg(testName, "InvalidStateError", err.name, "retrying"));
    191    }
    192    try {
    193      await retryPromise;
    194      await payResponse.complete("success");
    195    } catch(err) {
    196      ok(false, unexpectedErrMsg(testName, err.name, "completing"));
    197      await requestChromeAction("finish-test");
    198      return;
    199    }
    200    await requestChromeAction("finish-test");
    201  }
    202 
    203  async function testRetryWithEmptyErrors() {
    204    const testName = "testRetryWithEmptyErrors";
    205    await requestChromeAction("start-test", testName);
    206    const payRequest = new PaymentRequest(defaultMethods, defaultDetails, options);
    207    ok(payRequest, testName + ": failed to create PaymentRequest.");
    208    if (!payRequest) {
    209      requestChromeAction("finish-test");
    210      return;
    211    }
    212    const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
    213    let payResponse;
    214    try {
    215      payResponse = await payRequest.show();
    216      await checkShowResponse(testName, payResponse);
    217      handler.destruct();
    218    } catch(err) {
    219      ok(false, unexpectedErrMsg(testName, err.name, "showing"));
    220      await requestChromeAction("finish-test");
    221      handler.destruct();
    222      return;
    223    }
    224    try {
    225      await payResponse.retry();
    226      ok(false, `${testName}: Unexpected success when retry the PaymentResponse.`);
    227      await requestChromeAction("finish-test");
    228      return;
    229    } catch(err) {
    230      is(err.name,
    231         "AbortError",
    232         expectedErrMsg(testName, "AbortError", err.name, "retrying"));
    233    }
    234    try {
    235      await payResponse.complete("success");
    236    } catch(err) {
    237      ok(false, unexpectedErrMsg(testName, err.name, "completing"));
    238      await requestChromeAction("finish-test");
    239      return;
    240    }
    241    await requestChromeAction("finish-test");
    242  }
    243 
    244  async function testRetry() {
    245    const testName = "testRetry";
    246    await requestChromeAction("start-test", testName);
    247    const payRequest = new PaymentRequest(defaultMethods, defaultDetails, options);
    248    ok(payRequest, testName + ": failed to create PaymentRequest.");
    249    if (!payRequest) {
    250      await requestChromeAction("finish-test");
    251      return;
    252    }
    253    const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
    254    let payResponse;
    255    try {
    256      payResponse = await payRequest.show();
    257      await checkShowResponse(testName, payResponse);
    258      handler.destruct();
    259    } catch(err) {
    260      ok(false, unexpectedErrMsg(testName, err.name, "showing"));
    261      await requestChromeAction("finish-test");
    262      handler.destruct();
    263      return;
    264    }
    265    try {
    266      await payResponse.retry(validationErrors);
    267      await checkRetryResponse(testName, payResponse);
    268      await payResponse.complete("success");
    269    } catch(err) {
    270      ok(false, unexpectedErrMsg(testName, err.name, "retrying"));
    271      await requestChromeAction("finish-test");
    272      return;
    273    }
    274    await requestChromeAction("finish-test");
    275  }
    276 
    277  async function testRetryAbortByUser() {
    278    const testName = "testRetryAbortByUser";
    279    await requestChromeAction("reject-retry");
    280    const payRequest = new PaymentRequest(defaultMethods, defaultDetails, options);
    281    ok(payRequest, testName + ": failed to create PaymentRequest.");
    282    if (!payRequest) {
    283      await requestChromeAction("finish-test");
    284      return;
    285    }
    286    const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
    287    let payResponse;
    288    try {
    289      payResponse = await payRequest.show();
    290      await checkShowResponse(testName, payResponse);
    291      handler.destruct();
    292    } catch(err) {
    293      ok(false, unexpectedErrMsg(testName, err.name, "showing"));
    294      handler.destruct();
    295      await requestChromeAction("finish-test");
    296      return;
    297    }
    298    try {
    299      await payResponse.retry(validationErrors);
    300      ok(false, `${testName}: Unexpected success when retry the PaymentResponse.`);
    301      await requestChromeAction("finish-test");
    302      return;
    303    } catch(err) {
    304      is(err.name,
    305         "AbortError",
    306         expectedErrMsg(testName, "AbortError", err.name, "retrying"));
    307    }
    308    await requestChromeAction("finish-test");
    309  }
    310 
    311  function teardown() {
    312    return new Promise((resolve, reject) => {
    313      gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
    314        gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
    315        gScript.removeMessageListener("test-fail", testFailHandler);
    316        gScript.removeMessageListener("test-pass", testPassHandler);
    317        gScript.destroy();
    318        SimpleTest.finish();
    319        resolve();
    320      });
    321      gScript.sendAsyncMessage("teardown");
    322    });
    323  }
    324 
    325  async function runTests() {
    326    try {
    327      await testRetryAfterComplete()
    328      await testRetryAfterRetry()
    329      await testRetryWithEmptyErrors()
    330      await testRetry()
    331      await testRetryAbortByUser()
    332      await teardown()
    333    } catch(e) {
    334      ok(false, "Unexpected error: " + e.name);
    335      SimpleTest.finish();
    336    }
    337  }
    338 
    339  window.addEventListener('load', function() {
    340    SpecialPowers.pushPrefEnv({
    341      'set': [
    342        ['dom.payments.request.enabled', true],
    343      ]
    344    }, runTests);
    345  });
    346  </script>
    347 </head>
    348 <body>
    349 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1435161">Mozilla Bug 1435161</a>
    350 </body>
    351 </html>