diff --git a/shared/utils/getHeadingsForText.js b/shared/utils/getHeadingsForText.js index d899adb6d..38b693e6d 100644 --- a/shared/utils/getHeadingsForText.js +++ b/shared/utils/getHeadingsForText.js @@ -1,6 +1,7 @@ // @flow import { filter } from 'lodash'; import slugify from 'shared/utils/slugify'; +import unescape from 'shared/utils/unescape'; export default function getHeadingsForText( text: string @@ -13,7 +14,7 @@ export default function getHeadingsForText( if (!match) continue; const level = match[1].length; - const title = match[2]; + const title = unescape(match[2]); let slug = slugify(title); const existing = filter(output, { slug }); diff --git a/shared/utils/getHeadingsForText.test.js b/shared/utils/getHeadingsForText.test.js new file mode 100644 index 000000000..9be599fbf --- /dev/null +++ b/shared/utils/getHeadingsForText.test.js @@ -0,0 +1,23 @@ +/* eslint-disable flowtype/require-valid-file-annotation */ +import getHeadingsForText from './getHeadingsForText'; + +it('should return an array of document headings', () => { + const response = getHeadingsForText(` +# Header + +## Subheading +`); + + expect(response.length).toBe(2); + expect(response[0].level).toBe(1); + expect(response[0].title).toBe('Header'); + expect(response[1].level).toBe(2); + expect(response[1].title).toBe('Subheading'); +}); + +it('should unescape special characters', () => { + const response = getHeadingsForText(`# Header <\\>`); + + expect(response.length).toBe(1); + expect(response[0].title).toBe('Header <>'); +});