feat(core): Custom session timeout and refresh configuration (#8342)
This commit is contained in:
61
packages/cli/test/unit/auth/jwt.test.ts
Normal file
61
packages/cli/test/unit/auth/jwt.test.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
import { Container } from 'typedi';
|
||||
import { mock } from 'jest-mock-extended';
|
||||
|
||||
import config from '@/config';
|
||||
import { JwtService } from '@/services/jwt.service';
|
||||
import { License } from '@/License';
|
||||
import { Time } from '@/constants';
|
||||
import { issueJWT } from '@/auth/jwt';
|
||||
|
||||
import { mockInstance } from '../../shared/mocking';
|
||||
|
||||
import type { User } from '@db/entities/User';
|
||||
|
||||
mockInstance(License);
|
||||
|
||||
describe('jwt.issueJWT', () => {
|
||||
const jwtService = Container.get(JwtService);
|
||||
|
||||
describe('when not setting userManagement.jwtSessionDuration', () => {
|
||||
it('should default to expire in 7 days', () => {
|
||||
const defaultInSeconds = 7 * Time.days.toSeconds;
|
||||
const mockUser = mock<User>({ password: 'passwordHash' });
|
||||
const { token, expiresIn } = issueJWT(mockUser);
|
||||
|
||||
expect(expiresIn).toBe(defaultInSeconds);
|
||||
const decodedToken = jwtService.verify(token);
|
||||
if (decodedToken.exp === undefined || decodedToken.iat === undefined) {
|
||||
fail('Expected exp and iat to be defined');
|
||||
}
|
||||
|
||||
expect(decodedToken.exp - decodedToken.iat).toBe(defaultInSeconds);
|
||||
});
|
||||
});
|
||||
|
||||
describe('when setting userManagement.jwtSessionDuration', () => {
|
||||
const oldDuration = config.get('userManagement.jwtSessionDurationHours');
|
||||
const testDurationHours = 1;
|
||||
const testDurationSeconds = testDurationHours * Time.hours.toSeconds;
|
||||
|
||||
beforeEach(() => {
|
||||
mockInstance(License);
|
||||
config.set('userManagement.jwtSessionDurationHours', testDurationHours);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
config.set('userManagement.jwtSessionDuration', oldDuration);
|
||||
});
|
||||
|
||||
it('should apply it to tokens', () => {
|
||||
const mockUser = mock<User>({ password: 'passwordHash' });
|
||||
const { token, expiresIn } = issueJWT(mockUser);
|
||||
|
||||
expect(expiresIn).toBe(testDurationSeconds);
|
||||
const decodedToken = jwtService.verify(token);
|
||||
if (decodedToken.exp === undefined || decodedToken.iat === undefined) {
|
||||
fail('Expected exp and iat to be defined on decodedToken');
|
||||
}
|
||||
expect(decodedToken.exp - decodedToken.iat).toBe(testDurationSeconds);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user