diff --git a/lib/modules/versioning/versioning-metadata.spec.ts b/lib/modules/versioning/versioning-metadata.spec.ts index 2e66857240749c57682e2648708aa3ca14d8c390..e7cd9705ecc383d4076d3e80aa6c2b84cc6590c3 100644 --- a/lib/modules/versioning/versioning-metadata.spec.ts +++ b/lib/modules/versioning/versioning-metadata.spec.ts @@ -1,42 +1,51 @@ -import { readFile, readdir } from 'fs-extra'; +import { readdirSync } from 'node:fs'; +import { readFile } from 'fs-extra'; describe('modules/versioning/versioning-metadata', () => { - it('readme no markdown headers', async () => { - const allVersioning = (await readdir('lib/modules/versioning')).filter( - (item) => !item.includes('.'), - ); - for (const versioning of allVersioning) { - let readme: string | undefined; + const allVersioning = readdirSync('lib/modules/versioning', { + withFileTypes: true, + }) + .filter((item) => item.isDirectory()) + .map((item) => item.name); + + describe.each(allVersioning)('%s', (versioning) => { + it('readme with no h1 or h2 markdown headers', async () => { + let readme = ''; try { readme = await readFile( - 'lib/modules/versioning/' + versioning + '/readme.md', + `lib/modules/versioning/${versioning}/readme.md`, 'utf8', ); } catch { // ignore missing file } - if (readme) { - // eslint-disable-next-line jest/no-conditional-expect - expect(RegExp(/(^|\n)#+ /).exec(readme)).toBeNull(); + const lines = readme.split('\n'); + let isCode = false; + const res: string[] = []; + + for (const line of lines) { + if (line.startsWith('```')) { + isCode = !isCode; + } else if (!isCode) { + res.push(line); + } } - } - }); - it('contains mandatory fields', async () => { - const allVersioning = (await readdir('lib/modules/versioning')).filter( - (item) => !item.includes('.') && !item.startsWith('_'), - ); + expect( + res.some((line) => line.startsWith('# ') || line.startsWith('## ')), + ).toBeFalse(); + }); - for (const versioning of allVersioning) { + it('contains mandatory fields', async () => { const versioningObj = await import(`./${versioning}`); expect(versioningObj.id).toEqual(versioning); expect(versioningObj.displayName).toBeDefined(); - expect(versioningObj.urls).toBeDefined(); - expect(versioningObj.supportsRanges).toBeDefined(); + expect(versioningObj.urls).toBeArray(); + expect(versioningObj.supportsRanges).toBeBoolean(); if (versioningObj.supportsRanges === true) { // eslint-disable-next-line jest/no-conditional-expect - expect(versioningObj.supportedRangeStrategies).toBeDefined(); + expect(versioningObj.supportedRangeStrategies).toBeArrayOfStrings(); } - } + }); }); }); diff --git a/tools/docs/versioning.ts b/tools/docs/versioning.ts index 6982ed612faa651c066a1cb3003fad408e2dc4ec..c6712f2d6899c694d9dd73b7402a6b47668e7a00 100644 --- a/tools/docs/versioning.ts +++ b/tools/docs/versioning.ts @@ -12,13 +12,13 @@ import { replaceContent, } from './utils'; -type Versioning = { +interface Versioning { id: string; displayName: string; - urls?: string[]; - supportsRanges?: boolean; + urls: string[]; + supportsRanges: boolean; supportedRangeStrategies?: string[]; -}; +} export async function generateVersioning( dist: string,