import { PROVIDE_SERIALIZER_OR_RENDERER_ERROR } from '~/content_editor/constants'; import { createContentEditor } from '~/content_editor/services/create_content_editor'; import { createTestContentEditorExtension } from '../test_utils'; describe('content_editor/services/create_editor', () => { let renderMarkdown; let editor; beforeEach(() => { renderMarkdown = jest.fn(); editor = createContentEditor({ renderMarkdown }); }); it('sets gl-outline-0! class selector to the tiptapEditor instance', () => { expect(editor.tiptapEditor.options.editorProps).toMatchObject({ attributes: { class: 'gl-outline-0!', }, }); }); it('provides the renderMarkdown function to the markdown serializer', async () => { const serializedContent = '**bold text**'; renderMarkdown.mockReturnValueOnce('

bold text

'); await editor.setSerializedContent(serializedContent); expect(renderMarkdown).toHaveBeenCalledWith(serializedContent); }); it('allows providing external content editor extensions', async () => { const labelReference = 'this is a ~group::editor'; renderMarkdown.mockReturnValueOnce( '

this is a group::editor

', ); editor = createContentEditor({ renderMarkdown, extensions: [createTestContentEditorExtension()], }); await editor.setSerializedContent(labelReference); expect(editor.getSerializedContent()).toBe(labelReference); }); it('throws an error when a renderMarkdown fn is not provided', () => { expect(() => createContentEditor()).toThrow(PROVIDE_SERIALIZER_OR_RENDERER_ERROR); }); });