diff --git a/api/package.json b/api/package.json index 0672afa19528de8fdf23d8820fb4fffc7108fa62..7457c35050698f2f548a21b032ed5d108bdbd759 100644 --- a/api/package.json +++ b/api/package.json @@ -94,7 +94,12 @@ "^.+\\.(t|j)s$": "ts-jest" }, "collectCoverageFrom": [ - "**/*.(t|j)s" + "**/*.(t|j)s", + "!**/*e2e-spec.ts", + "!**/*.module.ts", + "!**/*.decorator.ts", + "**/jest.config.js", + "**/main.js" ], "coverageDirectory": "../coverage", "testEnvironment": "node" diff --git a/api/src/files/files.controller.spec.ts b/api/src/files/files.service.spec.ts similarity index 74% rename from api/src/files/files.controller.spec.ts rename to api/src/files/files.service.spec.ts index 4ff16a6ce0d67ecfb2e16e7b3ded0df966e7878e..aedfabb21466276319150e9a6225fdde96b8ba89 100644 --- a/api/src/files/files.controller.spec.ts +++ b/api/src/files/files.service.spec.ts @@ -3,7 +3,7 @@ import { ENGINE_MODULE_OPTIONS } from '../engine/engine.constants'; import { FilesController } from './files.controller'; import { FilesService } from './files.service'; -describe('FilesController', () => { +describe('FilesService', () => { let service: FilesService; beforeEach(async () => { @@ -24,19 +24,33 @@ describe('FilesController', () => { service = module.get<FilesService>(FilesService); }); - it('getAssetFile', () => { + it('Return file should be empty', () => { const filePathEmpty = service.getAssetFile('FILE_THAT_DOES_NOT_EXIST.txt'); - const filePath = service.getAssetFile('tos.md'); - const fileWithLFI = service.getAssetFile('../../../.env'); expect(filePathEmpty).toBeUndefined(); + }); + + it('Try LFI injection', () => { + const fileWithLFI = service.getAssetFile('../../../.env'); + expect(fileWithLFI).toBeUndefined(); + }); + + it('Get existing file, should return something', () => { + const filePath = service.getAssetFile('tos.md'); + expect(filePath).toEqual(expect.anything()); }); - it('markdown', () => { + it('Get markdown file that exists, should return something', () => { const fileContent = service.getMarkdown('login.md', 'http://localtest'); expect(!!fileContent).toBeTruthy(); expect(fileContent.includes('http://localtest')).toBeTruthy(); }); + + it('Get markdown does not exist', () => { + expect( + service.getMarkdown('FILE_DO_NOT_EXIT.txt', 'http://fakeurl'), + ).toEqual(''); + }); }); diff --git a/api/src/users/users.resolver.spec.ts b/api/src/users/users.resolver.spec.ts index e9ba43d9f33e895ea73a33e1b1ca77d5c15d5f6d..c164c26a4ee51c6730d1ce3679b310d4ea21dfa7 100644 --- a/api/src/users/users.resolver.spec.ts +++ b/api/src/users/users.resolver.spec.ts @@ -1,4 +1,5 @@ import { getMockReq } from '@jest-mock/express'; +import { NotFoundException } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; import { MockFunctionMetadata, ModuleMocker } from 'jest-mock'; import { ENGINE_SERVICE } from '../engine/engine.constants'; @@ -12,6 +13,7 @@ const moduleMocker = new ModuleMocker(global); describe('UsersResolver', () => { let resolver: UsersResolver; const req = getMockReq(); + const user: User = { id: 'guest', username: 'guest', @@ -32,6 +34,21 @@ describe('UsersResolver', () => { agreeNDA: false, }; + const findOne = jest + .fn() + .mockResolvedValueOnce(internUserWrong) + .mockResolvedValueOnce(internUserWrong) + .mockImplementationOnce(() => { + throw new NotFoundException(); + }) + .mockResolvedValue(internUser); + + const getActiveUser = jest + .fn() + .mockResolvedValueOnce(user) + .mockResolvedValueOnce({}) + .mockResolvedValue(user); + beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [UsersResolver], @@ -39,16 +56,17 @@ describe('UsersResolver', () => { .useMocker((token) => { if (token == UsersService) { return { - findOne: jest - .fn() - .mockResolvedValue(internUser) - .mockResolvedValueOnce(internUserWrong), + findOne, update: jest.fn().mockResolvedValue({ ...user, ...internUser }), }; } if (token == ENGINE_SERVICE) { return { - getActiveUser: jest.fn().mockResolvedValue(user), + getActiveUser, + updateUser: jest + .fn() + .mockImplementationOnce(undefined) + .mockResolvedValue({ ...user, ...updateData }), }; } if (typeof token === 'function') { @@ -64,17 +82,35 @@ describe('UsersResolver', () => { resolver = module.get<UsersResolver>(UsersResolver); }); - it('getUser', async () => { + it('Get user with different id from engine and database', async () => { expect(await resolver.getUser(req, user)).toStrictEqual({ ...user, }); + }); + + it('Get user incomplete merge', async () => { + expect(resolver.getUser(req, user)).rejects.toThrowError(); + }); + + it('Get user not found in db', async () => { + expect(await resolver.getUser(req, user)).toStrictEqual(user); + }); + + it('Get user in engine and database (merge)', async () => { expect(await resolver.getUser(req, user)).toStrictEqual({ ...user, ...internUser, }); }); - it('updateUser', async () => { + it('Update user from engine ', async () => { + expect(await resolver.updateUser(req, updateData, user)).toStrictEqual({ + ...user, + ...updateData, + }); + }); + + it('Update user from database', async () => { expect(await resolver.updateUser(req, updateData, user)).toBeDefined(); }); });