feat: more work on calendar

This commit is contained in:
2026-02-22 14:31:31 +01:00
parent 64e1fb3d90
commit 947b1250e3
21 changed files with 191 additions and 9 deletions

View File

@@ -994,6 +994,16 @@ describe('BlogGenerationEngine', () => {
expect(await fileExists(path.join(tempDir, 'html', 'obsolete'))).toBe(false);
expect(await fileExists(path.join(tempDir, 'html'))).toBe(true);
expect(await fileExists(path.join(tempDir, 'html', '2025', '01', '15', 'apply-post', 'index.html'))).toBe(true);
const calendarJsonRaw = await readFile(path.join(tempDir, 'html', 'calendar.json'), 'utf-8');
const calendarJson = JSON.parse(calendarJsonRaw) as {
years: Record<string, number>;
months: Record<string, number>;
days: Record<string, number>;
};
expect(calendarJson.years['2025']).toBe(1);
expect(calendarJson.months['2025-01']).toBe(1);
expect(calendarJson.days['2025-01-15']).toBe(1);
});
it('does not report valid pagination routes as extra html content', async () => {

View File

@@ -357,6 +357,38 @@ describe('PreviewServer', () => {
expect(lightboxLoadingImageResponse.headers.get('content-type')).toContain('image/gif');
});
it('serves calendar.json for preview calendar runtime', async () => {
tempDir = await mkdtemp(path.join(tmpdir(), 'bds-preview-calendar-'));
await mkdir(path.join(tempDir, 'html'), { recursive: true });
await writeFile(path.join(tempDir, 'html', 'calendar.json'), JSON.stringify({
years: { '2025': 2 },
months: { '2025-01': 2 },
days: { '2025-01-02': 1, '2025-01-03': 1 },
}), 'utf-8');
server = new PreviewServer({
postEngine: makeEngine([makePost()]),
settingsEngine: makeSettings(50),
getActiveProjectContext: async () => ({ projectId: 'default', dataDir: tempDir ?? undefined }),
});
await server.start(0);
const response = await fetch(`${server.getBaseUrl()}/calendar.json`);
expect(response.status).toBe(200);
expect(response.headers.get('content-type')).toContain('application/json');
const payload = await response.json() as {
years: Record<string, number>;
months: Record<string, number>;
days: Record<string, number>;
};
expect(payload.years['2025']).toBe(2);
expect(payload.months['2025-01']).toBe(2);
expect(payload.days['2025-01-03']).toBe(1);
});
it('keeps markdown code block html minimal and includes code language metadata', async () => {
const postWithCode = makePost({
content: '```python\nprint("hello")\n```',