From 7819d027e35e069738b4b5f00e54a51ccf6a49f7 Mon Sep 17 00:00:00 2001 From: Michael Kriese <michael.kriese@visualon.de> Date: Fri, 31 Jan 2025 09:38:13 +0100 Subject: [PATCH] docs(versioning): fix types and tests (#33958) --- .../versioning/versioning-metadata.spec.ts | 53 +++++++++++-------- tools/docs/versioning.ts | 8 +-- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/lib/modules/versioning/versioning-metadata.spec.ts b/lib/modules/versioning/versioning-metadata.spec.ts index 2e66857240..e7cd9705ec 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 6982ed612f..c6712f2d68 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, -- GitLab