File size: 2,696 Bytes
aec3094 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | import type { CommunityNodeType } from '@n8n/api-types';
import type { InstalledPackages } from '@n8n/db';
import { mock } from 'jest-mock-extended';
import { CommunityPackagesController } from '@/controllers/community-packages.controller';
import type { NodeRequest } from '@/requests';
import type { EventService } from '../../events/event.service';
import type { Push } from '../../push';
import type { CommunityNodeTypesService } from '../../services/community-node-types.service';
import type { CommunityPackagesService } from '../../services/community-packages.service';
describe('CommunityPackagesController', () => {
const push = mock<Push>();
const communityPackagesService = mock<CommunityPackagesService>();
const eventService = mock<EventService>();
const communityNodeTypesService = mock<CommunityNodeTypesService>();
const controller = new CommunityPackagesController(
push,
communityPackagesService,
eventService,
communityNodeTypesService,
);
beforeEach(() => {
jest.clearAllMocks();
});
describe('installPackage', () => {
it('should throw error if verify in options but no checksum', async () => {
const request = mock<NodeRequest.Post>({
user: { id: 'user123' },
body: { name: 'n8n-nodes-test', verify: true },
});
communityNodeTypesService.findVetted.mockReturnValue(undefined);
await expect(controller.installPackage(request)).rejects.toThrow(
'Package n8n-nodes-test is not vetted for installation',
);
});
it('should have correct version', async () => {
const request = mock<NodeRequest.Post>({
user: { id: 'user123' },
body: { name: 'n8n-nodes-test', verify: true, version: '1.0.0' },
});
communityNodeTypesService.findVetted.mockReturnValue(
mock<CommunityNodeType>({
checksum: 'checksum',
}),
);
communityPackagesService.parseNpmPackageName.mockReturnValue({
rawString: 'n8n-nodes-test',
packageName: 'n8n-nodes-test',
version: '1.1.1',
});
communityPackagesService.isPackageInstalled.mockResolvedValue(false);
communityPackagesService.hasPackageLoaded.mockReturnValue(false);
communityPackagesService.checkNpmPackageStatus.mockResolvedValue({
status: 'OK',
});
communityPackagesService.installPackage.mockResolvedValue(
mock<InstalledPackages>({
installedNodes: [],
}),
);
await controller.installPackage(request);
expect(communityPackagesService.installPackage).toHaveBeenCalledWith(
'n8n-nodes-test',
'1.0.0',
'checksum',
);
expect(eventService.emit).toHaveBeenCalledWith(
'community-package-installed',
expect.objectContaining({
packageVersion: '1.0.0',
}),
);
});
});
});
|