test: achieve 100% coverage on path-utils.ts
Changes: - Updated Windows path rejection tests to use backslashes as specified - Added comprehensive pathExists() method tests - Reordered validation checks in isValidVaultPath() to ensure Windows absolute paths are caught before invalid character check - This fix ensures the Windows drive letter validation is reachable Coverage improvement: 98.18% -> 100% Tests added: 3 new test cases All 512 tests passing
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user