34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
import path from 'path'
|
|
|
|
import walk from 'walk-sync'
|
|
|
|
import createTree from '../../lib/create-tree.js'
|
|
|
|
describe('content files', () => {
|
|
test.each(['content', 'tests/fixtures/content'])(
|
|
'no content files left orphaned without being in the tree in %s',
|
|
async (contentDir) => {
|
|
const tree = await createTree(contentDir)
|
|
|
|
const traverse = (node) => {
|
|
const relativeFiles = [node.page.relativePath]
|
|
for (const child of node.childPages || []) {
|
|
relativeFiles.push(...traverse(child))
|
|
}
|
|
return relativeFiles
|
|
}
|
|
const relativeFiles = traverse(tree).map((p) => path.join(contentDir, p))
|
|
const contentFiles = walk(contentDir, { includeBasePath: true, directories: false }).filter(
|
|
(file) => {
|
|
return file.endsWith('.md') && !file.includes('README')
|
|
},
|
|
)
|
|
const orphanedFiles = contentFiles.filter((file) => !relativeFiles.includes(file))
|
|
expect(
|
|
orphanedFiles.length,
|
|
`${orphanedFiles} orphaned files found on disk but not in site tree`,
|
|
).toBe(0)
|
|
},
|
|
)
|
|
})
|