diff --git a/src/utils/path-utils.ts b/src/utils/path-utils.ts index cf552c0..8a708e3 100644 --- a/src/utils/path-utils.ts +++ b/src/utils/path-utils.ts @@ -59,14 +59,14 @@ export class PathUtils { const normalized = this.normalizePath(path); - // Check for invalid characters (Windows restrictions) - const invalidChars = /[<>:"|?*\x00-\x1F]/; - if (invalidChars.test(normalized)) { + // Check for absolute paths (should be vault-relative) + if (normalized.startsWith('/') || /^[A-Za-z]:/.test(normalized)) { return false; } - // Check for absolute paths (should be vault-relative) - if (normalized.startsWith('/') || /^[A-Za-z]:/.test(normalized)) { + // Check for invalid characters (Windows restrictions) + const invalidChars = /[<>:"|?*\x00-\x1F]/; + if (invalidChars.test(normalized)) { return false; } diff --git a/tests/path-utils.test.ts b/tests/path-utils.test.ts index 767a4c4..838151e 100644 --- a/tests/path-utils.test.ts +++ b/tests/path-utils.test.ts @@ -69,6 +69,14 @@ describe('PathUtils', () => { expect(PathUtils.isValidVaultPath('folder/../note.md')).toBe(false); }); + test('should reject Windows absolute paths (C: drive)', () => { + expect(PathUtils.isValidVaultPath('C:\\Users\\file.md')).toBe(false); + }); + + test('should reject Windows absolute paths (D: drive)', () => { + expect(PathUtils.isValidVaultPath('D:\\Documents\\note.md')).toBe(false); + }); + test('should accept paths after normalization', () => { // These should be valid after normalization expect(PathUtils.isValidVaultPath('/folder/note.md')).toBe(true); @@ -233,6 +241,22 @@ describe('PathUtils - Integration with Obsidian', () => { expect(PathUtils.getPathType(mockApp, 'nonexistent')).toBe(null); }); }); + + describe('pathExists', () => { + test('should return true if path exists (file)', () => { + (mockApp.vault as any)._addMockFile('note.md', false); + expect(PathUtils.pathExists(mockApp, 'note.md')).toBe(true); + }); + + test('should return true if path exists (folder)', () => { + (mockApp.vault as any)._addMockFile('folder', true); + expect(PathUtils.pathExists(mockApp, 'folder')).toBe(true); + }); + + test('should return false if path does not exist', () => { + expect(PathUtils.pathExists(mockApp, 'nonexistent')).toBe(false); + }); + }); }); /**