@mdfriday/foundry
Version:
The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.
165 lines • 7.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const fileinfo_1 = require("../vo/fileinfo");
// Mock dependencies
jest.mock('../vo/filemeta');
describe('FileInfo Value Object', () => {
let mockFileInfo;
let mockFileMeta;
let fileInfo;
beforeEach(() => {
mockFileInfo = {
name: jest.fn().mockReturnValue('test.txt'),
size: jest.fn().mockReturnValue(100),
mode: jest.fn().mockReturnValue(0o644),
modTime: jest.fn().mockReturnValue(new Date('2023-01-01')),
isDir: jest.fn().mockReturnValue(false),
sys: jest.fn().mockReturnValue(null),
};
mockFileMeta = {
fileName: jest.fn().mockReturnValue('test.txt'),
relativeFilename: jest.fn().mockReturnValue('/test.txt'),
component: jest.fn().mockReturnValue('content'),
root: jest.fn().mockReturnValue('/root'),
open: jest.fn().mockResolvedValue({}),
merge: jest.fn(),
};
fileInfo = new fileinfo_1.FileInfo(mockFileInfo, mockFileMeta);
});
afterEach(() => {
jest.clearAllMocks();
});
describe('constructor', () => {
it('should initialize with FileInfo and FileMeta', () => {
expect(fileInfo.fileInfo).toBe(mockFileInfo);
expect(fileInfo._fileMeta).toBe(mockFileMeta);
});
});
describe('meta', () => {
it('should return the FileMeta instance', () => {
const result = fileInfo.meta();
expect(result).toBe(mockFileMeta);
});
});
describe('type', () => {
it('should return the file mode from underlying FileInfo', () => {
const result = fileInfo.type();
expect(result).toBe(0o644);
expect(mockFileInfo.mode).toHaveBeenCalledTimes(1);
});
});
describe('info', () => {
it('should return the underlying FileInfo', () => {
const result = fileInfo.info();
expect(result).toBe(mockFileInfo);
});
});
describe('setMeta', () => {
it('should set the FileMeta instance', () => {
const newMeta = {};
fileInfo.setMeta(newMeta);
expect(fileInfo.meta()).toBe(newMeta);
});
});
describe('FileInfo interface methods', () => {
it('should delegate name to underlying FileInfo', () => {
const result = fileInfo.name();
expect(result).toBe('test.txt');
expect(mockFileInfo.name).toHaveBeenCalledTimes(1);
});
it('should delegate size to underlying FileInfo', () => {
const result = fileInfo.size();
expect(result).toBe(100);
expect(mockFileInfo.size).toHaveBeenCalledTimes(1);
});
it('should delegate mode to underlying FileInfo', () => {
const result = fileInfo.mode();
expect(result).toBe(0o644);
expect(mockFileInfo.mode).toHaveBeenCalledTimes(1);
});
it('should delegate modTime to underlying FileInfo', () => {
const result = fileInfo.modTime();
expect(result).toEqual(new Date('2023-01-01'));
expect(mockFileInfo.modTime).toHaveBeenCalledTimes(1);
});
it('should delegate isDir to underlying FileInfo', () => {
const result = fileInfo.isDir();
expect(result).toBe(false);
expect(mockFileInfo.isDir).toHaveBeenCalledTimes(1);
});
it('should delegate sys to underlying FileInfo', () => {
const result = fileInfo.sys();
expect(result).toBeNull();
expect(mockFileInfo.sys).toHaveBeenCalledTimes(1);
});
});
describe('FileMetaInfo interface methods', () => {
it('should delegate fileName to FileMeta', () => {
const result = fileInfo.fileName();
expect(result).toBe('test.txt');
expect(mockFileMeta.fileName).toHaveBeenCalledTimes(1);
});
it('should delegate relativeFilename to FileMeta', () => {
const result = fileInfo.relativeFilename();
expect(result).toBe('/test.txt');
expect(mockFileMeta.relativeFilename).toHaveBeenCalledTimes(1);
});
it('should delegate component to FileMeta', () => {
const result = fileInfo.component();
expect(result).toBe('content');
expect(mockFileMeta.component).toHaveBeenCalledTimes(1);
});
it('should delegate root to FileMeta', () => {
const result = fileInfo.root();
expect(result).toBe('/root');
expect(mockFileMeta.root).toHaveBeenCalledTimes(1);
});
it('should delegate open to FileMeta', async () => {
const mockFile = {};
mockFileMeta.open.mockResolvedValue(mockFile);
const result = await fileInfo.open();
expect(result).toBe(mockFile);
expect(mockFileMeta.open).toHaveBeenCalledTimes(1);
});
});
describe('newFileInfo factory function', () => {
it('should create FileInfo with new FileMeta', () => {
const mockNewFileMeta = {};
const { newFileMeta } = require('../vo/filemeta');
newFileMeta.mockReturnValue(mockNewFileMeta);
const result = (0, fileinfo_1.newFileInfo)(mockFileInfo, 'test.txt');
expect(newFileMeta).toHaveBeenCalledWith('test.txt');
expect(result).toBeInstanceOf(fileinfo_1.FileInfo);
expect(result.fileInfo).toBe(mockFileInfo);
expect(result.meta()).toBe(mockNewFileMeta);
});
it('should merge meta when FileInfo implements MetaProvider', () => {
const mockNewFileMeta = { merge: jest.fn() };
const mockMetaProvider = {
...mockFileInfo,
meta: jest.fn().mockReturnValue({ test: 'meta' }),
};
const { newFileMeta } = require('../vo/filemeta');
newFileMeta.mockReturnValue(mockNewFileMeta);
const result = (0, fileinfo_1.newFileInfo)(mockMetaProvider, 'test.txt');
expect(mockNewFileMeta.merge).toHaveBeenCalledWith({ test: 'meta' });
});
});
describe('newFileInfoWithMeta factory function', () => {
it('should create FileInfo with provided FileMeta', () => {
const result = (0, fileinfo_1.newFileInfoWithMeta)(mockFileInfo, mockFileMeta);
expect(result).toBeInstanceOf(fileinfo_1.FileInfo);
expect(result.fileInfo).toBe(mockFileInfo);
expect(result.meta()).toBe(mockFileMeta);
});
it('should merge meta when FileInfo implements MetaProvider', () => {
const mockMetaProvider = {
...mockFileInfo,
meta: jest.fn().mockReturnValue({ test: 'meta' }),
};
const result = (0, fileinfo_1.newFileInfoWithMeta)(mockMetaProvider, mockFileMeta);
expect(mockFileMeta.merge).toHaveBeenCalledWith({ test: 'meta' });
});
});
});
//# sourceMappingURL=vo-fileinfo.test.js.map