refactor(core): Enable import/order eslint rule (#10794)

This commit is contained in:
Tomi Turtiainen
2024-09-12 19:07:18 +03:00
committed by GitHub
parent 6530620e9d
commit 5156313074
569 changed files with 3019 additions and 2523 deletions

View File

@@ -1,6 +1,7 @@
import { GlobalConfig } from '@n8n/config';
import { ActivationErrorsService } from '@/activation-errors.service';
import { CacheService } from '@/services/cache/cache.service';
import { GlobalConfig } from '@n8n/config';
import { mockInstance } from '@test/mocking';
describe('ActivationErrorsService', () => {

View File

@@ -1,27 +1,27 @@
import { Container } from 'typedi';
import { mock } from 'jest-mock-extended';
import { NodeApiError, NodeOperationError, Workflow } from 'n8n-workflow';
import type { IWebhookData, WorkflowActivateMode } from 'n8n-workflow';
import { Container } from 'typedi';
import { ActiveExecutions } from '@/active-executions';
import { ActiveWorkflowManager } from '@/active-workflow-manager';
import type { WebhookEntity } from '@/databases/entities/webhook-entity';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { ExecutionService } from '@/executions/execution.service';
import { ExternalHooks } from '@/external-hooks';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { NodeTypes } from '@/node-types';
import { Push } from '@/push';
import { SecretsHelper } from '@/secrets-helpers';
import { WebhookService } from '@/webhooks/webhook.service';
import * as WebhookHelpers from '@/webhooks/webhook-helpers';
import { WebhookService } from '@/webhooks/webhook.service';
import * as AdditionalData from '@/workflow-execute-additional-data';
import type { WebhookEntity } from '@/databases/entities/webhook-entity';
import { NodeTypes } from '@/node-types';
import { ExecutionService } from '@/executions/execution.service';
import { WorkflowService } from '@/workflows/workflow.service';
import { mockInstance } from '../shared/mocking';
import * as testDb from './shared/test-db';
import { createOwner } from './shared/db/users';
import { createWorkflow } from './shared/db/workflows';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import * as testDb from './shared/test-db';
import { mockInstance } from '../shared/mocking';
mockInstance(ActiveExecutions);
mockInstance(Push);

View File

@@ -8,11 +8,11 @@ import { UserRepository } from '@/databases/repositories/user.repository';
import { MfaService } from '@/mfa/mfa.service';
import { LOGGED_OUT_RESPONSE_BODY } from './shared/constants';
import { createUser, createUserShell } from './shared/db/users';
import { randomValidPassword } from './shared/random';
import * as testDb from './shared/test-db';
import * as utils from './shared/utils/';
import { createUser, createUserShell } from './shared/db/users';
import type { SuperAgentTest } from './shared/types';
import * as utils from './shared/utils/';
let owner: User;
let authOwnerAgent: SuperAgentTest;

View File

@@ -1,9 +1,9 @@
import { ActiveWorkflowManager } from '@/active-workflow-manager';
import * as utils from './shared/utils/';
import { createUser } from './shared/db/users';
import { mockInstance } from '../shared/mocking';
import type { SuperAgentTest } from './shared/types';
import * as utils from './shared/utils/';
import { mockInstance } from '../shared/mocking';
describe('Auth Middleware', () => {
mockInstance(ActiveWorkflowManager);

View File

@@ -1,11 +1,11 @@
import { BinaryDataService, FileNotFoundError } from 'n8n-core';
import fsp from 'node:fs/promises';
import { Readable } from 'node:stream';
import { BinaryDataService, FileNotFoundError } from 'n8n-core';
import { mockInstance } from '../shared/mocking';
import { setupTestServer } from './shared/utils';
import { createOwner } from './shared/db/users';
import type { SuperAgentTest } from './shared/types';
import { setupTestServer } from './shared/utils';
import { mockInstance } from '../shared/mocking';
jest.mock('fs/promises');

View File

@@ -1,20 +1,19 @@
import Container from 'typedi';
import { mock } from 'jest-mock-extended';
import Container from 'typedi';
import type { User } from '@/databases/entities/user';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { CollaborationService } from '@/collaboration/collaboration.service';
import { Push } from '@/push';
import { CacheService } from '@/services/cache/cache.service';
import type {
WorkflowClosedMessage,
WorkflowOpenedMessage,
} from '@/collaboration/collaboration.message';
import { CollaborationService } from '@/collaboration/collaboration.service';
import type { User } from '@/databases/entities/user';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { Push } from '@/push';
import { CacheService } from '@/services/cache/cache.service';
import { mockInstance } from '@test/mocking';
import * as testDb from '@test-integration/test-db';
import { createWorkflow, shareWorkflowWithUsers } from '@test-integration/db/workflows';
import { createMember, createOwner } from '@test-integration/db/users';
import { createWorkflow, shareWorkflowWithUsers } from '@test-integration/db/workflows';
import * as testDb from '@test-integration/test-db';
describe('CollaborationService', () => {
mockInstance(Push, new Push(mock()));

View File

@@ -2,13 +2,13 @@ import { nanoid } from 'nanoid';
import { ImportCredentialsCommand } from '@/commands/import/credentials';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { setupTestCommand } from '@test-integration/utils/test-command';
import { mockInstance } from '../../shared/mocking';
import * as testDb from '../shared/test-db';
import { getAllCredentials, getAllSharedCredentials } from '../shared/db/credentials';
import { createMember, createOwner } from '../shared/db/users';
import { getPersonalProject } from '../shared/db/projects';
import { createMember, createOwner } from '../shared/db/users';
import * as testDb from '../shared/test-db';
mockInstance(LoadNodesAndCredentials);
const command = setupTestCommand(ImportCredentialsCommand);

View File

@@ -2,13 +2,13 @@ import { nanoid } from 'nanoid';
import { ImportWorkflowsCommand } from '@/commands/import/workflow';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { setupTestCommand } from '@test-integration/utils/test-command';
import { mockInstance } from '../../shared/mocking';
import * as testDb from '../shared/test-db';
import { getAllSharedWorkflows, getAllWorkflows } from '../shared/db/workflows';
import { createMember, createOwner } from '../shared/db/users';
import { getPersonalProject } from '../shared/db/projects';
import { createMember, createOwner } from '../shared/db/users';
import { getAllSharedWorkflows, getAllWorkflows } from '../shared/db/workflows';
import * as testDb from '../shared/test-db';
mockInstance(LoadNodesAndCredentials);
const command = setupTestCommand(ImportWorkflowsCommand);

View File

@@ -1,26 +1,26 @@
import { EntityNotFoundError } from '@n8n/typeorm';
import { Container } from 'typedi';
import { v4 as uuid } from 'uuid';
import { EntityNotFoundError } from '@n8n/typeorm';
import { Reset } from '@/commands/ldap/reset';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { getLdapSynchronizations, saveLdapSynchronization } from '@/ldap/helpers.ee';
import { LdapService } from '@/ldap/ldap.service.ee';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { Push } from '@/push';
import { Telemetry } from '@/telemetry';
import { setupTestCommand } from '@test-integration/utils/test-command';
import { mockInstance } from '../../../shared/mocking';
import { saveCredential } from '../../shared/db/credentials';
import { createTeamProject, findProject, getPersonalProject } from '../../shared/db/projects';
import { createLdapUser, createMember, getUserById } from '../../shared/db/users';
import { createWorkflow } from '../../shared/db/workflows';
import { randomCredentialPayload } from '../../shared/random';
import { saveCredential } from '../../shared/db/credentials';
import { createLdapConfig } from '../../shared/ldap';
import { createTeamProject, findProject, getPersonalProject } from '../../shared/db/projects';
import { randomCredentialPayload } from '../../shared/random';
mockInstance(Telemetry);

View File

@@ -1,13 +1,13 @@
import { Container } from 'typedi';
import { setupTestCommand } from '@test-integration/utils/test-command';
import { mockInstance } from '../../shared/mocking';
import { ClearLicenseCommand } from '@/commands/license/clear';
import { SETTINGS_LICENSE_CERT_KEY } from '@/constants';
import { SettingsRepository } from '@/databases/repositories/settings.repository';
import { License } from '@/license';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { setupTestCommand } from '@test-integration/utils/test-command';
import { mockInstance } from '../../shared/mocking';
mockInstance(LoadNodesAndCredentials);
const license = mockInstance(License);

View File

@@ -1,23 +1,23 @@
import { Container } from 'typedi';
import { Reset } from '@/commands/user-management/reset';
import { CredentialsEntity } from '@/databases/entities/credentials-entity';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { SettingsRepository } from '@/databases/repositories/settings.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { UserRepository } from '@/databases/repositories/user.repository';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { NodeTypes } from '@/node-types';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { CredentialsEntity } from '@/databases/entities/credentials-entity';
import { SettingsRepository } from '@/databases/repositories/settings.repository';
import { UserRepository } from '@/databases/repositories/user.repository';
import { setupTestCommand } from '@test-integration/utils/test-command';
import { mockInstance } from '../../shared/mocking';
import * as testDb from '../shared/test-db';
import { encryptCredentialData, saveCredential } from '../shared/db/credentials';
import { getPersonalProject } from '../shared/db/projects';
import { createMember, createUser } from '../shared/db/users';
import { createWorkflow } from '../shared/db/workflows';
import { getPersonalProject } from '../shared/db/projects';
import { encryptCredentialData, saveCredential } from '../shared/db/credentials';
import { randomCredentialPayload } from '../shared/random';
import * as testDb from '../shared/test-db';
mockInstance(LoadNodesAndCredentials);
mockInstance(NodeTypes);

View File

@@ -1,10 +1,10 @@
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { UpdateWorkflowCommand } from '@/commands/update/workflow';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { setupTestCommand } from '@test-integration/utils/test-command';
import * as testDb from '../../shared/test-db';
import { createWorkflowWithTrigger, getAllWorkflows } from '../../shared/db/workflows';
import { mockInstance } from '../../../shared/mocking';
import { createWorkflowWithTrigger, getAllWorkflows } from '../../shared/db/workflows';
import * as testDb from '../../shared/test-db';
mockInstance(LoadNodesAndCredentials);
const command = setupTestCommand(UpdateWorkflowCommand);

View File

@@ -2,18 +2,18 @@ import { BinaryDataService } from 'n8n-core';
import { Worker } from '@/commands/worker';
import config from '@/config';
import { ExternalSecretsManager } from '@/external-secrets/external-secrets-manager.ee';
import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus';
import { LogStreamingEventRelay } from '@/events/log-streaming-event-relay';
import { ExternalHooks } from '@/external-hooks';
import { ExternalSecretsManager } from '@/external-secrets/external-secrets-manager.ee';
import { License } from '@/license';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { ScalingService } from '@/scaling/scaling.service';
import { OrchestrationHandlerWorkerService } from '@/services/orchestration/worker/orchestration.handler.worker.service';
import { OrchestrationWorkerService } from '@/services/orchestration/worker/orchestration.worker.service';
import { License } from '@/license';
import { ExternalHooks } from '@/external-hooks';
import { ScalingService } from '@/scaling/scaling.service';
import { setupTestCommand } from '@test-integration/utils/test-command';
import { mockInstance } from '../../shared/mocking';
import { LogStreamingEventRelay } from '@/events/log-streaming-event-relay';
config.set('executions.mode', 'queue');
config.set('binaryDataManager.availableModes', 'filesystem');

View File

@@ -1,15 +1,15 @@
import path from 'path';
import type { InstalledPackages } from '@/databases/entities/installed-packages';
import type { InstalledNodes } from '@/databases/entities/installed-nodes';
import type { InstalledPackages } from '@/databases/entities/installed-packages';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { CommunityPackagesService } from '@/services/community-packages.service';
import { mockInstance } from '../shared/mocking';
import { COMMUNITY_PACKAGE_VERSION } from './shared/constants';
import { setupTestServer, mockPackage, mockNode, mockPackageName } from './shared/utils';
import { createOwner } from './shared/db/users';
import type { SuperAgentTest } from './shared/types';
import { setupTestServer, mockPackage, mockNode, mockPackageName } from './shared/utils';
import { mockInstance } from '../shared/mocking';
const communityPackagesService = mockInstance(CommunityPackagesService, {
hasMissingPackages: false,

View File

@@ -1,16 +1,16 @@
import { mock } from 'jest-mock-extended';
import type {
INodeListSearchResult,
IWorkflowExecuteAdditionalData,
ResourceMapperFields,
} from 'n8n-workflow';
import { mock } from 'jest-mock-extended';
import { DynamicNodeParametersService } from '@/services/dynamic-node-parameters.service';
import * as AdditionalData from '@/workflow-execute-additional-data';
import { createOwner } from '../shared/db/users';
import { setupTestServer } from '../shared/utils';
import type { SuperAgentTest } from '../shared/types';
import { setupTestServer } from '../shared/utils';
describe('DynamicNodeParametersController', () => {
const testServer = setupTestServer({ endpointGroups: ['dynamic-node-parameters'] });

View File

@@ -1,5 +1,7 @@
import validator from 'validator';
import type { User } from '@/databases/entities/user';
import type { UserInvitationResult } from '../../shared/utils/users';
export function assertReturnedUserProps(user: User) {

View File

@@ -1,30 +1,29 @@
import Container from 'typedi';
import { Not } from '@n8n/typeorm';
import Container from 'typedi';
import type { User } from '@/databases/entities/user';
import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository';
import { UserRepository } from '@/databases/repositories/user.repository';
import { EventService } from '@/events/event.service';
import { ExternalHooks } from '@/external-hooks';
import { UserManagementMailer } from '@/user-management/email';
import { UserRepository } from '@/databases/repositories/user.repository';
import { PasswordUtility } from '@/services/password.utility';
import {
randomEmail,
randomInvalidPassword,
randomName,
randomValidPassword,
} from '../../shared/random';
import { createMember, createOwner, createUserShell } from '../../shared/db/users';
import { mockInstance } from '../../../shared/mocking';
import * as utils from '../../shared/utils';
import { UserManagementMailer } from '@/user-management/email';
import {
assertReturnedUserProps,
assertStoredUserProps,
assertUserInviteResult,
} from './assertions';
import type { User } from '@/databases/entities/user';
import { mockInstance } from '../../../shared/mocking';
import { createMember, createOwner, createUserShell } from '../../shared/db/users';
import {
randomEmail,
randomInvalidPassword,
randomName,
randomValidPassword,
} from '../../shared/random';
import * as utils from '../../shared/utils';
import type { UserInvitationResult } from '../../shared/utils/users';
import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository';
describe('InvitationController', () => {
const mailer = mockInstance(UserManagementMailer);

View File

@@ -1,18 +1,17 @@
import { Container } from 'typedi';
import { response as Response } from 'express';
import nock from 'nock';
import { parse as parseQs } from 'querystring';
import { Container } from 'typedi';
import { OAuth2CredentialController } from '@/controllers/oauth/oauth2-credential.controller';
import { CredentialsHelper } from '@/credentials-helper';
import type { CredentialsEntity } from '@/databases/entities/credentials-entity';
import type { User } from '@/databases/entities/user';
import { CredentialsHelper } from '@/credentials-helper';
import { OAuth2CredentialController } from '@/controllers/oauth/oauth2-credential.controller';
import { createOwner } from '@test-integration/db/users';
import { saveCredential } from '@test-integration/db/credentials';
import { createOwner } from '@test-integration/db/users';
import * as testDb from '@test-integration/test-db';
import { setupTestServer } from '@test-integration/utils';
import type { SuperAgentTest } from '@test-integration/types';
import { setupTestServer } from '@test-integration/utils';
describe('OAuth2 API', () => {
const testServer = setupTestServer({ endpointGroups: ['oauth2'] });

View File

@@ -1,12 +1,13 @@
import Container from 'typedi';
import * as testDb from './shared/test-db';
import { CredentialsHelper } from '@/credentials-helper';
import { createOwner, createAdmin, createMember } from './shared/db/users';
import type { User } from '@/databases/entities/user';
import { saveCredential } from './shared/db/credentials';
import { randomCredentialPayload } from './shared/random';
import { createTeamProject, linkUserToProject } from './shared/db/projects';
import { createOwner, createAdmin, createMember } from './shared/db/users';
import { randomCredentialPayload } from './shared/random';
import * as testDb from './shared/test-db';
let credentialHelper: CredentialsHelper;
let owner: User;

View File

@@ -1,25 +1,24 @@
import { Container } from 'typedi';
import { In } from '@n8n/typeorm';
import { Container } from 'typedi';
import config from '@/config';
import type { ListQuery } from '@/requests';
import type { User } from '@/databases/entities/user';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import type { Project } from '@/databases/entities/project';
import type { User } from '@/databases/entities/user';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import type { ListQuery } from '@/requests';
import { ProjectService } from '@/services/project.service';
import { UserManagementMailer } from '@/user-management/email';
import { createWorkflow, shareWorkflowWithUsers } from '@test-integration/db/workflows';
import { randomCredentialPayload } from '../shared/random';
import * as testDb from '../shared/test-db';
import type { SaveCredentialFunction } from '../shared/types';
import * as utils from '../shared/utils';
import { mockInstance } from '../../shared/mocking';
import {
affixRoleToSaveCredential,
getCredentialSharings,
shareCredentialWithProjects,
shareCredentialWithUsers,
} from '../shared/db/credentials';
import { createTeamProject, linkUserToProject } from '../shared/db/projects';
import {
createAdmin,
createManyUsers,
@@ -27,10 +26,11 @@ import {
createUser,
createUserShell,
} from '../shared/db/users';
import { randomCredentialPayload } from '../shared/random';
import * as testDb from '../shared/test-db';
import type { SaveCredentialFunction } from '../shared/types';
import type { SuperAgentTest } from '../shared/types';
import { mockInstance } from '../../shared/mocking';
import { createTeamProject, linkUserToProject } from '../shared/db/projects';
import { createWorkflow, shareWorkflowWithUsers } from '@test-integration/db/workflows';
import * as utils from '../shared/utils';
const testServer = utils.setupTestServer({
endpointGroups: ['credentials'],

View File

@@ -1,31 +1,31 @@
import { Container } from 'typedi';
import type { Scope } from '@sentry/node';
import { GlobalConfig } from '@n8n/config';
import type { Scope } from '@sentry/node';
import { Credentials } from 'n8n-core';
import { randomString } from 'n8n-workflow';
import { Container } from 'typedi';
import type { ListQuery } from '@/requests';
import type { User } from '@/databases/entities/user';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import type { Project } from '@/databases/entities/project';
import type { User } from '@/databases/entities/user';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import type { ListQuery } from '@/requests';
import * as testDb from '../shared/test-db';
import { setupTestServer } from '../shared/utils';
import {
randomCredentialPayload as payload,
randomCredentialPayload,
randomName,
} from '../shared/random';
import {
saveCredential,
shareCredentialWithProjects,
shareCredentialWithUsers,
} from '../shared/db/credentials';
import { createManyUsers, createMember, createOwner } from '../shared/db/users';
import { createTeamProject, linkUserToProject } from '../shared/db/projects';
import { createManyUsers, createMember, createOwner } from '../shared/db/users';
import {
randomCredentialPayload as payload,
randomCredentialPayload,
randomName,
} from '../shared/random';
import * as testDb from '../shared/test-db';
import type { SuperAgentTest } from '../shared/types';
import { setupTestServer } from '../shared/utils';
const { any } = expect;

View File

@@ -1,13 +1,15 @@
import type { User } from '@/databases/entities/user';
import Container from 'typedi';
import { CredentialsService } from '@/credentials/credentials.service';
import type { CredentialsEntity } from '@/databases/entities/credentials-entity';
import type { User } from '@/databases/entities/user';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { createTeamProject, linkUserToProject } from '@test-integration/db/projects';
import { saveCredential, shareCredentialWithUsers } from '../shared/db/credentials';
import { createMember } from '../shared/db/users';
import { randomCredentialPayload } from '../shared/random';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import Container from 'typedi';
import { CredentialsService } from '@/credentials/credentials.service';
import * as testDb from '../shared/test-db';
import { createTeamProject, linkUserToProject } from '@test-integration/db/projects';
const credentialPayload = randomCredentialPayload();
let memberWhoOwnsCredential: User;

View File

@@ -1,11 +1,13 @@
import Container from 'typedi';
import * as testDb from './shared/test-db';
import { CtaService } from '@/services/cta.service';
import { createUser } from './shared/db/users';
import { createManyWorkflows } from './shared/db/workflows';
import type { User } from '@/databases/entities/user';
import { createWorkflowStatisticsItem } from './shared/db/workflow-statistics';
import { StatisticsNames } from '@/databases/entities/workflow-statistics';
import { CtaService } from '@/services/cta.service';
import { createUser } from './shared/db/users';
import { createWorkflowStatisticsItem } from './shared/db/workflow-statistics';
import { createManyWorkflows } from './shared/db/workflows';
import * as testDb from './shared/test-db';
describe('CtaService', () => {
let ctaService: CtaService;

View File

@@ -1,8 +1,10 @@
import Container from 'typedi';
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
import { ExecutionDataRepository } from '@/databases/repositories/execution-data.repository';
import * as testDb from '../../shared/test-db';
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
import { createWorkflow } from '../../shared/db/workflows';
import * as testDb from '../../shared/test-db';
describe('ExecutionRepository', () => {
beforeAll(async () => {

View File

@@ -1,11 +1,13 @@
import { EntityNotFoundError } from '@n8n/typeorm';
import Container from 'typedi';
import { AuthIdentity } from '@/databases/entities/auth-identity';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { UserRepository } from '@/databases/repositories/user.repository';
import { createTeamProject } from '../../shared/db/projects';
import { createMember, createOwner } from '../../shared/db/users';
import * as testDb from '../../shared/test-db';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { EntityNotFoundError } from '@n8n/typeorm';
import { createTeamProject } from '../../shared/db/projects';
import { AuthIdentity } from '@/databases/entities/auth-identity';
import { UserRepository } from '@/databases/repositories/user.repository';
describe('ProjectRepository', () => {
beforeAll(async () => {

View File

@@ -2,12 +2,12 @@ import Container from 'typedi';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import * as testDb from '../../shared/test-db';
import {
createWorkflowWithTrigger,
createWorkflow,
getAllWorkflows,
} from '../../shared/db/workflows';
import * as testDb from '../../shared/test-db';
describe('WorkflowRepository', () => {
beforeAll(async () => {

View File

@@ -1,15 +1,15 @@
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { ActiveWorkflowManager } from '@/active-workflow-manager';
import { generateNanoId } from '@/databases/utils/generators';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { OrchestrationService } from '@/services/orchestration.service';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { generateNanoId } from '@/databases/utils/generators';
import { MultiMainSetup } from '@/services/orchestration/main/multi-main-setup.ee';
import { OrchestrationService } from '@/services/orchestration.service';
import { mockInstance } from '../shared/mocking';
import { randomName } from './shared/random';
import { setupTestServer } from './shared/utils';
import { createOwner } from './shared/db/users';
import { randomName } from './shared/random';
import type { SuperAgentTest } from './shared/types';
import { setupTestServer } from './shared/utils';
import { mockInstance } from '../shared/mocking';
describe('DebugController', () => {
const workflowRepository = mockInstance(WorkflowRepository);

View File

@@ -1,23 +1,24 @@
import { mock } from 'jest-mock-extended';
import { Cipher } from 'n8n-core';
import type { InstanceSettings } from 'n8n-core';
import * as utils from 'n8n-workflow';
import { nanoid } from 'nanoid';
import fsp from 'node:fs/promises';
import Container from 'typedi';
import { mock } from 'jest-mock-extended';
import * as utils from 'n8n-workflow';
import { Cipher } from 'n8n-core';
import { nanoid } from 'nanoid';
import type { InstanceSettings } from 'n8n-core';
import * as testDb from '../shared/test-db';
import { SourceControlImportService } from '@/environments/source-control/source-control-import.service.ee';
import { createMember, getGlobalOwner } from '../shared/db/users';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { mockInstance } from '../../shared/mocking';
import type { SourceControlledFile } from '@/environments/source-control/types/source-controlled-file';
import type { ExportableCredential } from '@/environments/source-control/types/exportable-credential';
import { createTeamProject, getPersonalProject } from '../shared/db/projects';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { saveCredential } from '../shared/db/credentials';
import { randomCredentialPayload } from '../shared/random';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { SourceControlImportService } from '@/environments/source-control/source-control-import.service.ee';
import type { ExportableCredential } from '@/environments/source-control/types/exportable-credential';
import type { SourceControlledFile } from '@/environments/source-control/types/source-controlled-file';
import { mockInstance } from '../../shared/mocking';
import { saveCredential } from '../shared/db/credentials';
import { createTeamProject, getPersonalProject } from '../shared/db/projects';
import { createMember, getGlobalOwner } from '../shared/db/users';
import { randomCredentialPayload } from '../shared/random';
import * as testDb from '../shared/test-db';
describe('SourceControlImportService', () => {
let service: SourceControlImportService;

View File

@@ -1,16 +1,16 @@
import { Container } from 'typedi';
import type { User } from '@/databases/entities/user';
import config from '@/config';
import type { User } from '@/databases/entities/user';
import { SourceControlPreferencesService } from '@/environments/source-control/source-control-preferences.service.ee';
import { SourceControlService } from '@/environments/source-control/source-control.service.ee';
import type { SourceControlledFile } from '@/environments/source-control/types/source-controlled-file';
import { Telemetry } from '@/telemetry';
import { mockInstance } from '@test/mocking';
import * as utils from '../shared/utils';
import { createUser } from '../shared/db/users';
import type { SuperAgentTest } from '../shared/types';
import { mockInstance } from '@test/mocking';
import { Telemetry } from '@/telemetry';
import * as utils from '../shared/utils';
let authOwnerAgent: SuperAgentTest;
let owner: User;

View File

@@ -1,7 +1,4 @@
import { Container } from 'typedi';
import axios from 'axios';
import syslog from 'syslog-client';
import { v4 as uuid } from 'uuid';
import type {
MessageEventBusDestinationSentryOptions,
MessageEventBusDestinationSyslogOptions,
@@ -12,21 +9,24 @@ import {
defaultMessageEventBusDestinationSyslogOptions,
defaultMessageEventBusDestinationWebhookOptions,
} from 'n8n-workflow';
import syslog from 'syslog-client';
import { Container } from 'typedi';
import { v4 as uuid } from 'uuid';
import type { User } from '@/databases/entities/user';
import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus';
import type { EventNamesTypes } from '@/eventbus/event-message-classes';
import { EventMessageAudit } from '@/eventbus/event-message-classes/event-message-audit';
import { EventMessageGeneric } from '@/eventbus/event-message-classes/event-message-generic';
import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus';
import type { MessageEventBusDestinationSentry } from '@/eventbus/message-event-bus-destination/message-event-bus-destination-sentry.ee';
import type { MessageEventBusDestinationSyslog } from '@/eventbus/message-event-bus-destination/message-event-bus-destination-syslog.ee';
import type { MessageEventBusDestinationWebhook } from '@/eventbus/message-event-bus-destination/message-event-bus-destination-webhook.ee';
import type { MessageEventBusDestinationSentry } from '@/eventbus/message-event-bus-destination/message-event-bus-destination-sentry.ee';
import { EventMessageAudit } from '@/eventbus/event-message-classes/event-message-audit';
import type { EventNamesTypes } from '@/eventbus/event-message-classes';
import { ExecutionRecoveryService } from '@/executions/execution-recovery.service';
import * as utils from './shared/utils';
import { createUser } from './shared/db/users';
import { mockInstance } from '../shared/mocking';
import type { SuperAgentTest } from './shared/types';
import * as utils from './shared/utils';
import { mockInstance } from '../shared/mocking';
jest.unmock('@/eventbus/message-event-bus/message-event-bus');
jest.mock('axios');

View File

@@ -2,10 +2,10 @@ import type { User } from '@/databases/entities/user';
import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus';
import { ExecutionRecoveryService } from '@/executions/execution-recovery.service';
import * as utils from './shared/utils/';
import { createUser } from './shared/db/users';
import { mockInstance } from '../shared/mocking';
import type { SuperAgentTest } from './shared/types';
import * as utils from './shared/utils/';
import { mockInstance } from '../shared/mocking';
/**
* NOTE: due to issues with mocking the MessageEventBus in multiple tests running in parallel,

View File

@@ -1,13 +1,15 @@
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
import { ExecutionService } from '@/executions/execution.service';
import { mock } from 'jest-mock-extended';
import Container from 'typedi';
import { createWorkflow } from './shared/db/workflows';
import { annotateExecution, createAnnotationTags, createExecution } from './shared/db/executions';
import * as testDb from './shared/test-db';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import type { ExecutionSummaries } from '@/executions/execution.types';
import { ExecutionMetadataRepository } from '@/databases/repositories/execution-metadata.repository';
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { ExecutionService } from '@/executions/execution.service';
import type { ExecutionSummaries } from '@/executions/execution.types';
import { annotateExecution, createAnnotationTags, createExecution } from './shared/db/executions';
import { createWorkflow } from './shared/db/workflows';
import * as testDb from './shared/test-db';
describe('ExecutionService', () => {
let executionService: ExecutionService;

View File

@@ -1,16 +1,15 @@
import { ConcurrencyControlService } from '@/concurrency/concurrency-control.service';
import type { User } from '@/databases/entities/user';
import { WaitTracker } from '@/wait-tracker';
import { createSuccessfulExecution, getAllExecutions } from './shared/db/executions';
import { createTeamProject, linkUserToProject } from './shared/db/projects';
import { createMember, createOwner } from './shared/db/users';
import { createWorkflow, shareWorkflowWithUsers } from './shared/db/workflows';
import * as testDb from './shared/test-db';
import { setupTestServer } from './shared/utils';
import { mockInstance } from '../shared/mocking';
import { ConcurrencyControlService } from '@/concurrency/concurrency-control.service';
import { WaitTracker } from '@/wait-tracker';
import { createTeamProject, linkUserToProject } from './shared/db/projects';
mockInstance(WaitTracker);
mockInstance(ConcurrencyControlService, {
// @ts-expect-error Private property

View File

@@ -1,27 +1,27 @@
import { Container } from 'typedi';
import { mock } from 'jest-mock-extended';
import { Cipher } from 'n8n-core';
import { jsonParse, type IDataObject } from 'n8n-workflow';
import { mock } from 'jest-mock-extended';
import { Container } from 'typedi';
import { License } from '@/license';
import type { ExternalSecretsSettings, SecretsProviderState } from '@/interfaces';
import { SettingsRepository } from '@/databases/repositories/settings.repository';
import { ExternalSecretsProviders } from '@/external-secrets/external-secrets-providers.ee';
import config from '@/config';
import { ExternalSecretsManager } from '@/external-secrets/external-secrets-manager.ee';
import { CREDENTIAL_BLANKING_VALUE } from '@/constants';
import { SettingsRepository } from '@/databases/repositories/settings.repository';
import type { EventService } from '@/events/event.service';
import { ExternalSecretsManager } from '@/external-secrets/external-secrets-manager.ee';
import { ExternalSecretsProviders } from '@/external-secrets/external-secrets-providers.ee';
import type { ExternalSecretsSettings, SecretsProviderState } from '@/interfaces';
import { License } from '@/license';
import { mockInstance } from '../../shared/mocking';
import { setupTestServer } from '../shared/utils';
import { createOwner, createUser } from '../shared/db/users';
import {
DummyProvider,
FailedProvider,
MockProviders,
TestFailProvider,
} from '../../shared/external-secrets/utils';
import { mockInstance } from '../../shared/mocking';
import { createOwner, createUser } from '../shared/db/users';
import type { SuperAgentTest } from '../shared/types';
import type { EventService } from '@/events/event.service';
import { setupTestServer } from '../shared/utils';
let authOwnerAgent: SuperAgentTest;
let authMemberAgent: SuperAgentTest;

View File

@@ -1,6 +1,7 @@
import * as testDb from './shared/test-db';
import { setupTestServer } from '@test-integration/utils';
import * as testDb from './shared/test-db';
const testServer = setupTestServer({ endpointGroups: ['health'] });
describe('HealthcheckController', () => {

View File

@@ -1,17 +1,18 @@
import Container from 'typedi';
import { mock } from 'jest-mock-extended';
import { v4 as uuid } from 'uuid';
import type { INode } from 'n8n-workflow';
import Container from 'typedi';
import { v4 as uuid } from 'uuid';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { TagRepository } from '@/databases/repositories/tag.repository';
import { ImportService } from '@/services/import.service';
import type { Project } from '@/databases/entities/project';
import { TagEntity } from '@/databases/entities/tag-entity';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import type { User } from '@/databases/entities/user';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { TagRepository } from '@/databases/repositories/tag.repository';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { ImportService } from '@/services/import.service';
import * as testDb from './shared/test-db';
import { mockInstance } from '../shared/mocking';
import { getPersonalProject } from './shared/db/projects';
import { createMember, createOwner } from './shared/db/users';
import {
createWorkflow,
@@ -19,10 +20,8 @@ import {
getWorkflowById,
newWorkflow,
} from './shared/db/workflows';
import type { User } from '@/databases/entities/user';
import type { Project } from '@/databases/entities/project';
import { getPersonalProject } from './shared/db/projects';
import * as testDb from './shared/test-db';
import { mockInstance } from '../shared/mocking';
describe('ImportService', () => {
let importService: ImportService;

View File

@@ -1,24 +1,24 @@
import { Container } from 'typedi';
import type { Entry as LdapUser } from 'ldapts';
import { Not } from '@n8n/typeorm';
import type { Entry as LdapUser } from 'ldapts';
import { Cipher } from 'n8n-core';
import { Container } from 'typedi';
import config from '@/config';
import type { User } from '@/databases/entities/user';
import { UserRepository } from '@/databases/repositories/user.repository';
import { AuthProviderSyncHistoryRepository } from '@/databases/repositories/auth-provider-sync-history.repository';
import { UserRepository } from '@/databases/repositories/user.repository';
import { LDAP_DEFAULT_CONFIGURATION } from '@/ldap/constants';
import { LdapService } from '@/ldap/ldap.service.ee';
import { saveLdapSynchronization } from '@/ldap/helpers.ee';
import { LdapService } from '@/ldap/ldap.service.ee';
import { getCurrentAuthenticationMethod, setCurrentAuthenticationMethod } from '@/sso/sso-helpers';
import { randomEmail, randomName, uniqueId } from './../shared/random';
import * as testDb from '../shared/test-db';
import * as utils from '../shared/utils/';
import { createLdapUser, createUser, getAllUsers, getLdapIdentities } from '../shared/db/users';
import { getPersonalProject } from '../shared/db/projects';
import { createLdapUser, createUser, getAllUsers, getLdapIdentities } from '../shared/db/users';
import { createLdapConfig, defaultLdapConfig } from '../shared/ldap';
import * as testDb from '../shared/test-db';
import type { SuperAgentTest } from '../shared/types';
import * as utils from '../shared/utils/';
jest.mock('@/telemetry');

View File

@@ -1,11 +1,13 @@
import { LicenseMetricsRepository } from '@/databases/repositories/license-metrics.repository';
import { createAdmin, createMember, createOwner, createUser } from './shared/db/users';
import * as testDb from './shared/test-db';
import Container from 'typedi';
import { createManyWorkflows } from './shared/db/workflows';
import { createManyCredentials } from './shared/db/credentials';
import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository';
import { StatisticsNames } from '@/databases/entities/workflow-statistics';
import { LicenseMetricsRepository } from '@/databases/repositories/license-metrics.repository';
import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository';
import { createManyCredentials } from './shared/db/credentials';
import { createAdmin, createMember, createOwner, createUser } from './shared/db/users';
import { createManyWorkflows } from './shared/db/workflows';
import * as testDb from './shared/test-db';
describe('LicenseMetricsRepository', () => {
let licenseMetricsRepository: LicenseMetricsRepository;

View File

@@ -1,14 +1,15 @@
import nock from 'nock';
import config from '@/config';
import { RESPONSE_ERROR_MESSAGES } from '@/constants';
import type { User } from '@/databases/entities/user';
import type { ILicensePostResponse, ILicenseReadResponse } from '@/interfaces';
import { License } from '@/license';
import * as testDb from './shared/test-db';
import * as utils from './shared/utils/';
import { createUserShell } from './shared/db/users';
import * as testDb from './shared/test-db';
import type { SuperAgentTest } from './shared/types';
import * as utils from './shared/utils/';
const MOCK_SERVER_URL = 'https://server.com/v1';
const MOCK_RENEW_OFFSET = 259200;

View File

@@ -1,20 +1,20 @@
import { Container } from 'typedi';
import { GlobalConfig } from '@n8n/config';
import { IsNull } from '@n8n/typeorm';
import type { IPersonalizationSurveyAnswersV4 } from 'n8n-workflow';
import { Container } from 'typedi';
import validator from 'validator';
import type { User } from '@/databases/entities/user';
import { UserRepository } from '@/databases/repositories/user.repository';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { UserRepository } from '@/databases/repositories/user.repository';
import { mockInstance } from '@test/mocking';
import { SUCCESS_RESPONSE_BODY } from './shared/constants';
import { addApiKey, createOwner, createUser, createUserShell } from './shared/db/users';
import { randomApiKey, randomEmail, randomName, randomValidPassword } from './shared/random';
import * as testDb from './shared/test-db';
import * as utils from './shared/utils/';
import { addApiKey, createOwner, createUser, createUserShell } from './shared/db/users';
import type { SuperAgentTest } from './shared/types';
import { mockInstance } from '@test/mocking';
import { GlobalConfig } from '@n8n/config';
import type { IPersonalizationSurveyAnswersV4 } from 'n8n-workflow';
import * as utils from './shared/utils/';
const testServer = utils.setupTestServer({ endpointGroups: ['me'] });

View File

@@ -1,5 +1,5 @@
import Container from 'typedi';
import { randomInt, randomString } from 'n8n-workflow';
import Container from 'typedi';
import { AuthService } from '@/auth/auth.service';
import config from '@/config';
@@ -7,10 +7,10 @@ import type { User } from '@/databases/entities/user';
import { AuthUserRepository } from '@/databases/repositories/auth-user.repository';
import { TOTPService } from '@/mfa/totp.service';
import { createUser, createUserWithMfaEnabled } from '../shared/db/users';
import { randomValidPassword, uniqueId } from '../shared/random';
import * as testDb from '../shared/test-db';
import * as utils from '../shared/utils';
import { randomValidPassword, uniqueId } from '../shared/random';
import { createUser, createUserWithMfaEnabled } from '../shared/db/users';
jest.mock('@/telemetry');

View File

@@ -1,7 +1,8 @@
import { createServer } from 'http';
import { gzipSync, deflateSync } from 'zlib';
import type { Request, Response } from 'express';
import { createServer } from 'http';
import request from 'supertest';
import { gzipSync, deflateSync } from 'zlib';
import { rawBodyReader, bodyParser } from '@/middlewares/body-parser';
describe('bodyParser', () => {

View File

@@ -5,6 +5,7 @@ import config from '@/config';
import type { User } from '@/databases/entities/user';
import { UserRepository } from '@/databases/repositories/user.repository';
import { createUserShell } from './shared/db/users';
import {
randomEmail,
randomInvalidPassword,
@@ -13,7 +14,6 @@ import {
} from './shared/random';
import * as testDb from './shared/test-db';
import * as utils from './shared/utils/';
import { createUserShell } from './shared/db/users';
const testServer = utils.setupTestServer({ endpointGroups: ['owner'] });

View File

@@ -1,22 +1,21 @@
import { v4 as uuid } from 'uuid';
import { compare } from 'bcryptjs';
import { Container } from 'typedi';
import { mock } from 'jest-mock-extended';
import { randomString } from 'n8n-workflow';
import { Container } from 'typedi';
import { v4 as uuid } from 'uuid';
import { AuthService } from '@/auth/auth.service';
import { License } from '@/license';
import config from '@/config';
import type { User } from '@/databases/entities/user';
import { setCurrentAuthenticationMethod } from '@/sso/sso-helpers';
import { ExternalHooks } from '@/external-hooks';
import { JwtService } from '@/services/jwt.service';
import { UserManagementMailer } from '@/user-management/email';
import { UserRepository } from '@/databases/repositories/user.repository';
import { ExternalHooks } from '@/external-hooks';
import { License } from '@/license';
import { JwtService } from '@/services/jwt.service';
import { PasswordUtility } from '@/services/password.utility';
import { setCurrentAuthenticationMethod } from '@/sso/sso-helpers';
import { UserManagementMailer } from '@/user-management/email';
import { mockInstance } from '../shared/mocking';
import { getAuthToken, setupTestServer } from './shared/utils';
import { createUser } from './shared/db/users';
import {
randomEmail,
randomInvalidPassword,
@@ -24,7 +23,8 @@ import {
randomValidPassword,
} from './shared/random';
import * as testDb from './shared/test-db';
import { createUser } from './shared/db/users';
import { getAuthToken, setupTestServer } from './shared/utils';
import { mockInstance } from '../shared/mocking';
config.set('userManagement.jwtSecret', randomString(5, 10));

View File

@@ -1,26 +1,27 @@
import { v4 as uuid } from 'uuid';
import { Container } from 'typedi';
import type { INode, INodeTypeData } from 'n8n-workflow';
import { randomInt } from 'n8n-workflow';
import { Container } from 'typedi';
import { v4 as uuid } from 'uuid';
import type { Project } from '@/databases/entities/project';
import type { User } from '@/databases/entities/user';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { NodeTypes } from '@/node-types';
import { OwnershipService } from '@/services/ownership.service';
import { PermissionChecker } from '@/user-management/permission-checker';
import { mockInstance } from '../shared/mocking';
import { affixRoleToSaveCredential } from './shared/db/credentials';
import { getPersonalProject } from './shared/db/projects';
import { createOwner, createUser } from './shared/db/users';
import { randomCredentialPayload as randomCred } from './shared/random';
import * as testDb from './shared/test-db';
import type { SaveCredentialFunction } from './shared/types';
import { affixRoleToSaveCredential } from './shared/db/credentials';
import { createOwner, createUser } from './shared/db/users';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { getPersonalProject } from './shared/db/projects';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import type { Project } from '@/databases/entities/project';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { mockInstance } from '../shared/mocking';
const ownershipService = mockInstance(OwnershipService);

View File

@@ -1,6 +1,24 @@
import * as testDb from './shared/test-db';
import * as utils from './shared/utils/';
import { createMember, createOwner, createUser } from './shared/db/users';
import type { Scope } from '@n8n/permissions';
import { EntityNotFoundError } from '@n8n/typeorm';
import Container from 'typedi';
import { ActiveWorkflowManager } from '@/active-workflow-manager';
import type { Project } from '@/databases/entities/project';
import type { ProjectRole } from '@/databases/entities/project-relation';
import type { GlobalRole } from '@/databases/entities/user';
import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { getWorkflowById } from '@/public-api/v1/handlers/workflows/workflows.service';
import { CacheService } from '@/services/cache/cache.service';
import { RoleService } from '@/services/role.service';
import {
getCredentialById,
saveCredential,
shareCredentialWithProjects,
} from './shared/db/credentials';
import {
createTeamProject,
linkUserToProject,
@@ -8,28 +26,12 @@ import {
findProject,
getProjectRelations,
} from './shared/db/projects';
import Container from 'typedi';
import type { Project } from '@/databases/entities/project';
import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository';
import type { ProjectRole } from '@/databases/entities/project-relation';
import { EntityNotFoundError } from '@n8n/typeorm';
import { createMember, createOwner, createUser } from './shared/db/users';
import { createWorkflow, shareWorkflowWithProjects } from './shared/db/workflows';
import {
getCredentialById,
saveCredential,
shareCredentialWithProjects,
} from './shared/db/credentials';
import { randomCredentialPayload } from './shared/random';
import { getWorkflowById } from '@/public-api/v1/handlers/workflows/workflows.service';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import type { GlobalRole } from '@/databases/entities/user';
import type { Scope } from '@n8n/permissions';
import { CacheService } from '@/services/cache/cache.service';
import * as testDb from './shared/test-db';
import * as utils from './shared/utils/';
import { mockInstance } from '../shared/mocking';
import { ActiveWorkflowManager } from '@/active-workflow-manager';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { RoleService } from '@/services/role.service';
const testServer = utils.setupTestServer({
endpointGroups: ['project'],

View File

@@ -1,10 +1,12 @@
import Container from 'typedi';
import { ProjectService } from '@/services/project.service';
import * as testDb from './shared/test-db';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { ProjectService } from '@/services/project.service';
import { linkUserToProject, createTeamProject } from './shared/db/projects';
import { createUser } from './shared/db/users';
import { createWorkflow } from './shared/db/workflows';
import { linkUserToProject, createTeamProject } from './shared/db/projects';
import * as testDb from './shared/test-db';
describe('ProjectService', () => {
let projectService: ProjectService;

View File

@@ -1,13 +1,14 @@
import { Container } from 'typedi';
import { GlobalConfig } from '@n8n/config';
import { parse as semverParse } from 'semver';
import request, { type Response } from 'supertest';
import { Container } from 'typedi';
import { N8N_VERSION } from '@/constants';
import { PrometheusMetricsService } from '@/metrics/prometheus-metrics.service';
import { setupTestServer } from './shared/utils';
import { GlobalConfig } from '@n8n/config';
import config from '@/config';
import { N8N_VERSION } from '@/constants';
import { EventService } from '@/events/event.service';
import { PrometheusMetricsService } from '@/metrics/prometheus-metrics.service';
import { setupTestServer } from './shared/utils';
jest.unmock('@/eventbus/message-event-bus/message-event-bus');

View File

@@ -1,24 +1,24 @@
import config from '@/config';
import { mock } from 'jest-mock-extended';
import { BinaryDataService, InstanceSettings } from 'n8n-core';
import type { ExecutionStatus } from 'n8n-workflow';
import Container from 'typedi';
import * as testDb from './shared/test-db';
import config from '@/config';
import { TIME } from '@/constants';
import type { ExecutionEntity } from '@/databases/entities/execution-entity';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
import { TIME } from '@/constants';
import { PruningService } from '@/services/pruning.service';
import { Logger } from '@/logger';
import { PruningService } from '@/services/pruning.service';
import { mockInstance } from '../shared/mocking';
import { createWorkflow } from './shared/db/workflows';
import {
annotateExecution,
createExecution,
createSuccessfulExecution,
} from './shared/db/executions';
import { mock } from 'jest-mock-extended';
import { createWorkflow } from './shared/db/workflows';
import * as testDb from './shared/test-db';
import { mockInstance } from '../shared/mocking';
describe('softDeleteOnPruningCycle()', () => {
let pruningService: PruningService;

View File

@@ -1,18 +1,18 @@
import { Container } from 'typedi';
import { randomString } from 'n8n-workflow';
import { Container } from 'typedi';
import type { User } from '@/databases/entities/user';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { createTeamProject } from '@test-integration/db/projects';
import { randomApiKey, randomName } from '../shared/random';
import * as utils from '../shared/utils/';
import type { CredentialPayload, SaveCredentialFunction } from '../shared/types';
import * as testDb from '../shared/test-db';
import { affixRoleToSaveCredential, createCredentials } from '../shared/db/credentials';
import { addApiKey, createUser, createUserShell } from '../shared/db/users';
import { randomApiKey, randomName } from '../shared/random';
import * as testDb from '../shared/test-db';
import type { CredentialPayload, SaveCredentialFunction } from '../shared/types';
import type { SuperAgentTest } from '../shared/types';
import { createTeamProject } from '@test-integration/db/projects';
import * as utils from '../shared/utils/';
let owner: User;
let member: User;

View File

@@ -1,15 +1,10 @@
import type { User } from '@/databases/entities/user';
import type { ActiveWorkflowManager } from '@/active-workflow-manager';
import type { ExecutionEntity } from '@/databases/entities/execution-entity';
import type { User } from '@/databases/entities/user';
import { Telemetry } from '@/telemetry';
import { mockInstance } from '@test/mocking';
import { createTeamProject } from '@test-integration/db/projects';
import { randomApiKey } from '../shared/random';
import * as utils from '../shared/utils/';
import * as testDb from '../shared/test-db';
import { createUser } from '../shared/db/users';
import {
createManyWorkflows,
createWorkflow,
shareWorkflowWithUsers,
} from '../shared/db/workflows';
import {
createErrorExecution,
createExecution,
@@ -17,11 +12,16 @@ import {
createSuccessfulExecution,
createWaitingExecution,
} from '../shared/db/executions';
import { createUser } from '../shared/db/users';
import {
createManyWorkflows,
createWorkflow,
shareWorkflowWithUsers,
} from '../shared/db/workflows';
import { randomApiKey } from '../shared/random';
import * as testDb from '../shared/test-db';
import type { SuperAgentTest } from '../shared/types';
import { mockInstance } from '@test/mocking';
import { Telemetry } from '@/telemetry';
import { createTeamProject } from '@test-integration/db/projects';
import type { ExecutionEntity } from '@/databases/entities/execution-entity';
import * as utils from '../shared/utils/';
let owner: User;
let user1: User;

View File

@@ -1,10 +1,11 @@
import { setupTestServer } from '@test-integration/utils';
import { createMember, createOwner } from '@test-integration/db/users';
import * as testDb from '../shared/test-db';
import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error';
import { createTeamProject, getProjectByNameOrFail } from '@test-integration/db/projects';
import { mockInstance } from '@test/mocking';
import { Telemetry } from '@/telemetry';
import { mockInstance } from '@test/mocking';
import { createTeamProject, getProjectByNameOrFail } from '@test-integration/db/projects';
import { createMember, createOwner } from '@test-integration/db/users';
import { setupTestServer } from '@test-integration/utils';
import * as testDb from '../shared/test-db';
describe('Projects in Public API', () => {
const testServer = setupTestServer({ endpointGroups: ['publicApi'] });

View File

@@ -1,13 +1,14 @@
import { Container } from 'typedi';
import type { User } from '@/databases/entities/user';
import { TagRepository } from '@/databases/repositories/tag.repository';
import { randomApiKey } from '../shared/random';
import * as utils from '../shared/utils/';
import * as testDb from '../shared/test-db';
import { createUser } from '../shared/db/users';
import { createTag } from '../shared/db/tags';
import { createUser } from '../shared/db/users';
import { randomApiKey } from '../shared/random';
import * as testDb from '../shared/test-db';
import type { SuperAgentTest } from '../shared/types';
import * as utils from '../shared/utils/';
let owner: User;
let member: User;

View File

@@ -1,16 +1,16 @@
import validator from 'validator';
import { v4 as uuid } from 'uuid';
import validator from 'validator';
import type { User } from '@/databases/entities/user';
import { License } from '@/license';
import { createTeamProject, linkUserToProject } from '@test-integration/db/projects';
import { mockInstance } from '../../shared/mocking';
import { randomApiKey } from '../shared/random';
import * as utils from '../shared/utils/';
import * as testDb from '../shared/test-db';
import { createOwner, createUser, createUserShell } from '../shared/db/users';
import { randomApiKey } from '../shared/random';
import * as testDb from '../shared/test-db';
import type { SuperAgentTest } from '../shared/types';
import { createTeamProject, linkUserToProject } from '@test-integration/db/projects';
import type { User } from '@/databases/entities/user';
import * as utils from '../shared/utils/';
mockInstance(License, {
getUsersLimit: jest.fn().mockReturnValue(-1),

View File

@@ -1,9 +1,10 @@
import { setupTestServer } from '@test-integration/utils';
import * as testDb from '../shared/test-db';
import { createMember, createOwner, getUserById } from '@test-integration/db/users';
import { mockInstance } from '@test/mocking';
import { Telemetry } from '@/telemetry';
import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error';
import { Telemetry } from '@/telemetry';
import { mockInstance } from '@test/mocking';
import { createMember, createOwner, getUserById } from '@test-integration/db/users';
import { setupTestServer } from '@test-integration/utils';
import * as testDb from '../shared/test-db';
describe('Users in Public API', () => {
const testServer = setupTestServer({ endpointGroups: ['publicApi'] });

View File

@@ -1,8 +1,9 @@
import { setupTestServer } from '@test-integration/utils';
import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error';
import { createOwner } from '@test-integration/db/users';
import { createVariable, getVariableOrFail } from '@test-integration/db/variables';
import { setupTestServer } from '@test-integration/utils';
import * as testDb from '../shared/test-db';
import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error';
describe('Variables in Public API', () => {
const testServer = setupTestServer({ endpointGroups: ['publicApi'] });

View File

@@ -1,28 +1,28 @@
import { Container } from 'typedi';
import type { INode } from 'n8n-workflow';
import { Container } from 'typedi';
import { ActiveWorkflowManager } from '@/active-workflow-manager';
import config from '@/config';
import { STARTING_NODES } from '@/constants';
import type { Project } from '@/databases/entities/project';
import type { TagEntity } from '@/databases/entities/tag-entity';
import type { User } from '@/databases/entities/user';
import type { Project } from '@/databases/entities/project';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
import { ActiveWorkflowManager } from '@/active-workflow-manager';
import { ExecutionService } from '@/executions/execution.service';
import { ProjectService } from '@/services/project.service';
import { Telemetry } from '@/telemetry';
import { createTeamProject } from '@test-integration/db/projects';
import { randomApiKey } from '../shared/random';
import * as utils from '../shared/utils/';
import * as testDb from '../shared/test-db';
import { mockInstance } from '../../shared/mocking';
import { createTag } from '../shared/db/tags';
import { createUser } from '../shared/db/users';
import { createWorkflow, createWorkflowWithTrigger } from '../shared/db/workflows';
import { createTag } from '../shared/db/tags';
import { mockInstance } from '../../shared/mocking';
import { randomApiKey } from '../shared/random';
import * as testDb from '../shared/test-db';
import type { SuperAgentTest } from '../shared/types';
import { Telemetry } from '@/telemetry';
import { ProjectService } from '@/services/project.service';
import { createTeamProject } from '@test-integration/db/projects';
import * as utils from '../shared/utils/';
mockInstance(Telemetry);

View File

@@ -1,15 +1,15 @@
import { Container } from 'typedi';
import type { Scope } from '@n8n/permissions';
import { Container } from 'typedi';
import type { GlobalRole } from '@/databases/entities/user';
import type { ProjectRole } from '@/databases/entities/project-relation';
import type { CredentialSharingRole } from '@/databases/entities/shared-credentials';
import type { WorkflowSharingRole } from '@/databases/entities/shared-workflow';
import type { GlobalRole } from '@/databases/entities/user';
import { RoleService } from '@/services/role.service';
import * as utils from './shared/utils/';
import { createMember } from './shared/db/users';
import type { SuperAgentTest } from './shared/types';
import * as utils from './shared/utils/';
const testServer = utils.setupTestServer({
endpointGroups: ['role'],

View File

@@ -1,7 +1,7 @@
import * as helpers from '@/sso/saml/saml-helpers';
import type { SamlUserAttributes } from '@/sso/saml/types/saml-user-attributes';
import { getPersonalProject } from '../shared/db/projects';
import { getPersonalProject } from '../shared/db/projects';
import * as testDb from '../shared/test-db';
beforeAll(async () => {

View File

@@ -2,11 +2,11 @@ import type { User } from '@/databases/entities/user';
import { setSamlLoginEnabled } from '@/sso/saml/saml-helpers';
import { getCurrentAuthenticationMethod, setCurrentAuthenticationMethod } from '@/sso/sso-helpers';
import { randomEmail, randomName, randomValidPassword } from '../shared/random';
import * as utils from '../shared/utils/';
import { sampleConfig } from './sample-metadata';
import { createOwner, createUser } from '../shared/db/users';
import { randomEmail, randomName, randomValidPassword } from '../shared/random';
import type { SuperAgentTest } from '../shared/types';
import * as utils from '../shared/utils/';
let someUser: User;
let owner: User;

View File

@@ -1,15 +1,17 @@
import Container from 'typedi';
import { v4 as uuid } from 'uuid';
import config from '@/config';
import { SecurityAuditService } from '@/security-audit/security-audit.service';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { ExecutionDataRepository } from '@/databases/repositories/execution-data.repository';
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { generateNanoId } from '@/databases/utils/generators';
import { CREDENTIALS_REPORT } from '@/security-audit/constants';
import { SecurityAuditService } from '@/security-audit/security-audit.service';
import { getRiskSection } from './utils';
import * as testDb from '../shared/test-db';
import { generateNanoId } from '@/databases/utils/generators';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import Container from 'typedi';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
import { ExecutionDataRepository } from '@/databases/repositories/execution-data.repository';
let securityAuditService: SecurityAuditService;

View File

@@ -1,15 +1,17 @@
import Container from 'typedi';
import { v4 as uuid } from 'uuid';
import { SecurityAuditService } from '@/security-audit/security-audit.service';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { generateNanoId } from '@/databases/utils/generators';
import {
DATABASE_REPORT,
SQL_NODE_TYPES,
SQL_NODE_TYPES_WITH_QUERY_PARAMS,
} from '@/security-audit/constants';
import { SecurityAuditService } from '@/security-audit/security-audit.service';
import { getRiskSection, saveManualTriggerWorkflow } from './utils';
import * as testDb from '../shared/test-db';
import { generateNanoId } from '@/databases/utils/generators';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import Container from 'typedi';
let securityAuditService: SecurityAuditService;

View File

@@ -1,10 +1,12 @@
import Container from 'typedi';
import { v4 as uuid } from 'uuid';
import { SecurityAuditService } from '@/security-audit/security-audit.service';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { FILESYSTEM_INTERACTION_NODE_TYPES, FILESYSTEM_REPORT } from '@/security-audit/constants';
import { SecurityAuditService } from '@/security-audit/security-audit.service';
import { getRiskSection, saveManualTriggerWorkflow } from './utils';
import * as testDb from '../shared/test-db';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import Container from 'typedi';
let securityAuditService: SecurityAuditService;

View File

@@ -1,6 +1,14 @@
import { NodeConnectionType } from 'n8n-workflow';
import Container from 'typedi';
import { v4 as uuid } from 'uuid';
import { SecurityAuditService } from '@/security-audit/security-audit.service';
import config from '@/config';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { generateNanoId } from '@/databases/utils/generators';
import { INSTANCE_REPORT, WEBHOOK_VALIDATOR_NODE_TYPES } from '@/security-audit/constants';
import { SecurityAuditService } from '@/security-audit/security-audit.service';
import { toReportTitle } from '@/security-audit/utils';
import {
getRiskSection,
saveManualTriggerWorkflow,
@@ -9,12 +17,6 @@ import {
simulateUpToDateInstance,
} from './utils';
import * as testDb from '../shared/test-db';
import { toReportTitle } from '@/security-audit/utils';
import config from '@/config';
import { generateNanoId } from '@/databases/utils/generators';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import Container from 'typedi';
import { NodeConnectionType } from 'n8n-workflow';
let securityAuditService: SecurityAuditService;

View File

@@ -1,15 +1,16 @@
import { v4 as uuid } from 'uuid';
import { Container } from 'typedi';
import { SecurityAuditService } from '@/security-audit/security-audit.service';
import { OFFICIAL_RISKY_NODE_TYPES, NODES_REPORT } from '@/security-audit/constants';
import { toReportTitle } from '@/security-audit/utils';
import { v4 as uuid } from 'uuid';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { NodeTypes } from '@/node-types';
import { OFFICIAL_RISKY_NODE_TYPES, NODES_REPORT } from '@/security-audit/constants';
import { SecurityAuditService } from '@/security-audit/security-audit.service';
import { toReportTitle } from '@/security-audit/utils';
import { CommunityPackagesService } from '@/services/community-packages.service';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { mockInstance } from '../../shared/mocking';
import { getRiskSection, MOCK_PACKAGE, saveManualTriggerWorkflow } from './utils';
import { mockInstance } from '../../shared/mocking';
import * as testDb from '../shared/test-db';
const nodesAndCredentials = mockInstance(LoadNodesAndCredentials);

View File

@@ -1,13 +1,14 @@
import { GlobalConfig } from '@n8n/config';
import nock from 'nock';
import Container from 'typedi';
import { v4 as uuid } from 'uuid';
import { toReportTitle } from '@/security-audit/utils';
import * as constants from '@/constants';
import type { Risk } from '@/security-audit/types';
import type { InstalledNodes } from '@/databases/entities/installed-nodes';
import type { InstalledPackages } from '@/databases/entities/installed-packages';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import Container from 'typedi';
import { GlobalConfig } from '@n8n/config';
import type { Risk } from '@/security-audit/types';
import { toReportTitle } from '@/security-audit/utils';
type GetSectionKind<C extends Risk.Category> = C extends 'instance'
? Risk.InstanceSection

View File

@@ -1,10 +1,12 @@
import * as testDb from '../shared/test-db';
import Container from 'typedi';
import { ExecutionMetadataRepository } from '@/databases/repositories/execution-metadata.repository';
import { ExecutionMetadataService } from '@/services/execution-metadata.service';
import { createExecution } from '@test-integration/db/executions';
import { createWorkflow } from '@test-integration/db/workflows';
import * as testDb from '../shared/test-db';
let executionMetadataRepository: ExecutionMetadataRepository;
let executionMetadataService: ExecutionMetadataService;

View File

@@ -1,11 +1,13 @@
import { ProjectService } from '@/services/project.service';
import * as testDb from '../shared/test-db';
import Container from 'typedi';
import { createMember } from '../shared/db/users';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository';
import type { ProjectRole } from '@/databases/entities/project-relation';
import type { Scope } from '@n8n/permissions';
import Container from 'typedi';
import type { ProjectRole } from '@/databases/entities/project-relation';
import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { ProjectService } from '@/services/project.service';
import { createMember } from '../shared/db/users';
import * as testDb from '../shared/test-db';
let projectRepository: ProjectRepository;
let projectService: ProjectService;

View File

@@ -1,11 +1,12 @@
import { WorkflowStaticDataService } from '@/workflows/workflow-static-data.service';
import * as testDb from '@test-integration/test-db';
import Container from 'typedi';
import { createWorkflow } from '@test-integration/db/workflows';
import { Workflow } from 'n8n-workflow';
import { mockInstance } from '@test/mocking';
import { NodeTypes } from '@/node-types';
import Container from 'typedi';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { NodeTypes } from '@/node-types';
import { WorkflowStaticDataService } from '@/workflows/workflow-static-data.service';
import { mockInstance } from '@test/mocking';
import { createWorkflow } from '@test-integration/db/workflows';
import * as testDb from '@test-integration/test-db';
const nodeTypes = mockInstance(NodeTypes);
let workflowStaticDataService: WorkflowStaticDataService;

View File

@@ -1,13 +1,15 @@
import { Container } from 'typedi';
import { CredentialsEntity } from '@/databases/entities/credentials-entity';
import type { Project } from '@/databases/entities/project';
import type { CredentialSharingRole } from '@/databases/entities/shared-credentials';
import type { User } from '@/databases/entities/user';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import type { CredentialSharingRole } from '@/databases/entities/shared-credentials';
import type { ICredentialsDb } from '@/interfaces';
import type { CredentialPayload } from '../types';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import type { Project } from '@/databases/entities/project';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import type { ICredentialsDb } from '@/interfaces';
import type { CredentialPayload } from '../types';
export async function encryptCredentialData(
credential: CredentialsEntity,

View File

@@ -1,15 +1,16 @@
import type { AnnotationVote } from 'n8n-workflow';
import Container from 'typedi';
import type { ExecutionData } from '@/databases/entities/execution-data';
import type { ExecutionEntity } from '@/databases/entities/execution-entity';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
import { AnnotationTagRepository } from '@/databases/repositories/annotation-tag.repository';
import { ExecutionDataRepository } from '@/databases/repositories/execution-data.repository';
import { ExecutionMetadataRepository } from '@/databases/repositories/execution-metadata.repository';
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
import { ExecutionService } from '@/executions/execution.service';
import type { AnnotationVote } from 'n8n-workflow';
import { mockInstance } from '@test/mocking';
import { Telemetry } from '@/telemetry';
import { AnnotationTagRepository } from '@/databases/repositories/annotation-tag.repository';
import { mockInstance } from '@test/mocking';
mockInstance(Telemetry);

View File

@@ -1,11 +1,12 @@
import Container from 'typedi';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { randomName } from '../random';
import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository';
import type { User } from '@/databases/entities/user';
import type { Project } from '@/databases/entities/project';
import type { ProjectRelation, ProjectRole } from '@/databases/entities/project-relation';
import type { User } from '@/databases/entities/user';
import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { randomName } from '../random';
export const createTeamProject = async (name?: string, adminUser?: User) => {
const projectRepository = Container.get(ProjectRepository);

View File

@@ -1,4 +1,5 @@
import Container from 'typedi';
import type { TagEntity } from '@/databases/entities/tag-entity';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { TagRepository } from '@/databases/repositories/tag.repository';

View File

@@ -1,14 +1,15 @@
import Container from 'typedi';
import { hash } from 'bcryptjs';
import Container from 'typedi';
import { AuthIdentity } from '@/databases/entities/auth-identity';
import { type GlobalRole, type User } from '@/databases/entities/user';
import { AuthIdentityRepository } from '@/databases/repositories/auth-identity.repository';
import { AuthUserRepository } from '@/databases/repositories/auth-user.repository';
import { UserRepository } from '@/databases/repositories/user.repository';
import { TOTPService } from '@/mfa/totp.service';
import { MfaService } from '@/mfa/mfa.service';
import { TOTPService } from '@/mfa/totp.service';
import { randomApiKey, randomEmail, randomName, randomValidPassword } from '../random';
import { AuthUserRepository } from '@/databases/repositories/auth-user.repository';
// pre-computed bcrypt hash for the string 'password', using `await hash('password', 10)`
const passwordHash = '$2a$10$njedH7S6V5898mj6p0Jr..IGY9Ms.qNwR7RbSzzX9yubJocKfvGGK';

View File

@@ -1,8 +1,9 @@
import { VariablesRepository } from '@/databases/repositories/variables.repository';
import { generateNanoId } from '@/databases/utils/generators';
import { randomString } from 'n8n-workflow';
import Container from 'typedi';
import { VariablesRepository } from '@/databases/repositories/variables.repository';
import { generateNanoId } from '@/databases/utils/generators';
export async function createVariable(key = randomString(5), value = randomString(5)) {
return await Container.get(VariablesRepository).save({ id: generateNanoId(), key, value });
}

View File

@@ -1,5 +1,6 @@
import Container from 'typedi';
import { v4 as uuid } from 'uuid';
import type { WorkflowHistory } from '@/databases/entities/workflow-history';
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';

View File

@@ -1,6 +1,7 @@
import Container from 'typedi';
import { StatisticsNames, type WorkflowStatistics } from '@/databases/entities/workflow-statistics';
import type { Workflow } from 'n8n-workflow';
import Container from 'typedi';
import { StatisticsNames, type WorkflowStatistics } from '@/databases/entities/workflow-statistics';
import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository';
export async function createWorkflowStatisticsItem(

View File

@@ -1,15 +1,15 @@
import Container from 'typedi';
import type { DeepPartial } from '@n8n/typeorm';
import { NodeConnectionType } from 'n8n-workflow';
import Container from 'typedi';
import { v4 as uuid } from 'uuid';
import { Project } from '@/databases/entities/project';
import type { SharedWorkflow, WorkflowSharingRole } from '@/databases/entities/shared-workflow';
import { User } from '@/databases/entities/user';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import type { SharedWorkflow, WorkflowSharingRole } from '@/databases/entities/shared-workflow';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { Project } from '@/databases/entities/project';
import { NodeConnectionType } from 'n8n-workflow';
export async function createManyWorkflows(
amount: number,

View File

@@ -1,9 +1,10 @@
import { LDAP_DEFAULT_CONFIGURATION, LDAP_FEATURE_NAME } from '@/ldap/constants';
import type { LdapConfig } from '@/ldap/types';
import { SettingsRepository } from '@/databases/repositories/settings.repository';
import { jsonParse } from 'n8n-workflow';
import Container from 'typedi';
import { SettingsRepository } from '@/databases/repositories/settings.repository';
import { LDAP_DEFAULT_CONFIGURATION, LDAP_FEATURE_NAME } from '@/ldap/constants';
import type { LdapConfig } from '@/ldap/types';
export const defaultLdapConfig = {
...LDAP_DEFAULT_CONFIGURATION,
loginEnabled: true,

View File

@@ -1,7 +1,8 @@
import { v4 as uuid } from 'uuid';
import { randomInt, randomString, UPPERCASE_LETTERS } from 'n8n-workflow';
import { v4 as uuid } from 'uuid';
import { MIN_PASSWORD_CHAR_LENGTH, MAX_PASSWORD_CHAR_LENGTH } from '@/constants';
import type { CredentialPayload } from './types';
export const randomApiKey = () => `n8n_api_${randomString(40)}`;

View File

@@ -1,13 +1,13 @@
import { Container } from 'typedi';
import { GlobalConfig } from '@n8n/config';
import type { DataSourceOptions, Repository } from '@n8n/typeorm';
import { DataSource as Connection } from '@n8n/typeorm';
import { GlobalConfig } from '@n8n/config';
import { kebabCase } from 'lodash';
import type { Class } from 'n8n-core';
import { randomString } from 'n8n-workflow';
import { Container } from 'typedi';
import * as Db from '@/db';
import { getOptionOverrides } from '@/databases/config';
import { kebabCase } from 'lodash';
import * as Db from '@/db';
export const testDbPrefix = 'n8n_test_';

View File

@@ -1,13 +1,14 @@
import type { Application } from 'express';
import type { Server } from 'http';
import type { ICredentialDataDecryptedObject } from 'n8n-workflow';
import type TestAgent from 'supertest/lib/agent';
import type { Server } from 'http';
import type { CredentialsEntity } from '@/databases/entities/credentials-entity';
import type { Project } from '@/databases/entities/project';
import type { User } from '@/databases/entities/user';
import type { BooleanLicenseFeature, ICredentialsDb, NumericLicenseFeature } from '@/interfaces';
import type { LicenseMocker } from './license';
import type { Project } from '@/databases/entities/project';
type EndpointGroup =
| 'health'

View File

@@ -1,11 +1,12 @@
import Container from 'typedi';
import { NODE_PACKAGE_PREFIX } from '@/constants';
import { InstalledPackages } from '@/databases/entities/installed-packages';
import { randomName } from '../random';
import { COMMUNITY_NODE_VERSION, COMMUNITY_PACKAGE_VERSION } from '../constants';
import { InstalledNodesRepository } from '@/databases/repositories/installed-nodes.repository';
import { InstalledPackagesRepository } from '@/databases/repositories/installed-packages.repository';
import Container from 'typedi';
import { COMMUNITY_NODE_VERSION, COMMUNITY_PACKAGE_VERSION } from '../constants';
import { randomName } from '../random';
export const mockPackageName = () => NODE_PACKAGE_PREFIX + randomName();

View File

@@ -1,18 +1,18 @@
import { Container } from 'typedi';
import { BinaryDataService } from 'n8n-core';
import { type INode } from 'n8n-workflow';
import { GithubApi } from 'n8n-nodes-base/credentials/GithubApi.credentials';
import { Ftp } from 'n8n-nodes-base/credentials/Ftp.credentials';
import { GithubApi } from 'n8n-nodes-base/credentials/GithubApi.credentials';
import { Cron } from 'n8n-nodes-base/nodes/Cron/Cron.node';
import { Set } from 'n8n-nodes-base/nodes/Set/Set.node';
import { Start } from 'n8n-nodes-base/nodes/Start/Start.node';
import { type INode } from 'n8n-workflow';
import type request from 'supertest';
import { Container } from 'typedi';
import { v4 as uuid } from 'uuid';
import config from '@/config';
import { AUTH_COOKIE_NAME } from '@/constants';
import { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { SettingsRepository } from '@/databases/repositories/settings.repository';
import { AUTH_COOKIE_NAME } from '@/constants';
import { ExecutionService } from '@/executions/execution.service';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { Push } from '@/push';

View File

@@ -1,12 +1,13 @@
import type { Config } from '@oclif/core';
import type { Class } from 'n8n-core';
import { mock } from 'jest-mock-extended';
import type { Class } from 'n8n-core';
import type { BaseCommand } from '@/commands/base-command';
import * as testDb from '../test-db';
import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus';
import { TelemetryEventRelay } from '@/events/telemetry-event-relay';
import { mockInstance } from '@test/mocking';
import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus';
import * as testDb from '../test-db';
mockInstance(MessageEventBus);

View File

@@ -1,27 +1,28 @@
import { Container } from 'typedi';
import cookieParser from 'cookie-parser';
import express from 'express';
import type superagent from 'superagent';
import request from 'supertest';
import { Container } from 'typedi';
import { URL } from 'url';
import { AuthService } from '@/auth/auth.service';
import config from '@/config';
import { AUTH_COOKIE_NAME } from '@/constants';
import type { User } from '@/databases/entities/user';
import { ControllerRegistry } from '@/decorators';
import { License } from '@/license';
import { Logger } from '@/logger';
import { rawBodyReader, bodyParser } from '@/middlewares';
import { PostHogClient } from '@/posthog';
import { Push } from '@/push';
import { License } from '@/license';
import { Logger } from '@/logger';
import { AuthService } from '@/auth/auth.service';
import type { APIRequest } from '@/requests';
import { Telemetry } from '@/telemetry';
import { mockInstance } from '../../../shared/mocking';
import * as testDb from '../test-db';
import { PUBLIC_API_REST_PATH_SEGMENT, REST_PATH_SEGMENT } from '../constants';
import type { SetupProps, TestServer } from '../types';
import { LicenseMocker } from '../license';
import * as testDb from '../test-db';
import type { SetupProps, TestServer } from '../types';
/**
* Plugin to prefix a path segment into a request URL pathname.
@@ -90,6 +91,7 @@ export const setupTestServer = ({
mockInstance(Logger);
mockInstance(PostHogClient);
mockInstance(Push);
mockInstance(Telemetry);
const testServer: TestServer = {
app,

View File

@@ -1,5 +1,5 @@
import type { PublicUser } from '@/interfaces';
import type { User } from '@/databases/entities/user';
import type { PublicUser } from '@/interfaces';
export const validateUser = (user: PublicUser) => {
expect(typeof user.id).toBe('string');

View File

@@ -1,4 +1,5 @@
import type { INode } from 'n8n-workflow';
import { WorkflowEntity } from '@/databases/entities/workflow-entity';
export const FIRST_CREDENTIAL_ID = '1';

View File

@@ -2,10 +2,10 @@ import { Container } from 'typedi';
import { TagRepository } from '@/databases/repositories/tag.repository';
import * as utils from './shared/utils/';
import { createUserShell } from './shared/db/users';
import * as testDb from './shared/test-db';
import type { SuperAgentTest } from './shared/types';
import { createUserShell } from './shared/db/users';
import * as utils from './shared/utils/';
let authOwnerAgent: SuperAgentTest;
const testServer = utils.setupTestServer({ endpointGroups: ['tags'] });

View File

@@ -1,9 +1,11 @@
import Container from 'typedi';
import { UserRepository } from '@/databases/repositories/user.repository';
import { createAdmin, createMember, createOwner } from './shared/db/users';
import * as testDb from './shared/test-db';
import { randomEmail } from './shared/random';
import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository';
import { UserRepository } from '@/databases/repositories/user.repository';
import { createAdmin, createMember, createOwner } from './shared/db/users';
import { randomEmail } from './shared/random';
import * as testDb from './shared/test-db';
describe('UserRepository', () => {
let userRepository: UserRepository;

View File

@@ -4,30 +4,30 @@ import { v4 as uuid } from 'uuid';
import { RESPONSE_ERROR_MESSAGES } from '@/constants';
import { UsersController } from '@/controllers/users.controller';
import type { User } from '@/databases/entities/user';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository';
import { UserRepository } from '@/databases/repositories/user.repository';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { CacheService } from '@/services/cache/cache.service';
import { UserRepository } from '@/databases/repositories/user.repository';
import { ExecutionService } from '@/executions/execution.service';
import { CacheService } from '@/services/cache/cache.service';
import { Telemetry } from '@/telemetry';
import { SUCCESS_RESPONSE_BODY } from './shared/constants';
import {
getCredentialById,
saveCredential,
shareCredentialWithUsers,
} from './shared/db/credentials';
import { createTeamProject, getPersonalProject, linkUserToProject } from './shared/db/projects';
import { createAdmin, createMember, createOwner, getUserById } from './shared/db/users';
import { createWorkflow, getWorkflowById, shareWorkflowWithUsers } from './shared/db/workflows';
import { SUCCESS_RESPONSE_BODY } from './shared/constants';
import { validateUser } from './shared/utils/users';
import { randomCredentialPayload } from './shared/random';
import * as utils from './shared/utils/';
import * as testDb from './shared/test-db';
import { mockInstance } from '../shared/mocking';
import type { SuperAgentTest } from './shared/types';
import { createTeamProject, getPersonalProject, linkUserToProject } from './shared/db/projects';
import { Telemetry } from '@/telemetry';
import * as utils from './shared/utils/';
import { validateUser } from './shared/utils/users';
import { mockInstance } from '../shared/mocking';
mockInstance(Telemetry);
mockInstance(ExecutionService);

View File

@@ -5,10 +5,10 @@ import { VariablesRepository } from '@/databases/repositories/variables.reposito
import { generateNanoId } from '@/databases/utils/generators';
import { VariablesService } from '@/environments/variables/variables.service.ee';
import * as testDb from './shared/test-db';
import * as utils from './shared/utils/';
import { createOwner, createUser } from './shared/db/users';
import * as testDb from './shared/test-db';
import type { SuperAgentTest } from './shared/types';
import * as utils from './shared/utils/';
let authOwnerAgent: SuperAgentTest;
let authMemberAgent: SuperAgentTest;

View File

@@ -1,25 +1,25 @@
import { readFileSync } from 'fs';
import { agent as testAgent } from 'supertest';
import {
NodeConnectionType,
type INodeType,
type INodeTypeDescription,
type IWebhookFunctions,
} from 'n8n-workflow';
import { agent as testAgent } from 'supertest';
import { AbstractServer } from '@/abstract-server';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { ExternalHooks } from '@/external-hooks';
import { NodeTypes } from '@/node-types';
import { Push } from '@/push';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { Telemetry } from '@/telemetry';
import { mockInstance } from '../shared/mocking';
import { initActiveWorkflowManager } from './shared/utils';
import * as testDb from './shared/test-db';
import { createUser } from './shared/db/users';
import { createWorkflow } from './shared/db/workflows';
import * as testDb from './shared/test-db';
import type { SuperAgentTest } from './shared/types';
import { Telemetry } from '@/telemetry';
import { initActiveWorkflowManager } from './shared/utils';
import { mockInstance } from '../shared/mocking';
mockInstance(Telemetry);

View File

@@ -1,18 +1,17 @@
import type SuperAgentTest from 'supertest/lib/agent';
import { agent as testAgent } from 'supertest';
import { GlobalConfig } from '@n8n/config';
import { mock } from 'jest-mock-extended';
import { agent as testAgent } from 'supertest';
import type SuperAgentTest from 'supertest/lib/agent';
import Container from 'typedi';
import { AbstractServer } from '@/abstract-server';
import { LiveWebhooks } from '@/webhooks/live-webhooks';
import { ExternalHooks } from '@/external-hooks';
import { WaitingForms } from '@/waiting-forms';
import { LiveWebhooks } from '@/webhooks/live-webhooks';
import { TestWebhooks } from '@/webhooks/test-webhooks';
import { WaitingWebhooks } from '@/webhooks/waiting-webhooks';
import { WaitingForms } from '@/waiting-forms';
import type { IWebhookResponseCallbackData } from '@/webhooks/webhook.types';
import { mockInstance } from '@test/mocking';
import { GlobalConfig } from '@n8n/config';
import Container from 'typedi';
let agent: SuperAgentTest;

View File

@@ -1,16 +1,16 @@
import Container from 'typedi';
import { In } from '@n8n/typeorm';
import { DateTime } from 'luxon';
import Container from 'typedi';
import config from '@/config';
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
import { License } from '@/license';
import { WorkflowHistoryManager } from '@/workflows/workflow-history/workflow-history-manager.ee';
import { mockInstance } from '../shared/mocking';
import * as testDb from './shared/test-db';
import { createWorkflow } from './shared/db/workflows';
import { createManyWorkflowHistoryItems } from './shared/db/workflow-history';
import { createWorkflow } from './shared/db/workflows';
import * as testDb from './shared/test-db';
import { mockInstance } from '../shared/mocking';
describe('Workflow History Manager', () => {
const license = mockInstance(License);

View File

@@ -1,11 +1,11 @@
import type { User } from '@/databases/entities/user';
import * as testDb from './shared/test-db';
import * as utils from './shared/utils/';
import { createOwner, createUser } from './shared/db/users';
import { createWorkflow } from './shared/db/workflows';
import { createWorkflowHistoryItem } from './shared/db/workflow-history';
import { createWorkflow } from './shared/db/workflows';
import * as testDb from './shared/test-db';
import type { SuperAgentTest } from './shared/types';
import * as utils from './shared/utils/';
let owner: User;
let authOwnerAgent: SuperAgentTest;

View File

@@ -1,9 +1,10 @@
import Container from 'typedi';
import * as testDb from './shared/test-db';
import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository';
import { createWorkflow } from './shared/db/workflows';
import { TagRepository } from '@/databases/repositories/tag.repository';
import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository';
import { createWorkflow } from './shared/db/workflows';
import * as testDb from './shared/test-db';
describe('WorkflowTagMappingRepository', () => {
let taggingRepository: WorkflowTagMappingRepository;

View File

@@ -1,14 +1,14 @@
import Container from 'typedi';
import type { User } from '@/databases/entities/user';
import { License } from '@/license';
import { ProjectService } from '@/services/project.service';
import { WorkflowSharingService } from '@/workflows/workflow-sharing.service';
import * as testDb from '../shared/test-db';
import { createUser } from '../shared/db/users';
import { createWorkflow, shareWorkflowWithUsers } from '../shared/db/workflows';
import { ProjectService } from '@/services/project.service';
import { LicenseMocker } from '../shared/license';
import { License } from '@/license';
import * as testDb from '../shared/test-db';
let owner: User;
let member: User;

View File

@@ -1,5 +1,6 @@
import Container from 'typedi';
import { mock } from 'jest-mock-extended';
import Container from 'typedi';
import { CredentialsEntity } from '@/databases/entities/credentials-entity';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
@@ -7,8 +8,8 @@ import { WorkflowRepository } from '@/databases/repositories/workflow.repository
import { Telemetry } from '@/telemetry';
import { EnterpriseWorkflowService } from '@/workflows/workflow.service.ee';
import * as testDb from '../shared/test-db';
import { mockInstance } from '../../shared/mocking';
import * as testDb from '../shared/test-db';
import {
FIRST_CREDENTIAL_ID,
SECOND_CREDENTIAL_ID,

View File

@@ -1,17 +1,18 @@
import Container from 'typedi';
import { mock } from 'jest-mock-extended';
import Container from 'typedi';
import { ActiveWorkflowManager } from '@/active-workflow-manager';
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus';
import { Telemetry } from '@/telemetry';
import { OrchestrationService } from '@/services/orchestration.service';
import { Telemetry } from '@/telemetry';
import { WorkflowService } from '@/workflows/workflow.service';
import * as testDb from '../shared/test-db';
import { mockInstance } from '../../shared/mocking';
import { createOwner } from '../shared/db/users';
import { createWorkflow } from '../shared/db/workflows';
import * as testDb from '../shared/test-db';
let workflowService: WorkflowService;
const activeWorkflowManager = mockInstance(ActiveWorkflowManager);

Some files were not shown because too many files have changed in this diff Show More