background-step9-paypal-sms.test.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. const test = require('node:test');
  2. const assert = require('node:assert/strict');
  3. const fs = require('node:fs');
  4. function loadStep14() {
  5. const source = fs.readFileSync('background/steps/fill-paypal-payment.js', 'utf8');
  6. const scope = {};
  7. new Function('self', `${source}; return self.MultiPageBackgroundStep14;`)(scope);
  8. return scope.MultiPageBackgroundStep14;
  9. }
  10. test('step 9 passes configured PayPal phone and sms api to content script', async () => {
  11. const api = loadStep14();
  12. let sentMessage = null;
  13. const executor = api.createStep14Executor({
  14. addLog: async () => {},
  15. fetchCheckoutAddress: async () => ({
  16. street: '1 Main St',
  17. city: 'New York',
  18. state: 'New York',
  19. zip: '10001',
  20. }),
  21. generateRandomEmail: () => 'checkout@example.com',
  22. sendToContentScriptResilient: async (_source, message) => {
  23. sentMessage = message;
  24. },
  25. });
  26. await executor.executeStep14({
  27. paypalPhone: '+15822201173',
  28. paypalSmsApiUrl: 'http://a.62-us.com/api/get_sms?key=test',
  29. });
  30. assert.equal(sentMessage.step, 9);
  31. assert.equal(sentMessage.payload.phone, '5822201173');
  32. assert.equal(sentMessage.payload.paypalPhone, '+15822201173');
  33. assert.equal(sentMessage.payload.paypalSmsApiUrl, 'http://a.62-us.com/api/get_sms?key=test');
  34. const card = sentMessage.payload.card;
  35. assert.equal(card.Credit_Card_Type, 'Visa');
  36. assert.match(card.Credit_Card_Number, /^4\d{15}$/);
  37. assert.equal(isLuhnValid(card.Credit_Card_Number), true);
  38. assert.match(card.Expires, /^(0[1-9]|1[0-2])\/\d{2}$/);
  39. assert.match(card.CVV2, /^\d{3}$/);
  40. });
  41. function isLuhnValid(value) {
  42. let sum = 0;
  43. let shouldDouble = false;
  44. for (let index = String(value).length - 1; index >= 0; index -= 1) {
  45. let digit = Number(value[index]);
  46. if (!Number.isInteger(digit)) return false;
  47. if (shouldDouble) {
  48. digit *= 2;
  49. if (digit > 9) digit -= 9;
  50. }
  51. sum += digit;
  52. shouldDouble = !shouldDouble;
  53. }
  54. return sum % 10 === 0;
  55. }