feat: initial commit

This commit is contained in:
Mohamed Marrouchi
2024-09-10 10:50:11 +01:00
commit 30e5766487
879 changed files with 122820 additions and 0 deletions

34
api/test/app.e2e-spec.ts Normal file
View File

@@ -0,0 +1,34 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
* 3. SaaS Restriction: This software, or any derivative of it, may not be used to offer a competing product or service (SaaS) without prior written consent from Hexastack. Offering the software as a service or using it in a commercial cloud environment without express permission is strictly prohibited.
*/
import { INestApplication } from '@nestjs/common';
import { Test, TestingModule } from '@nestjs/testing';
import request from 'supertest';
import { AppModule } from './../src/app.module';
describe('AppController (e2e)', () => {
let app: INestApplication;
beforeEach(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = moduleFixture.createNestApplication();
await app.init();
});
it('/ (GET)', () => {
return request(app.getHttpServer())
.get('/')
.expect(200)
.expect('Hello World!');
});
});

12
api/test/global-setup.ts Normal file
View File

@@ -0,0 +1,12 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
* 3. SaaS Restriction: This software, or any derivative of it, may not be used to offer a competing product or service (SaaS) without prior written consent from Hexastack. Offering the software as a service or using it in a commercial cloud environment without express permission is strictly prohibited.
*/
import 'tsconfig-paths/register';
export = async function globalSetup() {};

View File

@@ -0,0 +1,10 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
* 3. SaaS Restriction: This software, or any derivative of it, may not be used to offer a competing product or service (SaaS) without prior written consent from Hexastack. Offering the software as a service or using it in a commercial cloud environment without express permission is strictly prohibited.
*/
export = async function globalTeardown() {};

9
api/test/jest-e2e.json Normal file
View File

@@ -0,0 +1,9 @@
{
"moduleFileExtensions": ["js", "json", "ts"],
"rootDir": ".",
"testEnvironment": "node",
"testRegex": ".e2e-spec.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
}
}

64
api/test/jest.setup.ts Normal file
View File

@@ -0,0 +1,64 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
* 3. SaaS Restriction: This software, or any derivative of it, may not be used to offer a competing product or service (SaaS) without prior written consent from Hexastack. Offering the software as a service or using it in a commercial cloud environment without express permission is strictly prohibited.
*/
import { diff } from 'jest-diff';
import { IGNORED_TEST_FIELDS } from '@/utils/test/constants';
function recursivelyOmitKeys(obj: any, keysToIgnore: string[]): any {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
if (Array.isArray(obj)) {
return obj.map((item) => recursivelyOmitKeys(item, keysToIgnore));
}
return Object.keys(obj).reduce((acc: any, key: string) => {
if (!keysToIgnore.includes(key)) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
acc[key] = recursivelyOmitKeys(obj[key], keysToIgnore);
} else {
acc[key] = obj[key];
}
}
return acc;
}, {});
}
expect.extend({
toEqualPayload(received, expected, keysToIgnore = IGNORED_TEST_FIELDS) {
const receivedStripped = recursivelyOmitKeys(received, keysToIgnore);
const expectedStripped = recursivelyOmitKeys(expected, keysToIgnore);
const pass = this.equals(receivedStripped, expectedStripped);
const diffString = diff(expectedStripped, receivedStripped, {
expand: this.expand,
});
if (pass) {
return {
pass: true,
message: () =>
`Expected objects to not be equal with keys [${keysToIgnore.join(
', ',
)}] ignored`,
};
} else {
return {
pass: false,
message: () =>
`Expected objects with keys [${keysToIgnore.join(
', ',
)}] ignored to be equal:\n${diffString}`,
};
}
},
});

26
api/test/setup-tests.ts Normal file
View File

@@ -0,0 +1,26 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
* 3. SaaS Restriction: This software, or any derivative of it, may not be used to offer a competing product or service (SaaS) without prior written consent from Hexastack. Offering the software as a service or using it in a commercial cloud environment without express permission is strictly prohibited.
*/
import * as dotenv from 'dotenv';
dotenv.config({ path: '../.env' });
let mockSession = null;
jest.mock('connect-mongo', () => ({
create: jest.fn(() => ({
set: jest.fn((_id, newSession, next) => {
mockSession = newSession;
next();
}),
get: jest.fn((_id, next) => {
next(null, mockSession);
}),
})),
}));