diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-08-04 03:58:48 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-08-04 03:59:22 +0300 |
| commit | cffc6c4b50178d404fbb939346dab7a33e5ed8d4 (patch) | |
| tree | 7ca1cdfd9b669ca1bbd23d0c800c4a1047913e99 /website/scripts/docs-versions.integration.test.ts | |
| parent | b12da23918ff94099e7fcedd7db79f3d2fa8fa6f (diff) | |
fix(docs): allow corrections to published versions
refs #916
Diffstat (limited to 'website/scripts/docs-versions.integration.test.ts')
| -rw-r--r-- | website/scripts/docs-versions.integration.test.ts | 75 |
1 files changed, 71 insertions, 4 deletions
diff --git a/website/scripts/docs-versions.integration.test.ts b/website/scripts/docs-versions.integration.test.ts index 5e2d36a5..052d9ca2 100644 --- a/website/scripts/docs-versions.integration.test.ts +++ b/website/scripts/docs-versions.integration.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, test } from 'bun:test'; import { execFileSync } from 'node:child_process'; -import { mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises'; +import { mkdtemp, mkdir, readFile, rm, symlink, writeFile } from 'node:fs/promises'; import { join, resolve } from 'node:path'; import { tmpdir } from 'node:os'; @@ -21,7 +21,8 @@ describe('documentation release publishing', () => { await write(root, 'website/latest.json', '{"version":"0.9.0"}\n'); await write(root, 'README.md', 'stable readme\n'); await write(root, 'README.zh-CN.md', 'stable readme zh-cn\n'); - await write(root, 'docs/next/website/src/content/docs/index.mdx', 'next docs\n'); + const nextDocs = '---\ntitle: Documentation\n---\n\nnext docs\n'; + await write(root, 'docs/next/website/src/content/docs/index.mdx', nextDocs); await write(root, 'docs/next/website/src/data/config-reference.json', '{"next":true}\n'); await write(root, 'docs/next/README.md', 'next readme\n'); await write(root, 'docs/next/README.zh-CN.md', 'next readme zh-cn\n'); @@ -40,7 +41,7 @@ describe('documentation release publishing', () => { await expect(read(root, 'website/src/data/config-reference.json')).rejects.toThrow(); expect(await read(root, 'README.md')).toBe('next readme\n'); expect(await read(root, 'README.zh-CN.md')).toBe('next readme zh-cn\n'); - expect(await read(root, 'docs/versions/1.0.0/website/src/content/docs/index.mdx')).toBe('next docs\n'); + expect(await read(root, 'docs/versions/1.0.0/website/src/content/docs/index.mdx')).toBe(nextDocs); const manifest = JSON.parse(await read(root, 'docs/versions/manifest.json')); expect(manifest.current).toBe('1.0.0'); @@ -65,7 +66,19 @@ describe('documentation release publishing', () => { `${JSON.stringify({ build_id: 'preview-test', commit: previewCommit })}\n`, ); runPrepare(root); - expect(await read(root, 'website/src/content/docs/index.mdx')).toBe('next docs\n'); + const stableDocs = await read(root, 'website/src/content/docs/index.mdx'); + expect(stableDocs).toContain('next docs'); + expect(stableDocs).toContain( + 'editUrl: https://github.com/herdrdev/herdr/blob/master/docs/versions/1.0.0/website/src/content/docs/index.mdx', + ); + const versionedDocs = await read( + root, + 'website/src/content/docs/_versions/1.0.0/index.mdx', + ); + expect(versionedDocs).toContain('next docs'); + expect(versionedDocs).toContain( + 'editUrl: https://github.com/herdrdev/herdr/blob/master/docs/versions/1.0.0/website/src/content/docs/index.mdx', + ); expect(await read(root, 'website/src/content/docs/preview/index.mdx')).toContain( 'Preview build `preview-test`', ); @@ -74,10 +87,36 @@ describe('documentation release publishing', () => { await write(root, 'website/latest.json', '{"version":"1.0.0"}\n'); runScript(root, ['check']); + const correctedDocs = '---\ntitle: Documentation\n---\n\ncorrected docs\n'; + await write( + root, + 'docs/versions/1.0.0/website/src/content/docs/index.mdx', + correctedDocs, + ); + await write( + root, + 'docs/versions/1.0.0/website/src/data/config-reference.json', + '{"corrected":true}\n', + ); + runScript(root, ['check']); + await write(root, 'README.md', 'post-release correction\n'); runScript(root, ['publish', 'v1.0.0']); expect(await read(root, 'README.md')).toBe('post-release correction\n'); + runPrepare(root); + expect(await read(root, 'website/src/content/docs/index.mdx')).toContain('corrected docs'); + expect(await read(root, 'website/src/content/docs/_versions/1.0.0/index.mdx')).toContain( + 'corrected docs', + ); + expect(await read(root, 'website/src/data/config-reference.json')).toBe( + '{"corrected":true}\n', + ); + const versionReferences = JSON.parse( + await read(root, 'website/src/data/config-reference-versions.json'), + ); + expect(versionReferences['1.0.0']).toEqual({ corrected: true }); + runScript(root, ['publish', 'v0.9.0']); const archivedManifest = JSON.parse(await read(root, 'docs/versions/manifest.json')); expect(archivedManifest.current).toBe('1.0.0'); @@ -85,6 +124,34 @@ describe('documentation release publishing', () => { expect(await read(root, 'README.md')).toBe('post-release correction\n'); runScript(root, ['check']); + const correctedArchivedDocs = '---\ntitle: Documentation\n---\n\ncorrected archived docs\n'; + await write( + root, + 'docs/versions/0.9.0/website/src/content/docs/index.mdx', + correctedArchivedDocs, + ); + runScript(root, ['publish', 'v0.9.0']); + expect(await read(root, 'docs/versions/0.9.0/website/src/content/docs/index.mdx')).toBe( + correctedArchivedDocs, + ); + + const archivedDocsRoot = resolve( + root, + 'docs/versions/0.9.0/website/src/content/docs', + ); + await rm(archivedDocsRoot, { recursive: true, force: true }); + expect(() => runScript(root, ['check'])).toThrow(); + await write( + root, + 'docs/versions/0.9.0/website/src/content/docs/index.mdx', + correctedArchivedDocs, + ); + const linkedPage = resolve(archivedDocsRoot, 'linked.mdx'); + await symlink('index.mdx', linkedPage); + expect(() => runScript(root, ['check'])).toThrow(); + await rm(linkedPage); + runScript(root, ['check']); + delete archivedManifest.versions[0].commit; await write(root, 'docs/versions/manifest.json', `${JSON.stringify(archivedManifest)}\n`); expect(() => runScript(root, ['check'])).toThrow(); |
