langcode-endpoint.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. const { XMLHttpRequest } = require("xmlhttprequest");
  2. const jsl = require("svjsl");
  3. const settings = require("../settings");
  4. const meta = {
  5. name: "Langcode",
  6. category: "Endpoint"
  7. };
  8. const baseURL = `http://127.0.0.1:${settings.httpServer.port}`;
  9. /**
  10. * @typedef {Object} UnitTestResult
  11. * @prop {Object} meta
  12. * @prop {String} meta.name
  13. * @prop {String} meta.category
  14. * @prop {Array<String>} errors
  15. */
  16. /**
  17. * Runs this unit test
  18. * @returns {Promise<UnitTestResult>}
  19. */
  20. function run()
  21. {
  22. return new Promise((resolve, reject) => {
  23. let errors = [];
  24. let run = () => new Promise(runResolve => {
  25. let sendXHR = language => {
  26. return new Promise((xhrResolve, xhrReject) => {
  27. jsl.unused(xhrReject);
  28. let xhr = new XMLHttpRequest();
  29. xhr.open("GET", `${baseURL}/langcode/${language}`); // < set endpoint here
  30. xhr.onreadystatechange = () => {
  31. if(xhr.readyState == 4)
  32. {
  33. if(xhr.status >= 200 && xhr.status < 300)
  34. {
  35. let resp = JSON.parse(xhr.responseText);
  36. return xhrResolve({ input: language, code: resp.code || null });
  37. }
  38. else if(xhr.status == 400)
  39. return xhrResolve({ input: language, code: null });
  40. else
  41. {
  42. errors.push(`Couldn't reach endpoint - HTTP status: ${xhr.status}`);
  43. return runResolve();
  44. }
  45. }
  46. };
  47. xhr.send();
  48. });
  49. };
  50. let promises = [];
  51. let langs = [
  52. { lang: "german", expectedCode: "de" },
  53. { lang: "g3rm4n", expectedCode: "de" },
  54. { lang: "Azerbaijani", expectedCode: "az" },
  55. { lang: "Luxembourg", expectedCode: "lb" },
  56. { lang: "invalid_language_xyz", expectedCode: null }
  57. ];
  58. langs.forEach(l => {
  59. let lang = l.lang;
  60. promises.push(sendXHR(lang));
  61. });
  62. Promise.all(promises).then(vals => {
  63. vals.forEach(val => {
  64. if(typeof val == "object")
  65. {
  66. let filterRes = langs.filter(lval => lval.lang == val.input)[0];
  67. if(filterRes.expectedCode != val.code)
  68. errors.push(`Code of language "${val.input}" didn't match the expected value (expected "${filterRes.expectedCode}" but got "${val.code}")`);
  69. }
  70. });
  71. return runResolve();
  72. });
  73. });
  74. run().then(() => {
  75. if(errors.length == 0)
  76. return resolve({ meta });
  77. else
  78. return reject({ meta, errors });
  79. });
  80. });
  81. }
  82. module.exports = { meta, run };