@silexlabs/silex
Version:
Free and easy website builder for everyone.
92 lines (78 loc) • 2.73 kB
text/typescript
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$/)
})
})
})