aboutsummaryrefslogtreecommitdiff
path: root/website/scripts/docs-versions.integration.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'website/scripts/docs-versions.integration.test.ts')
-rw-r--r--website/scripts/docs-versions.integration.test.ts75
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();