mirror of
https://github.com/hexastack/hexabot
synced 2025-06-26 18:27:28 +00:00
feat: initial commit
This commit is contained in:
34
api/test/app.e2e-spec.ts
Normal file
34
api/test/app.e2e-spec.ts
Normal 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
12
api/test/global-setup.ts
Normal 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() {};
|
||||
10
api/test/global-teardown.ts
Normal file
10
api/test/global-teardown.ts
Normal 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
9
api/test/jest-e2e.json
Normal 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
64
api/test/jest.setup.ts
Normal 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
26
api/test/setup-tests.ts
Normal 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);
|
||||
}),
|
||||
})),
|
||||
}));
|
||||
Reference in New Issue
Block a user