UNPKG

@silexlabs/silex

Version:

Free and easy website builder for everyone.

92 lines (78 loc) 2.73 kB
import { stringify, split, merge, getPagesFolder } from './websiteDataSerialization' import { expect, it, describe } from '@jest/globals' import { WebsiteData, EMPTY_WEBSITE } from '../../types' import { WEBSITE_DATA_FILE, WEBSITE_PAGES_FOLDER } from '../../constants' describe('websiteDataSerialization', () => { describe('stringify', () => { it('should format JSON with sorted keys', () => { const data = { z: 1, a: 2, m: { z: 3, a: 4 } } const result = stringify(data) expect(result).toBe(`{ "a": 2, "m": { "a": 4, "z": 3 }, "z": 1 }`) }) }) describe('split', () => { it('should split website data into separate files', () => { const websiteData: WebsiteData = { ...EMPTY_WEBSITE, pages: [ { id: 'page1', getName: () => 'Home' } as any, { id: 'page2', getName: () => 'About' } as any ] } const files = split(websiteData) expect(files).toHaveLength(3) expect(files[0].path).toBe('pages/home-page1.json') expect(files[1].path).toBe('pages/about-page2.json') expect(files[2].path).toBe(WEBSITE_DATA_FILE) const mainFile = JSON.parse(files[2].content) expect(mainFile.pages[0].isFile).toBe(true) }) }) describe('merge', () => { it('should handle legacy format', async () => { const legacyContent = `{ "settings": {}, "pages": [{ "id": "page1" }] }` const pageLoader = async () => { throw new Error('Should not be called') } const result = await merge(legacyContent, pageLoader) expect(result.pages).toHaveLength(1) expect(result.pages[0].id).toBe('page1') }) }) describe('getPagesFolder', () => { it('should return default folder when pagesFolder is not set', () => { const websiteData = { ...EMPTY_WEBSITE } const result = getPagesFolder(websiteData) expect(result).toBe(WEBSITE_PAGES_FOLDER) }) it('should return custom folder when pagesFolder is set', () => { const websiteData = { ...EMPTY_WEBSITE, pagesFolder: 'custom-pages' } const result = getPagesFolder(websiteData) expect(result).toBe('custom-pages') }) }) describe('split with custom pages folder', () => { it('should use custom pages folder in file paths', () => { const websiteData = { ...EMPTY_WEBSITE, pagesFolder: 'custom-pages', pages: [{ id: 'page1', getName: () => 'Home' } as any] } const files = split(websiteData) const pageFile = files.find(f => f.path.includes('page1')) expect(pageFile).toBeDefined() expect(pageFile!.path).toMatch(/^custom-pages\/.*\.json$/) }) }) })