import { describe, it, expect } from 'vitest'; import { withLeadingSlash } from 'ufo'; describe('useDataJson', () => { describe('withLeadingSlash utility', () => { it('should add leading slash to path without one', () => { expect(withLeadingSlash('test-page')).toBe('/test-page'); }); it('should preserve leading slash if already present', () => { expect(withLeadingSlash('/test-page')).toBe('/test-page'); }); it('should handle empty string', () => { expect(withLeadingSlash('')).toBe('/'); }); it('should handle complex paths', () => { expect(withLeadingSlash('vocal-synthesis/keine-tashi')).toBe('/vocal-synthesis/keine-tashi'); }); }); describe('slug computation logic', () => { it('should convert array slug to string with leading slash', () => { const slugParam = ['vocal-synthesis', 'keine-tashi']; const slug = withLeadingSlash(String(slugParam)); expect(slug).toBe('/vocal-synthesis,keine-tashi'); }); it('should use route path as fallback when no slug', () => { const slugParam = ''; const routePath = '/fallback-path'; const slug = withLeadingSlash(String(slugParam || routePath)); expect(slug).toBe('/fallback-path'); }); it('should prefer slug param over route path', () => { const slugParam = 'my-page'; const routePath = '/different-path'; const slug = withLeadingSlash(String(slugParam || routePath)); expect(slug).toBe('/my-page'); }); }); describe('key computation logic', () => { it('should create cache key from prefix and slug', () => { const prefix = 'page'; const slug = '/test-page'; const key = prefix + '-' + slug; expect(key).toBe('page-/test-page'); }); it('should create unique keys for different prefixes', () => { const slug = '/resume'; const pageKey = 'page' + '-' + slug; const dataKey = 'page-data' + '-' + slug; expect(pageKey).not.toBe(dataKey); expect(pageKey).toBe('page-/resume'); expect(dataKey).toBe('page-data-/resume'); }); }); describe('collection name construction', () => { it('should construct collection name from prefix and locale', () => { const collectionPrefix = 'content_'; const locale = 'en'; const collection = collectionPrefix + locale; expect(collection).toBe('content_en'); }); it('should handle French locale', () => { const collectionPrefix = 'content_'; const locale = 'fr'; const collection = collectionPrefix + locale; expect(collection).toBe('content_fr'); }); it('should handle data collection prefix', () => { const collectionPrefix = 'content_data_'; const locale = 'en'; const collection = collectionPrefix + locale; expect(collection).toBe('content_data_en'); }); }); describe('getData options structure', () => { it('should support useFilter option', () => { const options = { useFilter: true }; expect(options.useFilter).toBe(true); }); it('should support fallbackToEnglish option', () => { const options = { fallbackToEnglish: true }; expect(options.fallbackToEnglish).toBe(true); }); it('should support extractMeta option', () => { const options = { extractMeta: true }; expect(options.extractMeta).toBe(true); }); it('should have sensible defaults', () => { const options = { useFilter: false, fallbackToEnglish: false, extractMeta: false, }; expect(options.useFilter).toBe(false); expect(options.fallbackToEnglish).toBe(false); expect(options.extractMeta).toBe(false); }); }); describe('getJsonData configuration', () => { it('should use useFilter=true for data collections', () => { // getJsonData calls getData with useFilter=true const expectedOptions = { useFilter: true, extractMeta: true }; expect(expectedOptions.useFilter).toBe(true); expect(expectedOptions.extractMeta).toBe(true); }); it('should have default collection prefix', () => { const defaultPrefix = 'content_data_'; expect(defaultPrefix).toBe('content_data_'); }); }); describe('getPageContent configuration', () => { it('should use fallbackToEnglish by default', () => { const defaultFallback = true; expect(defaultFallback).toBe(true); }); it('should have default collection prefix', () => { const defaultPrefix = 'content_'; expect(defaultPrefix).toBe('content_'); }); }); describe('meta extraction logic', () => { it('should return meta when extractMeta is true', () => { const content = { body: 'some content', meta: { path: '/test', title: 'Test' }, }; const extractMeta = true; const result = extractMeta ? content?.meta : content; expect(result).toEqual({ path: '/test', title: 'Test' }); }); it('should return full content when extractMeta is false', () => { const content = { body: 'some content', meta: { path: '/test', title: 'Test' }, }; const extractMeta = false; const result = extractMeta ? content?.meta : content; expect(result).toEqual(content); }); it('should handle null content gracefully', () => { const content = null; const extractMeta = true; const result = extractMeta ? content?.meta : content; expect(result).toBeUndefined(); }); }); describe('filter logic for data collections', () => { it('should filter by meta.path matching slug', () => { const allData = [ { meta: { path: '/resume' }, data: 'resume data' }, { meta: { path: '/other' }, data: 'other data' }, ]; const slug = '/resume'; const content = allData.filter((source) => source.meta.path === slug)[0]; expect(content).toEqual({ meta: { path: '/resume' }, data: 'resume data' }); }); it('should return undefined when no match found', () => { const allData = [{ meta: { path: '/other' }, data: 'other data' }]; const slug = '/nonexistent'; const content = allData.filter((source) => source.meta.path === slug)[0]; expect(content).toBeUndefined(); }); }); });