/// import { createNodeFromContent, getSchemaByResolvedExtensions } from '@tiptap/core' import Document from '@tiptap/extension-document' import Paragraph from '@tiptap/extension-paragraph' import Text from '@tiptap/extension-text' describe('createNodeFromContent', () => { it('creates a fragment from a schema and HTML content', () => { const content = '

Example Text

' const fragment = createNodeFromContent(content, getSchemaByResolvedExtensions([ Document, Paragraph, Text, ])) expect(fragment.toJSON()).to.deep.eq([{ type: 'paragraph', content: [{ type: 'text', text: 'Example Text', }], }]) }) it('if `errorOnInvalidContent` is true, creates a fragment from a schema and HTML content', () => { const content = '

Example Text

' const fragment = createNodeFromContent(content, getSchemaByResolvedExtensions([ Document, Paragraph, Text, ]), { errorOnInvalidContent: true }) expect(fragment.toJSON()).to.deep.eq([{ type: 'paragraph', content: [{ type: 'text', text: 'Example Text', }], }]) }) it('creates a fragment from a schema and JSON content', () => { const content = { type: 'paragraph', content: [{ type: 'text', text: 'Example Text', }], } const fragment = createNodeFromContent(content, getSchemaByResolvedExtensions([ Document, Paragraph, Text, ])) expect(fragment.toJSON()).to.deep.eq({ type: 'paragraph', content: [{ type: 'text', text: 'Example Text', }], }) }) it('if `errorOnInvalidContent` is true, creates a fragment from a schema and JSON content', () => { const content = { type: 'paragraph', content: [{ type: 'text', text: 'Example Text', }], } const fragment = createNodeFromContent(content, getSchemaByResolvedExtensions([ Document, Paragraph, Text, ]), { errorOnInvalidContent: true }) expect(fragment.toJSON()).to.deep.eq({ type: 'paragraph', content: [{ type: 'text', text: 'Example Text', }], }) }) it('creates a fragment from a schema and JSON array of content', () => { const content = [{ type: 'paragraph', content: [{ type: 'text', text: 'Example Text', }], }, { type: 'paragraph', content: [{ type: 'text', text: 'More Text', }], }] const fragment = createNodeFromContent(content, getSchemaByResolvedExtensions([ Document, Paragraph, Text, ])) expect(fragment.toJSON()).to.deep.eq([{ type: 'paragraph', content: [{ type: 'text', text: 'Example Text', }], }, { type: 'paragraph', content: [{ type: 'text', text: 'More Text', }], }]) }) it('if `errorOnInvalidContent` is true, creates a fragment from a schema and JSON array of content', () => { const content = [{ type: 'paragraph', content: [{ type: 'text', text: 'Example Text', }], }, { type: 'paragraph', content: [{ type: 'text', text: 'More Text', }], }] const fragment = createNodeFromContent(content, getSchemaByResolvedExtensions([ Document, Paragraph, Text, ]), { errorOnInvalidContent: true }) expect(fragment.toJSON()).to.deep.eq([{ type: 'paragraph', content: [{ type: 'text', text: 'Example Text', }], }, { type: 'paragraph', content: [{ type: 'text', text: 'More Text', }], }]) }) it('returns empty content when a schema does not have matching node types for JSON content', () => { const content = { type: 'non-existing-node-type', content: [{ type: 'text', text: 'Example Text', }], } const fragment = createNodeFromContent(content, getSchemaByResolvedExtensions([ Document, Paragraph, Text, ])) expect(fragment.toJSON()).to.deep.eq(null) }) it('returns empty content when a schema does not have matching node types for HTML content', () => { const content = 'Example Text' const fragment = createNodeFromContent(content, getSchemaByResolvedExtensions([ Document, Paragraph, Text, ])) expect(fragment.toJSON()).to.deep.eq([{ type: 'text', text: 'Example Text' }]) }) it('if `errorOnInvalidContent` is true, will throw an error when a schema does not have matching node types for HTML content', () => { const content = 'Example Text' expect(() => { createNodeFromContent(content, getSchemaByResolvedExtensions([ Document, Paragraph, Text, ]), { errorOnInvalidContent: true }) }).to.throw('[tiptap error]: Invalid HTML content') }) it('if `errorOnInvalidContent` is true, will throw an error when a schema does not have matching node types for JSON content', () => { const content = { type: 'non-existing-node-type', content: [{ type: 'text', text: 'Example Text', }], } expect(() => { createNodeFromContent(content, getSchemaByResolvedExtensions([ Document, Paragraph, Text, ]), { errorOnInvalidContent: true }) }).to.throw('[tiptap error]: Invalid JSON content') }) it('if `errorOnInvalidContent` is true, will throw an error when a schema does not have matching mark types for JSON content', () => { const content = { type: 'paragraph', content: [{ type: 'text', text: 'Example Text', marks: [{ type: 'non-existing-mark-type', }], }], } expect(() => { createNodeFromContent(content, getSchemaByResolvedExtensions([ Document, Paragraph, Text, ]), { errorOnInvalidContent: true }) }).to.throw('[tiptap error]: Invalid JSON content') }) })