mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-10-27 19:22:55 +01:00
* wip * logout banned users, fix and refactor language library and middleware * req.locals -> res.locals * fix tests * redirect to login page
112 lines
3.0 KiB
JavaScript
112 lines
3.0 KiB
JavaScript
import {
|
|
getLanguageFromBrowser,
|
|
getLanguageFromUser,
|
|
} from '../../../../website/server/libs/language';
|
|
import {
|
|
generateReq,
|
|
} from '../../../helpers/api-unit.helper';
|
|
|
|
describe('language lib', () => {
|
|
let req;
|
|
|
|
beforeEach(() => {
|
|
req = generateReq();
|
|
});
|
|
|
|
describe('getLanguageFromUser', () => {
|
|
it('uses the user preferred language if avalaible', () => {
|
|
const user = {
|
|
preferences: {
|
|
language: 'it',
|
|
},
|
|
};
|
|
|
|
expect(getLanguageFromUser(user, req)).to.equal('it');
|
|
});
|
|
|
|
it('falls back to english if the user preferred language is not avalaible', () => {
|
|
const user = {
|
|
preferences: {
|
|
language: 'bla',
|
|
},
|
|
};
|
|
|
|
expect(getLanguageFromUser(user, req)).to.equal('en');
|
|
});
|
|
});
|
|
|
|
describe('getLanguageFromBrowser', () => {
|
|
it('uses browser specificed language', () => {
|
|
req.headers['accept-language'] = 'pt';
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('pt');
|
|
});
|
|
|
|
it('uses first language in series if browser specifies multiple', () => {
|
|
req.headers['accept-language'] = 'he, pt, it';
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('he');
|
|
});
|
|
|
|
it('skips invalid lanaguages and uses first language in series if browser specifies multiple', () => {
|
|
req.headers['accept-language'] = 'blah, he, pt, it';
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('he');
|
|
});
|
|
|
|
it('uses normal version of language if specialized locale is passed in', () => {
|
|
req.headers['accept-language'] = 'fr-CA';
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('fr');
|
|
});
|
|
|
|
it('uses normal version of language if specialized locale is passed in', () => {
|
|
req.headers['accept-language'] = 'fr-CA';
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('fr');
|
|
});
|
|
|
|
it('uses es if es is passed in', () => {
|
|
req.headers['accept-language'] = 'es';
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('es');
|
|
});
|
|
|
|
it('uses es_419 if applicable es-languages are passed in', () => {
|
|
req.headers['accept-language'] = 'es-mx';
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('es_419');
|
|
});
|
|
|
|
it('uses es_419 if multiple es languages are passed in', () => {
|
|
req.headers['accept-language'] = 'es-GT, es-MX, es-CR';
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('es_419');
|
|
});
|
|
|
|
it('zh', () => {
|
|
req.headers['accept-language'] = 'zh-TW';
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('zh_TW');
|
|
});
|
|
|
|
it('uses english if browser specified language is not compatible', () => {
|
|
req.headers['accept-language'] = 'blah';
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('en');
|
|
});
|
|
|
|
it('uses english if browser does not specify', () => {
|
|
req.headers['accept-language'] = '';
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('en');
|
|
});
|
|
|
|
it('uses english if browser does not supply an accept-language header', () => {
|
|
delete req.headers['accept-language'];
|
|
|
|
expect(getLanguageFromBrowser(req)).to.equal('en');
|
|
});
|
|
});
|
|
});
|