From 248b3924fee61c6c0787086b26f359a7a65491cb Mon Sep 17 00:00:00 2001 From: Bill Date: Sun, 19 Oct 2025 23:18:16 -0400 Subject: [PATCH] test: add mock adapter factories Create factory functions for mock adapters to simplify test setup. Includes helpers for creating mock TFile and TFolder objects. --- tests/__mocks__/adapters.ts | 74 +++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 tests/__mocks__/adapters.ts diff --git a/tests/__mocks__/adapters.ts b/tests/__mocks__/adapters.ts new file mode 100644 index 0000000..1e657dd --- /dev/null +++ b/tests/__mocks__/adapters.ts @@ -0,0 +1,74 @@ +import { IVaultAdapter, IMetadataCacheAdapter, IFileManagerAdapter } from '../../src/adapters/interfaces'; +import { TFile, TFolder, TAbstractFile, CachedMetadata } from 'obsidian'; + +/** + * Create a mock VaultAdapter with jest.fn() for all methods + */ +export function createMockVaultAdapter(overrides?: Partial): IVaultAdapter { + return { + read: jest.fn(), + stat: jest.fn(), + getAbstractFileByPath: jest.fn(), + getMarkdownFiles: jest.fn(), + getRoot: jest.fn(), + process: jest.fn(), + createFolder: jest.fn(), + create: jest.fn(), + ...overrides + }; +} + +/** + * Create a mock MetadataCacheAdapter with jest.fn() for all methods + */ +export function createMockMetadataCacheAdapter(overrides?: Partial): IMetadataCacheAdapter { + return { + getFileCache: jest.fn(), + getFirstLinkpathDest: jest.fn(), + resolvedLinks: {}, + unresolvedLinks: {}, + ...overrides + }; +} + +/** + * Create a mock FileManagerAdapter with jest.fn() for all methods + */ +export function createMockFileManagerAdapter(overrides?: Partial): IFileManagerAdapter { + return { + renameFile: jest.fn(), + trashFile: jest.fn(), + processFrontMatter: jest.fn(), + ...overrides + }; +} + +/** + * Helper to create a mock TFile + */ +export function createMockTFile(path: string, stat?: { ctime: number; mtime: number; size: number }): TFile { + return { + path, + basename: path.split('/').pop()?.replace('.md', '') || '', + extension: 'md', + name: path.split('/').pop() || '', + stat: stat || { ctime: Date.now(), mtime: Date.now(), size: 100 }, + vault: {} as any, + parent: null + } as TFile; +} + +/** + * Helper to create a mock TFolder + */ +export function createMockTFolder(path: string, children?: TAbstractFile[]): TFolder { + const folder = { + path, + name: path.split('/').pop() || '', + children: children || [], + vault: {} as any, + parent: null, + isRoot: function() { return path === '' || path === '/'; } + } as TFolder; + return folder; +} \ No newline at end of file