mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 01:56:46 +00:00
ci(core): Reduce memory usage in tests (part-2) (no-changelog) (#7671)
This also gets rid of `Db.collection`, which was another source of circular dependencies.
This commit is contained in:
committed by
GitHub
parent
37dd658dc5
commit
000e76e3b4
@@ -2,7 +2,6 @@ import validator from 'validator';
|
||||
import { Not } from 'typeorm';
|
||||
import type { SuperAgentTest } from 'supertest';
|
||||
|
||||
import * as Db from '@/Db';
|
||||
import { CredentialsEntity } from '@db/entities/CredentialsEntity';
|
||||
import type { Role } from '@db/entities/Role';
|
||||
import type { User } from '@db/entities/User';
|
||||
@@ -10,6 +9,14 @@ import { WorkflowEntity } from '@db/entities/WorkflowEntity';
|
||||
import { compareHash } from '@/UserManagement/UserManagementHelper';
|
||||
import { UserManagementMailer } from '@/UserManagement/email/UserManagementMailer';
|
||||
|
||||
import Container from 'typedi';
|
||||
import { UserRepository } from '@db/repositories/user.repository';
|
||||
import { WorkflowRepository } from '@db/repositories/workflow.repository';
|
||||
import { CredentialsRepository } from '@db/repositories/credentials.repository';
|
||||
import { SharedCredentialsRepository } from '@db/repositories/sharedCredentials.repository';
|
||||
import { SharedWorkflowRepository } from '@db/repositories/sharedWorkflow.repository';
|
||||
|
||||
import { mockInstance } from '../shared/mocking';
|
||||
import { SUCCESS_RESPONSE_BODY } from './shared/constants';
|
||||
import {
|
||||
randomCredentialPayload,
|
||||
@@ -31,7 +38,7 @@ let credentialOwnerRole: Role;
|
||||
let owner: User;
|
||||
let authOwnerAgent: SuperAgentTest;
|
||||
|
||||
const mailer = utils.mockInstance(UserManagementMailer, { isEmailSetUp: true });
|
||||
const mailer = mockInstance(UserManagementMailer, { isEmailSetUp: true });
|
||||
|
||||
const testServer = utils.setupTestServer({ endpointGroups: ['users'] });
|
||||
|
||||
@@ -54,7 +61,7 @@ beforeAll(async () => {
|
||||
|
||||
beforeEach(async () => {
|
||||
await testDb.truncate(['SharedCredentials', 'SharedWorkflow', 'Workflow', 'Credentials']);
|
||||
await Db.collections.User.delete({ id: Not(owner.id) });
|
||||
await Container.get(UserRepository).delete({ id: Not(owner.id) });
|
||||
|
||||
mailer.invite.mockResolvedValue({ emailSent: true });
|
||||
});
|
||||
@@ -72,9 +79,9 @@ describe('DELETE /users/:id', () => {
|
||||
nodes: [],
|
||||
});
|
||||
|
||||
const savedWorkflow = await Db.collections.Workflow.save(newWorkflow);
|
||||
const savedWorkflow = await Container.get(WorkflowRepository).save(newWorkflow);
|
||||
|
||||
await Db.collections.SharedWorkflow.save({
|
||||
await Container.get(SharedWorkflowRepository).save({
|
||||
role: workflowOwnerRole,
|
||||
user: userToDelete,
|
||||
workflow: savedWorkflow,
|
||||
@@ -89,9 +96,9 @@ describe('DELETE /users/:id', () => {
|
||||
nodesAccess: [],
|
||||
});
|
||||
|
||||
const savedCredential = await Db.collections.Credentials.save(newCredential);
|
||||
const savedCredential = await Container.get(CredentialsRepository).save(newCredential);
|
||||
|
||||
await Db.collections.SharedCredentials.save({
|
||||
await Container.get(SharedCredentialsRepository).save({
|
||||
role: credentialOwnerRole,
|
||||
user: userToDelete,
|
||||
credentials: savedCredential,
|
||||
@@ -102,27 +109,29 @@ describe('DELETE /users/:id', () => {
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(response.body).toEqual(SUCCESS_RESPONSE_BODY);
|
||||
|
||||
const user = await Db.collections.User.findOneBy({ id: userToDelete.id });
|
||||
const user = await Container.get(UserRepository).findOneBy({ id: userToDelete.id });
|
||||
expect(user).toBeNull(); // deleted
|
||||
|
||||
const sharedWorkflow = await Db.collections.SharedWorkflow.findOne({
|
||||
const sharedWorkflow = await Container.get(SharedWorkflowRepository).findOne({
|
||||
relations: ['user'],
|
||||
where: { userId: userToDelete.id, roleId: workflowOwnerRole.id },
|
||||
});
|
||||
expect(sharedWorkflow).toBeNull(); // deleted
|
||||
|
||||
const sharedCredential = await Db.collections.SharedCredentials.findOne({
|
||||
const sharedCredential = await Container.get(SharedCredentialsRepository).findOne({
|
||||
relations: ['user'],
|
||||
where: { userId: userToDelete.id, roleId: credentialOwnerRole.id },
|
||||
});
|
||||
expect(sharedCredential).toBeNull(); // deleted
|
||||
|
||||
const workflow = await Db.collections.Workflow.findOneBy({ id: savedWorkflow.id });
|
||||
const workflow = await Container.get(WorkflowRepository).findOneBy({ id: savedWorkflow.id });
|
||||
expect(workflow).toBeNull(); // deleted
|
||||
|
||||
// TODO: Include active workflow and check whether webhook has been removed
|
||||
|
||||
const credential = await Db.collections.Credentials.findOneBy({ id: savedCredential.id });
|
||||
const credential = await Container.get(CredentialsRepository).findOneBy({
|
||||
id: savedCredential.id,
|
||||
});
|
||||
expect(credential).toBeNull(); // deleted
|
||||
});
|
||||
|
||||
@@ -131,7 +140,7 @@ describe('DELETE /users/:id', () => {
|
||||
|
||||
expect(response.statusCode).toBe(400);
|
||||
|
||||
const user = await Db.collections.User.findOneBy({ id: owner.id });
|
||||
const user = await Container.get(UserRepository).findOneBy({ id: owner.id });
|
||||
expect(user).toBeDefined();
|
||||
});
|
||||
|
||||
@@ -144,7 +153,7 @@ describe('DELETE /users/:id', () => {
|
||||
|
||||
expect(response.statusCode).toBe(400);
|
||||
|
||||
const user = await Db.collections.User.findOneBy({ id: idToDelete });
|
||||
const user = await Container.get(UserRepository).findOneBy({ id: idToDelete });
|
||||
expect(user).toBeDefined();
|
||||
});
|
||||
|
||||
@@ -164,7 +173,7 @@ describe('DELETE /users/:id', () => {
|
||||
|
||||
expect(response.statusCode).toBe(200);
|
||||
|
||||
const sharedWorkflow = await Db.collections.SharedWorkflow.findOneOrFail({
|
||||
const sharedWorkflow = await Container.get(SharedWorkflowRepository).findOneOrFail({
|
||||
relations: ['workflow'],
|
||||
where: { userId: owner.id },
|
||||
});
|
||||
@@ -172,7 +181,7 @@ describe('DELETE /users/:id', () => {
|
||||
expect(sharedWorkflow.workflow).toBeDefined();
|
||||
expect(sharedWorkflow.workflow.id).toBe(savedWorkflow.id);
|
||||
|
||||
const sharedCredential = await Db.collections.SharedCredentials.findOneOrFail({
|
||||
const sharedCredential = await Container.get(SharedCredentialsRepository).findOneOrFail({
|
||||
relations: ['credentials'],
|
||||
where: { userId: owner.id },
|
||||
});
|
||||
@@ -180,7 +189,7 @@ describe('DELETE /users/:id', () => {
|
||||
expect(sharedCredential.credentials).toBeDefined();
|
||||
expect(sharedCredential.credentials.id).toBe(savedCredential.id);
|
||||
|
||||
const deletedUser = await Db.collections.User.findOneBy({ id: userToDelete.id });
|
||||
const deletedUser = await Container.get(UserRepository).findOneBy({ id: userToDelete.id });
|
||||
|
||||
expect(deletedUser).toBeNull();
|
||||
});
|
||||
@@ -226,7 +235,7 @@ describe('POST /users/:id', () => {
|
||||
const authToken = utils.getAuthToken(response);
|
||||
expect(authToken).toBeDefined();
|
||||
|
||||
const member = await Db.collections.User.findOneByOrFail({ id: memberShell.id });
|
||||
const member = await Container.get(UserRepository).findOneByOrFail({ id: memberShell.id });
|
||||
expect(member.firstName).toBe(memberData.firstName);
|
||||
expect(member.lastName).toBe(memberData.lastName);
|
||||
expect(member.password).not.toBe(memberData.password);
|
||||
@@ -235,7 +244,7 @@ describe('POST /users/:id', () => {
|
||||
test('should fail with invalid inputs', async () => {
|
||||
const memberShellEmail = randomEmail();
|
||||
|
||||
const memberShell = await Db.collections.User.save({
|
||||
const memberShell = await Container.get(UserRepository).save({
|
||||
email: memberShellEmail,
|
||||
globalRole: globalMemberRole,
|
||||
});
|
||||
@@ -275,7 +284,7 @@ describe('POST /users/:id', () => {
|
||||
.send(invalidPayload);
|
||||
expect(response.statusCode).toBe(400);
|
||||
|
||||
const storedUser = await Db.collections.User.findOneOrFail({
|
||||
const storedUser = await Container.get(UserRepository).findOneOrFail({
|
||||
where: { email: memberShellEmail },
|
||||
});
|
||||
|
||||
@@ -299,7 +308,7 @@ describe('POST /users/:id', () => {
|
||||
|
||||
expect(response.statusCode).toBe(400);
|
||||
|
||||
const storedMember = await Db.collections.User.findOneOrFail({
|
||||
const storedMember = await Container.get(UserRepository).findOneOrFail({
|
||||
where: { email: member.email },
|
||||
});
|
||||
expect(storedMember.firstName).not.toBe(newMemberData.firstName);
|
||||
@@ -353,7 +362,7 @@ describe('POST /users', () => {
|
||||
expect(error).toBe('Email could not be sent');
|
||||
}
|
||||
|
||||
const storedUser = await Db.collections.User.findOneByOrFail({ id });
|
||||
const storedUser = await Container.get(UserRepository).findOneByOrFail({ id });
|
||||
const { firstName, lastName, personalizationAnswers, password } = storedUser;
|
||||
|
||||
expect(firstName).toBeNull();
|
||||
@@ -377,7 +386,7 @@ describe('POST /users', () => {
|
||||
const response = await authOwnerAgent.post('/users').send(invalidPayload);
|
||||
expect(response.statusCode).toBe(400);
|
||||
|
||||
const users = await Db.collections.User.find();
|
||||
const users = await Container.get(UserRepository).find();
|
||||
expect(users.length).toBe(1); // DB unaffected
|
||||
}),
|
||||
);
|
||||
@@ -392,7 +401,7 @@ describe('POST /users', () => {
|
||||
expect(Array.isArray(data)).toBe(true);
|
||||
expect(data.length).toBe(0);
|
||||
|
||||
const users = await Db.collections.User.find();
|
||||
const users = await Container.get(UserRepository).find();
|
||||
expect(users.length).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user