UNPKG

@sync-in/server

Version:

The secure, open-source platform for file storage, sharing, collaboration, and sync

132 lines (131 loc) 6.27 kB
/* * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com> * This file is part of Sync-in | The open source file sync and share solution * See the LICENSE file for licensing details */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const _config = require("@nestjs/config"); const _jwt = require("@nestjs/jwt"); const _passport = require("@nestjs/passport"); const _testing = require("@nestjs/testing"); const _usermodel = require("../applications/users/models/user.model"); const _test = require("../applications/users/utils/test"); const _functions = require("../common/functions"); const _shared = require("../common/shared"); const _configenvironment = require("../configuration/config.environment"); const _cacheservice = require("../infrastructure/cache/services/cache.service"); const _constants = require("../infrastructure/database/constants"); const _authcontroller = require("./auth.controller"); const _loginresponsedto = require("./dto/login-response.dto"); const _tokeninterface = require("./interfaces/token.interface"); const _authmanagerservice = require("./services/auth-manager.service"); describe(_authcontroller.AuthController.name, ()=>{ let module; let authController; let authConfig; let userTest; beforeAll(async ()=>{ module = await _testing.Test.createTestingModule({ imports: [ await _config.ConfigModule.forRoot({ load: [ _configenvironment.exportConfiguration ], isGlobal: true }), _passport.PassportModule ], controllers: [ _authcontroller.AuthController ], providers: [ _config.ConfigService, _authmanagerservice.AuthManager, _jwt.JwtService, { provide: _constants.DB_TOKEN_PROVIDER, useValue: {} }, { provide: _cacheservice.Cache, useValue: {} } ] }).compile(); module.useLogger([ 'fatal' ]); authConfig = module.get(_config.ConfigService).get('auth'); authController = module.get(_authcontroller.AuthController); userTest = new _usermodel.UserModel({ ...(0, _test.generateUserTest)(), id: 888 }, false); }); afterAll(async ()=>{ await module.close(); }); it('should be defined', ()=>{ expect(authConfig).toBeDefined(); expect(authController).toBeDefined(); expect(userTest).toBeDefined(); }); it('should set JWT in cookies', async ()=>{ const res = { setCookie: jest.fn() }; const result = await authController.login(userTest, res); expect(result).toBeDefined(); expect(result).toBeInstanceOf(_loginresponsedto.LoginResponseDto); expect(res.setCookie).toHaveBeenCalledTimes(4); expect(result.token.access_expiration).toBeCloseTo((0, _functions.convertHumanTimeToSeconds)(authConfig.token.access.expiration) + (0, _shared.currentTimeStamp)(), -1); expect(result.token.refresh_expiration).toBeCloseTo((0, _functions.convertHumanTimeToSeconds)(authConfig.token.refresh.expiration) + (0, _shared.currentTimeStamp)(), -1); }); it('should clear JWT in cookies', async ()=>{ const res = { clearCookie: jest.fn() }; await expect(authController.logout(res)).resolves.not.toThrow(); expect(res.clearCookie).toHaveBeenCalledTimes(4); }); it('should refresh JWT in cookies', async ()=>{ userTest.exp = (0, _shared.currentTimeStamp)() + (0, _functions.convertHumanTimeToSeconds)('30s'); const res = { setCookie: jest.fn() }; const result = await authController.refreshCookies(userTest, res); expect(result).toBeDefined(); expect(res.setCookie).toHaveBeenCalledTimes(4); expect(result.access_expiration).toBeCloseTo((0, _functions.convertHumanTimeToSeconds)(authConfig.token.access.expiration) + (0, _shared.currentTimeStamp)(), -1); expect(result.refresh_expiration).toBe(userTest.exp); }); it('should not refresh JWT in cookies', async ()=>{ userTest.exp = (0, _shared.currentTimeStamp)() - 1; const res = { setCookie: jest.fn() }; await expect(authController.refreshCookies(userTest, res)).rejects.toThrow(); }); it('should get JWT in response body', async ()=>{ const result = await authController.token(userTest); expect(result[_tokeninterface.TOKEN_TYPE.ACCESS]).toBeDefined(); expect(result[_tokeninterface.TOKEN_TYPE.REFRESH]).toBeDefined(); expect(result[`${_tokeninterface.TOKEN_TYPE.ACCESS}_expiration`]).toBeCloseTo((0, _functions.convertHumanTimeToSeconds)(authConfig.token.access.expiration) + (0, _shared.currentTimeStamp)(), -1); expect(result[`${_tokeninterface.TOKEN_TYPE.REFRESH}_expiration`]).toBeCloseTo((0, _functions.convertHumanTimeToSeconds)(authConfig.token.refresh.expiration) + (0, _shared.currentTimeStamp)(), -1); }); it('should refresh JWT in response body', async ()=>{ userTest.exp = (0, _shared.currentTimeStamp)() + (0, _functions.convertHumanTimeToSeconds)('30s'); const result = await authController.refreshToken(userTest); expect(result[_tokeninterface.TOKEN_TYPE.ACCESS]).toBeDefined(); expect(result[_tokeninterface.TOKEN_TYPE.REFRESH]).toBeDefined(); expect(result[`${_tokeninterface.TOKEN_TYPE.ACCESS}_expiration`]).toBeCloseTo((0, _functions.convertHumanTimeToSeconds)(authConfig.token.access.expiration) + (0, _shared.currentTimeStamp)(), -1); expect(result[`${_tokeninterface.TOKEN_TYPE.REFRESH}_expiration`]).toBe(userTest.exp); }); it('should not refresh JWT in response body', async ()=>{ userTest.exp = (0, _shared.currentTimeStamp)() - 1; await expect(authController.refreshToken(userTest)).rejects.toThrow(); }); }); //# sourceMappingURL=auth.controller.spec.js.map