diff --git a/packages/cli/src/__tests__/credentials-helper.test.ts b/packages/cli/src/__tests__/credentials-helper.test.ts index 7deffcd229..89b84b14f2 100644 --- a/packages/cli/src/__tests__/credentials-helper.test.ts +++ b/packages/cli/src/__tests__/credentials-helper.test.ts @@ -1,3 +1,5 @@ +import { CredentialsEntity, type CredentialsRepository } from '@n8n/db'; +import { EntityNotFoundError } from '@n8n/typeorm'; import { mock } from 'jest-mock-extended'; import type { IAuthenticateGeneric, @@ -12,20 +14,43 @@ import { deepCopy, Workflow } from 'n8n-workflow'; import { CredentialTypes } from '@/credential-types'; import { CredentialsHelper } from '@/credentials-helper'; +import { CredentialNotFoundError } from '@/errors/credential-not-found.error'; import type { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; describe('CredentialsHelper', () => { const nodeTypes = mock(); const mockNodesAndCredentials = mock(); + const credentialsRepository = mock(); const credentialsHelper = new CredentialsHelper( new CredentialTypes(mockNodesAndCredentials), mock(), - mock(), + credentialsRepository, mock(), mock(), ); + describe('getCredentials', () => { + test('turns `EntityNotFoundError` into `CredentialNotFoundError`s', async () => { + credentialsRepository.findOneByOrFail.mockRejectedValueOnce( + new EntityNotFoundError(CredentialsEntity, 'foo'), + ); + + await expect( + credentialsHelper.getCredentials({ id: '1', name: 'foo' }, 'bar'), + ).rejects.toThrow(CredentialNotFoundError); + }); + + test('passes other error through', async () => { + const errorMessage = 'Connection terminated due to connection timeout'; + credentialsRepository.findOneByOrFail.mockRejectedValueOnce(new Error(errorMessage)); + + await expect( + credentialsHelper.getCredentials({ id: '1', name: 'foo' }, 'bar'), + ).rejects.toThrow(errorMessage); + }); + }); + describe('authenticate', () => { const tests: Array<{ description: string; diff --git a/packages/cli/src/credentials-helper.ts b/packages/cli/src/credentials-helper.ts index e4cdf8b9bf..9847c914cf 100644 --- a/packages/cli/src/credentials-helper.ts +++ b/packages/cli/src/credentials-helper.ts @@ -6,7 +6,7 @@ import type { CredentialsEntity, ICredentialsDb } from '@n8n/db'; import { CredentialsRepository, SharedCredentialsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import -import { In } from '@n8n/typeorm'; +import { EntityNotFoundError, In } from '@n8n/typeorm'; import { Credentials, getAdditionalKeys } from 'n8n-core'; import type { ICredentialDataDecryptedObject, @@ -257,7 +257,11 @@ export class CredentialsHelper extends ICredentialsHelper { type, }); } catch (error) { - throw new CredentialNotFoundError(nodeCredential.id, type); + if (error instanceof EntityNotFoundError) { + throw new CredentialNotFoundError(nodeCredential.id, type); + } + + throw error; } return new Credentials(