feat: first take at calendar

This commit is contained in:
2026-02-22 14:15:57 +01:00
parent a29143d6dd
commit 64e1fb3d90
18 changed files with 438 additions and 7 deletions

View File

@@ -1,6 +1,7 @@
import { describe, expect, it } from 'vitest';
import type { PostData } from '../../src/main/engine/PostEngine';
import {
buildCalendarArchiveData,
buildSitemapAndFeeds,
type GenerationPostIndexLike,
} from '../../src/main/engine/GenerationSitemapFeedService';
@@ -71,6 +72,25 @@ function buildIndex(posts: PostData[]): GenerationPostIndexLike {
}
describe('GenerationSitemapFeedService', () => {
it('builds calendar archive data with year/month/day post counts', () => {
const publishedPosts = [
makePost({ id: '1', slug: 'a', createdAt: new Date('2025-01-15T10:00:00.000Z') }),
makePost({ id: '2', slug: 'b', createdAt: new Date('2025-01-15T12:00:00.000Z') }),
makePost({ id: '3', slug: 'c', createdAt: new Date('2025-02-01T08:00:00.000Z') }),
makePost({ id: '4', slug: 'd', createdAt: new Date('2026-01-01T08:00:00.000Z') }),
];
const result = buildCalendarArchiveData(publishedPosts);
expect(result.years['2025']).toBe(3);
expect(result.years['2026']).toBe(1);
expect(result.months['2025-01']).toBe(2);
expect(result.months['2025-02']).toBe(1);
expect(result.days['2025-01-15']).toBe(2);
expect(result.days['2025-02-01']).toBe(1);
expect(result.days['2026-01-01']).toBe(1);
});
it('builds canonical sitemap urls and paginated archive routes', () => {
const publishedPosts = [
makePost({