Files
n8n-enterprise-unlocked/packages/cli/src/utils/__tests__/npm-utils.test.ts
Michael Kret 24638420bd feat: Community Nodes in the Nodes Panel (#13923)
Co-authored-by: Dana Lee <dana@n8n.io>
Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
2025-05-09 11:14:41 +01:00

68 lines
1.9 KiB
TypeScript

import { UnexpectedError } from 'n8n-workflow';
import nock from 'nock';
import { verifyIntegrity } from '../npm-utils';
describe('verifyIntegrity', () => {
const registryUrl = 'https://registry.npmjs.org';
const packageName = 'test-package';
const version = '1.0.0';
const integrity = 'sha512-hash==';
afterEach(() => {
nock.cleanAll();
});
it('should verify integrity successfully', async () => {
nock(registryUrl)
.get(`/${encodeURIComponent(packageName)}/${version}`)
.reply(200, {
dist: { integrity },
});
await expect(
verifyIntegrity(packageName, version, registryUrl, integrity),
).resolves.not.toThrow();
});
it('should throw error if checksum does not match', async () => {
const wrongHash = 'sha512-nottherighthash==';
nock(registryUrl)
.get(`/${encodeURIComponent(packageName)}/${version}`)
.reply(200, {
dist: { integrity },
});
await expect(verifyIntegrity(packageName, version, registryUrl, wrongHash)).rejects.toThrow(
UnexpectedError,
);
});
it('should throw error if metadata request fails', async () => {
nock(registryUrl)
.get(`/${encodeURIComponent(packageName)}/${version}`)
.reply(500);
await expect(verifyIntegrity(packageName, version, registryUrl, integrity)).rejects.toThrow();
});
it('should throw UnexpectedError and preserve original error as cause', async () => {
const integrity = 'sha512-somerandomhash==';
nock(registryUrl)
.get(`/${encodeURIComponent(packageName)}/${version}`)
.replyWithError('Network failure');
try {
await verifyIntegrity(packageName, version, registryUrl, integrity);
throw new Error('Expected error was not thrown');
} catch (error: any) {
expect(error).toBeInstanceOf(UnexpectedError);
expect(error.message).toBe('Checksum verification failed');
expect(error.cause).toBeDefined();
expect(error.cause.message).toContain('Network failure');
}
});
});