Files
n8n/packages/editor-ui/src/components/Node/NodeCreator/utils.test.ts
T

81 lines
3.1 KiB
TypeScript

import type { SectionCreateElement } from '@/Interface';
import { formatTriggerActionName, groupItemsInSections, sortNodeCreateElements } from './utils';
import {
mockActionCreateElement,
mockNodeCreateElement,
mockSectionCreateElement,
} from './__tests__/utils';
describe('NodeCreator - utils', () => {
describe('groupItemsInSections', () => {
it('should handle multiple sections (with "other" section)', () => {
const node1 = mockNodeCreateElement({ key: 'popularNode' });
const node2 = mockNodeCreateElement({ key: 'newNode' });
const node3 = mockNodeCreateElement({ key: 'otherNode' });
const result = groupItemsInSections(
[node1, node2, node3],
[
{ key: 'popular', title: 'Popular', items: [node1.key] },
{ key: 'new', title: 'New', items: [node2.key] },
],
) as SectionCreateElement[];
expect(result.length).toEqual(3);
expect(result[0].title).toEqual('Popular');
expect(result[0].children).toEqual([node1]);
expect(result[1].title).toEqual('New');
expect(result[1].children).toEqual([node2]);
expect(result[2].title).toEqual('Other');
expect(result[2].children).toEqual([node3]);
});
it('should handle no sections', () => {
const node1 = mockNodeCreateElement({ key: 'popularNode' });
const node2 = mockNodeCreateElement({ key: 'newNode' });
const node3 = mockNodeCreateElement({ key: 'otherNode' });
const result = groupItemsInSections([node1, node2, node3], []);
expect(result).toEqual([node1, node2, node3]);
});
it('should handle only empty sections', () => {
const node1 = mockNodeCreateElement({ key: 'popularNode' });
const node2 = mockNodeCreateElement({ key: 'newNode' });
const node3 = mockNodeCreateElement({ key: 'otherNode' });
const result = groupItemsInSections(
[node1, node2, node3],
[
{ key: 'popular', title: 'Popular', items: [] },
{ key: 'new', title: 'New', items: ['someOtherNodeType'] },
],
);
expect(result).toEqual([node1, node2, node3]);
});
});
describe('sortNodeCreateElements', () => {
it('should sort nodes alphabetically by displayName', () => {
const node1 = mockNodeCreateElement({ key: 'newNode' }, { displayName: 'xyz' });
const node2 = mockNodeCreateElement({ key: 'popularNode' }, { displayName: 'abc' });
const node3 = mockNodeCreateElement({ key: 'otherNode' }, { displayName: 'ABC' });
expect(sortNodeCreateElements([node1, node2, node3])).toEqual([node2, node3, node1]);
});
it('should not change order for other types (sections, actions)', () => {
const node1 = mockSectionCreateElement();
const node2 = mockActionCreateElement();
const node3 = mockSectionCreateElement();
expect(sortNodeCreateElements([node1, node2, node3])).toEqual([node1, node2, node3]);
});
});
describe('formatTriggerActionName', () => {
test.each([
['project.created', 'project created'],
['Project Created', 'project created'],
['field.value.created', 'field value created'],
['attendee.checked_in', 'attendee checked in'],
])('Action name %i should become as %i', (actionName, expected) => {
expect(formatTriggerActionName(actionName)).toEqual(expected);
});
});
});