UNPKG

@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
"use strict"; 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