This repository has been archived on 2026-05-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
GitBlog.md/test/file_walker.test.js
T

279 lines
8.2 KiB
JavaScript

/* jshint -W117 */
const fs = require('fs');
const dataDir = './test_data';
const testIndex = 'testindex.md';
const config = {
'test': true,
'data_dir': dataDir,
'article': {
'index': testIndex,
'default_title': 'Untitled',
'default_thumbnail': 'default.png',
'thumbnail_tag': 'thumbnail'
}
};
const fw = require('../src/file_walker')(config);
const deleteFolderSync = (path) => {
if (!fs.existsSync(path))
return;
fs.readdirSync(path, {withFileTypes: true}).forEach((item) => {
if (item.isDirectory())
deleteFolderSync(`${path}/${item.name}`);
else
fs.unlinkSync(`${path}/${item.name}`);
});
fs.rmdirSync(path);
};
beforeEach(() => {
deleteFolderSync(dataDir);
fs.mkdirSync(dataDir);
});
afterAll(() => {
if (fs.existsSync(dataDir)) {
deleteFolderSync(dataDir);
}
});
const createEmptyDirs = list => list.forEach(path => fs.mkdirSync(path, {recursive: true}));
const createEmptyFiles = list => list.forEach(file => fs.writeFileSync(file, ''));
describe('Test function fileTree', () => {
test('empty root', (done) => {
fw.fileTree(dataDir, (err, list) => {
expect(err).toBeNull();
expect(list).toBeDefined();
expect(list.length).toBe(0);
done();
});
});
test('empty folders', (done) => {
createEmptyDirs([
`${dataDir}/test/test`,
`${dataDir}/test/test2`,
`${dataDir}/test2`
]);
fw.fileTree(dataDir, (err, list) => {
expect(err).toBeNull();
expect(list).toBeDefined();
expect(list.length).toBe(0);
done();
});
});
test('simple files', (done) => {
const fileList = [
`${dataDir}/f1.txt`,
`${dataDir}/f2.txt`
];
createEmptyFiles(fileList);
fw.fileTree(dataDir, (err, list) => {
expect(err).toBeNull();
expect(list).toBeDefined();
expect(list.length).toBe(fileList.length);
expect(list).toEqual(expect.arrayContaining(fileList));
done();
});
});
test('nested files', (done) => {
createEmptyDirs([
`${dataDir}/test/test`,
`${dataDir}/test2`
]);
const fileList = [
`${dataDir}/f1.txt`,
`${dataDir}/test/f2.txt`,
`${dataDir}/test/test/f3.txt`,
`${dataDir}/test2/f4.txt`
];
createEmptyFiles(fileList);
fw.fileTree(dataDir, (err, list) => {
expect(err).toBeNull();
expect(list).toBeDefined();
expect(list.length).toBe(fileList.length);
expect(list).toEqual(expect.arrayContaining(fileList));
done();
});
});
test('invalid root', (done) => {
fw.fileTree('invalid root', (err, list) => {
expect(err).not.toBeNull();
expect(list).not.toBeDefined();
done();
});
});
});
describe('Test index article reading', () => {
const file = `${dataDir}/${testIndex}`;
test('invalid file', (done) => {
fw.readIndexFile('invalid file', 'thumbnail', (err, info) => {
expect(err).not.toBeNull();
expect(info).not.toBeDefined();
done();
});
});
test('correct file', (done) => {
fs.writeFileSync(file, `
# This is an awesome title !?¤
![custom_thumbnail](./thumbnail.jpg)
this is some text
`);
fw.readIndexFile(file, 'custom_thumbnail', (err, info) => {
expect(err).toBeNull();
expect(info).toBeDefined();
expect(info.title).toBe('This is an awesome title !?¤');
expect(info.thumbnail).toBe('./thumbnail.jpg');
done();
});
});
test('no title', (done) => {
fs.writeFileSync(file, `
## This is an awesome title !?¤
![custom_thumbnail](./thumbnail.jpg)
### this is some text
`);
fw.readIndexFile(file, 'custom_thumbnail', (err, info) => {
expect(err).toBeNull();
expect(info).toBeDefined();
expect(info.title).not.toBeDefined();
expect(info.thumbnail).toBe('./thumbnail.jpg');
done();
});
});
test('title at beginning', (done) => {
fs.writeFileSync(file, '#title');
fw.readIndexFile(file, 'custom_thumbnail', (err, info) => {
expect(err).toBeNull();
expect(info).toBeDefined();
expect(info.title).toBe('title');
expect(info.thumbnail).not.toBeDefined();
done();
});
});
test('no thumbnail', (done) => {
fs.writeFileSync(file, `
# This is an awesome title !?¤
![custom_thumbnail](./thumbnail.jpg)
this is some text
`);
fw.readIndexFile(file, 'thumbnail', (err, info) => {
expect(err).toBeNull();
expect(info).toBeDefined();
expect(info.title).toBe('This is an awesome title !?¤');
expect(info.thumbnail).not.toBeDefined();
done();
});
});
test('multiple thumbnails', (done) => {
fs.writeFileSync(file, `
# This is an awesome title !?¤
![custom_thumbnail](./thumbnail.jpg)
this is some text
![custom_thumbnail](./thumbnail2.jpg)
`);
fw.readIndexFile(file, 'custom_thumbnail', (err, info) => {
expect(err).toBeNull();
expect(info).toBeDefined();
expect(info.title).toBe('This is an awesome title !?¤');
expect(info.thumbnail).toBe('./thumbnail.jpg');
done();
});
});
});
describe('Test article fetching', () => {
test('invalid data dir', (done) => {
config['data_dir'] = 'invalid root';
fw.fetchArticles((err, list) => {
expect(err).not.toBeNull();
expect(list).not.toBeDefined();
config['data_dir'] = dataDir;
done();
});
});
test('empty data dir', (done) => {
fw.fetchArticles((err, list) => {
expect(err).toBeNull();
expect(list).toBeDefined();
expect(list.length).toBe(0);
done();
});
});
test('misplaced index file', (done) => {
createEmptyDirs([
`${dataDir}/test/test`,
`${dataDir}/2019/05/05`,
]);
createEmptyFiles([
`${dataDir}/${testIndex}`,
`${dataDir}/test/test/${testIndex}`,
`${dataDir}/2019/05/${testIndex}`,
]);
fw.fetchArticles((err, list) => {
expect(err).toBeNull();
expect(list).toBeDefined();
expect(list.length).toBe(0);
done();
});
});
test('empty index file', (done) => {
createEmptyDirs([
`${dataDir}/2019/05/05`,
]);
const file = `${dataDir}/2019/05/05/${testIndex}`;
createEmptyFiles([file]);
fw.fetchArticles((err, list) => {
expect(err).toBeNull();
expect(list).toBeDefined();
expect(list.length).toBe(1);
expect(list[0]).toEqual({
path: file,
year: 2019,
month: 5,
day: 5,
title:'Untitled',
thumbnail:'default.png'
});
done();
});
});
test('correct index file', (done) => {
createEmptyDirs([
`${dataDir}/2019/05/05`,
]);
const file = `${dataDir}/2019/05/05/${testIndex}`;
fs.writeFileSync(file, `
# Title
![thumbnail](./thumbnail.jpg)
this is some text
`);
fw.fetchArticles((err, list) => {
expect(err).toBeNull();
expect(list).toBeDefined();
expect(list.length).toBe(1);
expect(list[0]).toEqual({
path: file,
year: 2019,
month: 5,
day: 5,
title:'Title',
thumbnail:`${dataDir}/2019/05/05/./thumbnail.jpg`
});
done();
});
});
});