language-tests.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. const assert = require('assert');
  2. const sinon = require('sinon');
  3. const proxyquire = require('proxyquire').noCallThru();
  4. const config = {
  5. l10n_dev: false // prod configuration
  6. };
  7. const pkg = {
  8. availableLanguages: ['en-US', 'fr', 'it', 'es-ES']
  9. };
  10. function request(acceptLang) {
  11. return {
  12. headers: {
  13. 'accept-language': acceptLang
  14. }
  15. };
  16. }
  17. const langMiddleware = proxyquire('../../server/middleware/language', {
  18. '../config': config,
  19. '../../package.json': pkg
  20. });
  21. describe('Language Middleware', function() {
  22. it('defaults to en-US when no header is present', function() {
  23. const req = request();
  24. const next = sinon.stub();
  25. langMiddleware(req, null, next);
  26. assert.equal(req.language, 'en-US');
  27. sinon.assert.calledOnce(next);
  28. });
  29. it('sets req.language to en-US when accept-language > 255 chars', function() {
  30. const accept = Array(257).join('a');
  31. assert.equal(accept.length, 256);
  32. const req = request(accept);
  33. const next = sinon.stub();
  34. langMiddleware(req, null, next);
  35. assert.equal(req.language, 'en-US');
  36. sinon.assert.calledOnce(next);
  37. });
  38. it('defaults to en-US when no accept-language is available', function() {
  39. const req = request('fa,cs,ja');
  40. const next = sinon.stub();
  41. langMiddleware(req, null, next);
  42. assert.equal(req.language, 'en-US');
  43. sinon.assert.calledOnce(next);
  44. });
  45. it('prefers higher q values', function() {
  46. const req = request('fa;q=0.5, it;q=0.9');
  47. const next = sinon.stub();
  48. langMiddleware(req, null, next);
  49. assert.equal(req.language, 'it');
  50. sinon.assert.calledOnce(next);
  51. });
  52. it('uses likely subtags', function() {
  53. const req = request('es-MX');
  54. const next = sinon.stub();
  55. langMiddleware(req, null, next);
  56. assert.equal(req.language, 'es-ES');
  57. sinon.assert.calledOn(next);
  58. });
  59. });