Automatically Logout Banned Users (#12037)
* wip * logout banned users, fix and refactor language library and middleware * req.locals -> res.locals * fix tests * redirect to login page
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
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');
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -19,7 +19,7 @@ describe('analytics middleware', () => {
|
||||
next = generateNext();
|
||||
});
|
||||
|
||||
it('attaches analytics object res.locals', () => {
|
||||
it('attaches analytics object to res', () => {
|
||||
const attachAnalytics = requireAgain(pathToAnalyticsMiddleware).default;
|
||||
|
||||
attachAnalytics(req, res, next);
|
||||
|
||||
@@ -21,28 +21,11 @@ describe('cron middleware', () => {
|
||||
req;
|
||||
let user;
|
||||
|
||||
beforeEach(done => {
|
||||
beforeEach(async () => {
|
||||
res = generateRes();
|
||||
req = generateReq();
|
||||
user = new User({
|
||||
auth: {
|
||||
local: {
|
||||
username: 'username',
|
||||
lowerCaseUsername: 'username',
|
||||
email: 'email@email.email',
|
||||
salt: 'salt',
|
||||
hashed_password: 'hashed_password', // eslint-disable-line camelcase
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
user.save()
|
||||
.then(savedUser => {
|
||||
res.locals.user = savedUser;
|
||||
res.analytics = analyticsService;
|
||||
done();
|
||||
})
|
||||
.catch(done);
|
||||
user = await res.locals.user.save();
|
||||
res.analytics = analyticsService;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
|
||||
@@ -12,6 +12,9 @@ import { model as User } from '../../../../website/server/models/user';
|
||||
|
||||
const { i18n } = common;
|
||||
|
||||
// TODO some of the checks here can be simplified to simply check
|
||||
// that the right parameters are passed to the functions in libs/language
|
||||
|
||||
describe('language middleware', () => {
|
||||
describe('res.t', () => {
|
||||
let res; let req; let
|
||||
@@ -19,6 +22,8 @@ describe('language middleware', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
res = generateRes();
|
||||
// remove the defaul user
|
||||
res.locals.user = undefined;
|
||||
req = generateReq();
|
||||
next = generateNext();
|
||||
|
||||
@@ -57,6 +62,8 @@ describe('language middleware', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
res = generateRes();
|
||||
// remove the defaul user
|
||||
res.locals.user = undefined;
|
||||
req = generateReq();
|
||||
next = generateNext();
|
||||
attachTranslateFunction(req, res, next);
|
||||
@@ -88,7 +95,7 @@ describe('language middleware', () => {
|
||||
lang: 'es',
|
||||
};
|
||||
|
||||
req.locals = {
|
||||
res.locals = {
|
||||
user: {
|
||||
preferences: {
|
||||
language: 'it',
|
||||
@@ -108,7 +115,7 @@ describe('language middleware', () => {
|
||||
|
||||
context('authorized request', () => {
|
||||
it('uses the user preferred language if avalaible', () => {
|
||||
req.locals = {
|
||||
res.locals = {
|
||||
user: {
|
||||
preferences: {
|
||||
language: 'it',
|
||||
@@ -122,7 +129,7 @@ describe('language middleware', () => {
|
||||
});
|
||||
|
||||
it('falls back to english if the user preferred language is not avalaible', done => {
|
||||
req.locals = {
|
||||
res.locals = {
|
||||
user: {
|
||||
preferences: {
|
||||
language: 'bla',
|
||||
@@ -138,7 +145,7 @@ describe('language middleware', () => {
|
||||
});
|
||||
|
||||
it('uses the user preferred language even if a session is included in request', () => {
|
||||
req.locals = {
|
||||
res.locals = {
|
||||
user: {
|
||||
preferences: {
|
||||
language: 'it',
|
||||
|
||||
Reference in New Issue
Block a user