UNPKG

@mintlify/scraping

Version:

Scrape documentation frameworks to Mintlify docs

139 lines (127 loc) 5.08 kB
import { DEFAULT_WEBSOCKETS_GROUP_NAME } from '../src/apiPages/common.js'; import { generateAsyncApiPagesForDocsConfig } from '../src/asyncapi/generateAsyncApiPagesForDocsConfig.js'; vi.mock('path', async () => { const originalModule = await vi.importActual<typeof import('path')>('path'); return { ...originalModule.posix, default: { ...originalModule.posix, }, }; }); function getAsyncAPIFixturePath(filename: string): string { const filePath = `./__test__/fixtures/${filename}`; return filePath; } describe(generateAsyncApiPagesForDocsConfig, () => { it('should throw error for empty channels', async () => { const emptyDoc = getAsyncAPIFixturePath('emptyAsyncAPI.yml'); await expect(generateAsyncApiPagesForDocsConfig(emptyDoc)).rejects.toThrow( 'No channels defined' ); }); it('should generate navigation structure for simple API with default group name', async () => { const simpleDoc = getAsyncAPIFixturePath('simpleAsyncAPI.yml'); const result = await generateAsyncApiPagesForDocsConfig(simpleDoc, { asyncApiFilePath: 'simpleAsyncAPI.yml', version: '1.0.0', }); expect(result.nav).toHaveLength(1); expect(result.nav[0]).toHaveProperty('group', DEFAULT_WEBSOCKETS_GROUP_NAME); expect(result.nav[0]).toHaveProperty('pages'); expect(result.decoratedNav).toHaveLength(1); expect(result.decoratedNav[0]).toHaveProperty('group', DEFAULT_WEBSOCKETS_GROUP_NAME); expect(result.decoratedNav[0]).toHaveProperty('pages'); const expectedPagesAcc = { 'websockets/usersignedup': { asyncapi: '/simpleAsyncAPI.yml userSignedUp', title: 'User signed up', href: '/websockets/usersignedup', description: '', version: '1.0.0', }, 'websockets/userdeleted': { asyncapi: '/simpleAsyncAPI.yml userDeleted', title: 'User deleted', href: '/websockets/userdeleted', description: '', version: '1.0.0', }, }; expect(Object.keys(result.pagesAcc)).toHaveLength(2); expect(result.pagesAcc).toEqual(expect.objectContaining(expectedPagesAcc)); }); it('should handle custom group names', async () => { const withTags = getAsyncAPIFixturePath('withTagsAsyncAPI.yml'); const result = await generateAsyncApiPagesForDocsConfig(withTags, { asyncApiFilePath: 'withTagsAsyncAPI.yml', version: '1.0.0', }); expect(result.nav).toHaveLength(2); expect(result.nav[0]).toHaveProperty('group', 'Users'); expect(result.nav[1]).toHaveProperty('group', 'Another'); const expectedPagesAcc = { 'users/usersignedup': { asyncapi: '/withTagsAsyncAPI.yml userSignedUp', title: 'User signed up', href: '/users/usersignedup', description: '', version: '1.0.0', }, 'users/userdeleted': { asyncapi: '/withTagsAsyncAPI.yml userDeleted', title: 'User deleted', href: '/users/userdeleted', description: '', version: '1.0.0', }, 'another/anotherchannel': { asyncapi: '/withTagsAsyncAPI.yml anotherChannel', title: 'Another channel', href: '/another/anotherchannel', description: '', version: '1.0.0', }, }; expect(Object.keys(result.pagesAcc)).toHaveLength(3); expect(result.pagesAcc).toEqual(expect.objectContaining(expectedPagesAcc)); }); it('should handle multiple paths and methods', async () => { const complexDoc = getAsyncAPIFixturePath('complexAsyncAPI.yml'); const result = await generateAsyncApiPagesForDocsConfig(complexDoc, { asyncApiFilePath: 'complexAsyncAPI.yml', version: '1.0.0', }); expect(result.nav).toHaveLength(1); expect(result.nav[0]).toHaveProperty('group', DEFAULT_WEBSOCKETS_GROUP_NAME); expect(result.nav[0]).toHaveProperty('pages'); expect(result.decoratedNav).toHaveLength(1); expect(result.decoratedNav[0]).toHaveProperty('group', DEFAULT_WEBSOCKETS_GROUP_NAME); expect(result.decoratedNav[0]).toHaveProperty('pages'); const expectedPagesAcc = { 'websockets/userevents': { asyncapi: '/complexAsyncAPI.yml userEvents', title: 'User events', description: 'Used for broadcasting user creation and update events', version: '1.0.0', href: '/websockets/userevents', }, 'websockets/usercommands': { asyncapi: '/complexAsyncAPI.yml userCommands', title: 'User commands', description: 'Used for sending commands to create or update users', version: '1.0.0', href: '/websockets/usercommands', }, 'websockets/notifications': { asyncapi: '/complexAsyncAPI.yml notifications', title: 'Notifications', description: 'Used for email notification events', version: '1.0.0', href: '/websockets/notifications', }, }; expect(Object.keys(result.pagesAcc)).toHaveLength(3); expect(result.pagesAcc).toEqual(expect.objectContaining(expectedPagesAcc)); }); });