test_payerDetails.html (3445B)
1 <!DOCTYPE HTML> 2 <meta charset="utf-8"> 3 <title>Test for PaymentResponse.prototype.onpayerdetailchange</title> 4 <link rel="stylesheet" href="/tests/SimpleTest/test.css" /> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script src="./DefaultData.js"></script> 7 <script> 8 SimpleTest.waitForExplicitFinish(); 9 10 const gUrl = SimpleTest.getTestFileURL("PayerDetailsChromeScript.js"); 11 const gScript = SpecialPowers.loadChromeScript(gUrl); 12 13 function okTester(result) { 14 return message => ok(result, message); 15 } 16 const passListener = okTester(true); 17 const failListener = okTester(false); 18 19 gScript.addMessageListener("test-fail", failListener); 20 gScript.addMessageListener("test-pass", passListener); 21 22 function sendOnce(message) { 23 return data => { 24 return new Promise(resolve => { 25 const doneMsg = `${message}-complete`; 26 gScript.addMessageListener(doneMsg, function listener() { 27 gScript.removeMessageListener(doneMsg, listener); 28 resolve(); 29 }); 30 gScript.sendAsyncMessage(message, data); 31 }); 32 }; 33 } 34 const sendTearDown = sendOnce("teardown"); 35 36 async function loopTest(iterations) { 37 const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput( 38 true 39 ); 40 const options = { 41 requestPayerName: true, 42 requestPayerEmail: true, 43 requestPayerPhone: true, 44 } 45 const request = new PaymentRequest(defaultMethods, defaultDetails, options); 46 const response = await request.show(); 47 is(response.payerName, "", ".payerName must initially be ''"); 48 is(response.payerEmail, "", ".payerEmail must initially be ''"); 49 is(response.payerPhone, "", ".payerPhone must initially be ''"); 50 for (let i = 0; i < iterations; i++) { 51 const payer = { 52 name: `test name ${i}`, 53 phone: `test phone ${i}`, 54 email: `test email ${i}`, 55 } 56 57 // Capture the event to firing 58 const eventPromise = new Promise(resolve => { 59 response.onpayerdetailchange = resolve; 60 }); 61 const retryPromise = response.retry({ 62 error: "retry-fire-payerdetaichangeevent", 63 payer 64 }); 65 const event = await eventPromise; 66 67 // Check things got updated 68 is(response.payerName, payer.name, `.payerName must be "${payer.name}"`); 69 is(response.payerEmail, payer.email, `.payerEmail must be "${payer.email}"`); 70 is(response.payerPhone, payer.phone, `.payerPhone must be "${payer.phone}"`); 71 72 // Finally, let's do an updateWith() 73 event.updateWith({ error: "update-with", payerErrors: payer, ...defaultDetails }); 74 75 await retryPromise; 76 } 77 78 await response.complete("success"); 79 handler.destruct(); 80 } 81 82 async function teardown() { 83 await sendTearDown(); 84 gScript.removeMessageListener("test-fail", failListener); 85 gScript.removeMessageListener("test-pass", passListener); 86 gScript.destroy(); 87 SimpleTest.finish(); 88 } 89 90 async function runTests() { 91 try { 92 await loopTest(5); // lets go around 5 times 93 } catch (err) { 94 ok(false, `Unexpected error: ${err}.`); 95 } finally { 96 await teardown(); 97 } 98 } 99 100 window.addEventListener("load", () => { 101 const prefs = [["dom.payments.request.enabled", true]]; 102 SpecialPowers.pushPrefEnv({ set: prefs }, runTests); 103 }); 104 </script> 105 106 <body> 107 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1472026">Mozilla Bug 1472026</a>