| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- const { expect } = require('chai')
- const SandboxedModule = require('sandboxed-module')
- const MODULE_PATH = '../../../../app/src/infrastructure/Translations.js'
- describe('Translations', function () {
- let req, res, translations
- function runMiddlewares(cb) {
- translations.i18nMiddleware(req, res, () => {
- translations.setLangBasedOnDomainMiddleware(req, res, cb)
- })
- }
- beforeEach(function () {
- translations = SandboxedModule.require(MODULE_PATH, {
- requires: {
- '@overleaf/settings': {
- i18n: {
- escapeHTMLInVars: false,
- subdomainLang: {
- www: { lngCode: 'en', url: 'https://www.overleaf.com' },
- fr: { lngCode: 'fr', url: 'https://fr.overleaf.com' },
- da: { lngCode: 'da', url: 'https://da.overleaf.com' },
- },
- },
- },
- },
- })
- req = {
- url: '/',
- headers: {
- 'accept-language': '',
- },
- }
- res = {
- locals: {},
- getHeader: () => {},
- setHeader: () => {},
- }
- })
- describe('translate', function () {
- beforeEach(function (done) {
- runMiddlewares(done)
- })
- it('works', function () {
- expect(req.i18n.t('give_feedback')).to.equal('Give feedback')
- })
- it('has translate alias', function () {
- expect(req.i18n.translate('give_feedback')).to.equal('Give feedback')
- })
- })
- describe('interpolation', function () {
- beforeEach(function (done) {
- runMiddlewares(done)
- })
- it('works', function () {
- expect(
- req.i18n.t('please_confirm_email', {
- emailAddress: 'foo@example.com',
- })
- ).to.equal(
- 'Please confirm your email foo@example.com by clicking on the link in the confirmation email '
- )
- })
- it('handles dashes after interpolation', function () {
- // This translation string has a problematic interpolation followed by a
- // dash: `__len__-day`
- expect(
- req.i18n.t('faq_how_does_free_trial_works_answer', {
- appName: 'Overleaf',
- len: '5',
- })
- ).to.equal(
- 'You get full access to your chosen Overleaf plan during your 5-day free trial. There is no obligation to continue beyond the trial. Your card will be charged at the end of your 5 day trial unless you cancel before then. You can cancel via your subscription settings.'
- )
- })
- it('disables escaping', function () {
- expect(
- req.i18n.t('admin_user_created_message', {
- link: 'http://google.com',
- })
- ).to.equal(
- 'Created admin user, <a href="http://google.com">Log in here</a> to continue'
- )
- })
- })
- describe('setLangBasedOnDomainMiddleware', function () {
- it('should set the lang to french if the domain is fr', function (done) {
- req.headers.host = 'fr.overleaf.com'
- runMiddlewares(() => {
- expect(req.lng).to.equal('fr')
- done()
- })
- })
- describe('suggestedLanguageSubdomainConfig', function () {
- it('should set suggestedLanguageSubdomainConfig if the detected lang is different to subdomain lang', function (done) {
- req.headers['accept-language'] = 'da, en-gb;q=0.8, en;q=0.7'
- req.headers.host = 'fr.overleaf.com'
- runMiddlewares(() => {
- expect(res.locals.suggestedLanguageSubdomainConfig).to.exist
- expect(res.locals.suggestedLanguageSubdomainConfig.lngCode).to.equal(
- 'da'
- )
- done()
- })
- })
- it('should not set suggestedLanguageSubdomainConfig if the detected lang is the same as subdomain lang', function (done) {
- req.headers['accept-language'] = 'da, en-gb;q=0.8, en;q=0.7'
- req.headers.host = 'da.overleaf.com'
- runMiddlewares(() => {
- expect(res.locals.suggestedLanguageSubdomainConfig).to.not.exist
- done()
- })
- })
- })
- })
- })
|