import fs from 'fs' import path from 'path' import { describe, expect, test } from 'vitest' import { allVersions } from '@/versions/lib/all-versions' import getApplicableVersions from '@/versions/lib/get-applicable-versions' import { latest } from '@/versions/lib/enterprise-server-releases' interface Versions { [key: string]: string | string[] } describe('Versions frontmatter', () => { test('wildcard', async () => { const versions: Versions = { fpt: '*', ghes: '*', } const applicableVersions = getApplicableVersions(versions) expect(applicableVersions.includes('free-pro-team@latest')).toBe(true) expect(applicableVersions.includes(`enterprise-server@${latest}`)).toBe(true) }) test('greater than', async () => { const versions: Versions = { fpt: '*', ghes: '>3.2', } const applicableVersions = getApplicableVersions(versions) expect(applicableVersions.includes(`enterprise-server@${latest}`)).toBe(true) }) test('less than', async () => { const versions: Versions = { fpt: '*', ghes: '<3.2', } const applicableVersions = getApplicableVersions(versions) expect(applicableVersions.includes(`enterprise-server@${latest}`)).toBe(false) }) }) describe('general cases', () => { test('wildcard * is no longer used', () => { // docs engineering 3110 expect.assertions(2) try { getApplicableVersions('*') } catch (e: any) { expect(e).toBeInstanceOf(Error) expect(e).toHaveProperty( 'message', 'undefined contains the invalid versions frontmatter: *. Please explicitly list out all the versions that apply to this article.', ) } }) test("using 'features'", () => { const possibleFeatures = fs .readdirSync('data/features') .filter((name) => name !== 'README.md') .map((name) => path.basename(name, '.yml')) for (const possibleFeature of possibleFeatures) { const versions: Versions = { feature: possibleFeature } const applicableVersions = getApplicableVersions(versions) expect(applicableVersions.every((v) => Object.keys(allVersions).includes(v))) } // Same thing but as an array each time for (const possibleFeature of possibleFeatures) { const versions: Versions = { feature: [possibleFeature] } const applicableVersions = getApplicableVersions(versions) expect(applicableVersions.every((v) => Object.keys(allVersions).includes(v))) } }) }) describe('invalid versions', () => { test('invalid versions', () => { expect(() => { getApplicableVersions(undefined, 'foo.md') }).toThrow('No `versions` frontmatter found in foo.md') }) test('no valid versions found at all', () => { const versions: Versions = { never: '*', heard: 'of', } expect(() => { getApplicableVersions(versions, 'foo.md') }).toThrow( 'foo.md is not available in any currently supported version. Make sure the `versions` property includes at least one supported version.', ) }) })