debian-mirror-gitlab/spec/frontend/content_editor/services/table_of_contents_utils_spec.js
2022-08-27 11:52:29 +05:30

96 lines
2.9 KiB
JavaScript

import Heading from '~/content_editor/extensions/heading';
import { toTree, getHeadings } from '~/content_editor/services/table_of_contents_utils';
import { createTestEditor, createDocBuilder } from '../test_utils';
describe('content_editor/services/table_of_content_utils', () => {
describe('toTree', () => {
it('should fills in gaps in heading levels and convert headings to a tree', () => {
expect(
toTree([
{ level: 3, text: '3' },
{ level: 2, text: '2' },
]),
).toEqual([
expect.objectContaining({
level: 1,
text: '',
subHeadings: [
expect.objectContaining({
level: 2,
text: '',
subHeadings: [expect.objectContaining({ level: 3, text: '3', subHeadings: [] })],
}),
expect.objectContaining({ level: 2, text: '2', subHeadings: [] }),
],
}),
]);
});
});
describe('getHeadings', () => {
const tiptapEditor = createTestEditor({
extensions: [Heading],
});
const {
builders: { heading, doc },
} = createDocBuilder({
tiptapEditor,
names: {
heading: { nodeType: Heading.name },
},
});
it('gets all headings as a tree in a tiptap document', () => {
const initialDoc = doc(
heading({ level: 1 }, 'Heading 1'),
heading({ level: 2 }, 'Heading 1.1'),
heading({ level: 3 }, 'Heading 1.1.1'),
heading({ level: 2 }, 'Heading 1.2'),
heading({ level: 3 }, 'Heading 1.2.1'),
heading({ level: 2 }, 'Heading 1.3'),
heading({ level: 2 }, 'Heading 1.4'),
heading({ level: 3 }, 'Heading 1.4.1'),
heading({ level: 1 }, 'Heading 2'),
);
tiptapEditor.commands.setContent(initialDoc.toJSON());
expect(getHeadings(tiptapEditor)).toEqual([
expect.objectContaining({
level: 1,
text: 'Heading 1',
subHeadings: [
expect.objectContaining({
level: 2,
text: 'Heading 1.1',
subHeadings: [
expect.objectContaining({ level: 3, text: 'Heading 1.1.1', subHeadings: [] }),
],
}),
expect.objectContaining({
level: 2,
text: 'Heading 1.2',
subHeadings: [
expect.objectContaining({ level: 3, text: 'Heading 1.2.1', subHeadings: [] }),
],
}),
expect.objectContaining({ level: 2, text: 'Heading 1.3', subHeadings: [] }),
expect.objectContaining({
level: 2,
text: 'Heading 1.4',
subHeadings: [
expect.objectContaining({ level: 3, text: 'Heading 1.4.1', subHeadings: [] }),
],
}),
],
}),
expect.objectContaining({
level: 1,
text: 'Heading 2',
subHeadings: [],
}),
]);
});
});
});