fix: duplication of title (#2119)

Co-authored-by: Mateusz Romański <m.romanski@webspire.pl>
This commit is contained in:
Mateusz 2022-08-09 15:47:43 +02:00 committed by GitHub
parent 0b1a790090
commit 40ebfd2d63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 45 additions and 3 deletions

View File

@ -62,7 +62,7 @@ export class MarkdownRenderer {
parentId?: string, parentId?: string,
): MarkdownHeading { ): MarkdownHeading {
name = unescapeHTMLChars(name); name = unescapeHTMLChars(name);
const item = { const item: MarkdownHeading = {
id: parentId ? `${parentId}/${safeSlugify(name)}` : `section/${safeSlugify(name)}`, id: parentId ? `${parentId}/${safeSlugify(name)}` : `section/${safeSlugify(name)}`,
name, name,
level, level,
@ -87,7 +87,7 @@ export class MarkdownRenderer {
attachHeadingsDescriptions(rawText: string) { attachHeadingsDescriptions(rawText: string) {
const buildRegexp = (heading: MarkdownHeading) => { const buildRegexp = (heading: MarkdownHeading) => {
return new RegExp( return new RegExp(
`##?\\s+${heading.name.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')}\s*(\n|\r\n)`, `##?\\s+${heading.name.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')}\s*(\n|\r\n|$|\s*)`,
); );
}; };

View File

@ -97,4 +97,22 @@ describe('Markdown renderer', () => {
expect(part.component).toBe(TestComponent); expect(part.component).toBe(TestComponent);
expect(part.props).toEqual({ children: ' Test Test ' }); expect(part.props).toEqual({ children: ' Test Test ' });
}); });
test('should properly extract title from text', () => {
const rawTexts = ['text before\n# Test', 'text before\n # Test', 'text before\n# Test\n'];
rawTexts.forEach(text => {
const headings = renderer.extractHeadings(text);
expect(headings).toHaveLength(1);
expect(headings[0].name).toEqual('Test');
expect(headings[0].description).toEqual('');
});
const rawTexts2 = ['# Test \n text after', '# Test \ntext after'];
rawTexts2.forEach(text => {
const headings = renderer.extractHeadings(text);
expect(headings).toHaveLength(1);
expect(headings[0].name).toEqual('Test');
expect(headings[0].description).toEqual('text after');
});
});
}); });

View File

@ -47,6 +47,30 @@ describe('Models', () => {
expect(info.summary).toEqual('Test summary\nsome text\n## Heading\n test'); expect(info.summary).toEqual('Test summary\nsome text\n## Heading\n test');
}); });
test('should correctly populate description when 2nd line is started by white space', () => {
parser.spec = {
openapi: '3.0.0',
info: {
description: 'text before\n # Test',
},
} as any;
const info = new ApiInfoModel(parser);
expect(info.description).toEqual('text before\n');
});
test('should correctly populate description when 2nd line is only white space', () => {
parser.spec = {
openapi: '3.0.0',
info: {
description: 'text before\n \n # Test',
},
} as any;
const info = new ApiInfoModel(parser);
expect(info.description).toEqual('text before\n');
});
test('should correctly populate license identifier', () => { test('should correctly populate license identifier', () => {
parser.spec = { parser.spec = {
openapi: '3.1.0', openapi: '3.1.0',

View File

@ -24,7 +24,7 @@ export class ApiInfoModel implements OpenAPIInfo {
this.description = parser.spec.info.description || ''; this.description = parser.spec.info.description || '';
this.summary = parser.spec.info.summary || ''; this.summary = parser.spec.info.summary || '';
const firstHeadingLinePos = this.description.search(/^##?\s+/m); const firstHeadingLinePos = this.description.search(/^\s*##?\s+/m);
if (firstHeadingLinePos > -1) { if (firstHeadingLinePos > -1) {
this.description = this.description.substring(0, firstHeadingLinePos); this.description = this.description.substring(0, firstHeadingLinePos);
} }