mirror of
https://gitlab.com/ArkHost/HelixNotes.git
synced 2026-09-19 09:27:29 +02:00
test(paths): cover cross-platform asset resolution
This commit is contained in:
@@ -0,0 +1,117 @@
|
|||||||
|
import assert from 'node:assert/strict';
|
||||||
|
import { readFile } from 'node:fs/promises';
|
||||||
|
import test from 'node:test';
|
||||||
|
import { transformWithEsbuild } from 'vite';
|
||||||
|
|
||||||
|
const source = await readFile(
|
||||||
|
new URL('../src/lib/utils/paths.ts', import.meta.url),
|
||||||
|
'utf8'
|
||||||
|
);
|
||||||
|
const { code } = await transformWithEsbuild(source, 'paths.ts', {
|
||||||
|
loader: 'ts',
|
||||||
|
format: 'esm',
|
||||||
|
target: 'esnext'
|
||||||
|
});
|
||||||
|
const {
|
||||||
|
assetSourceToMarkdown,
|
||||||
|
assetUrlToLocalPath,
|
||||||
|
normalizeLocalAssetPath,
|
||||||
|
resolvePathFromFile,
|
||||||
|
resolveVaultFilePath
|
||||||
|
} = await import(
|
||||||
|
`data:text/javascript;base64,${Buffer.from(code).toString('base64')}`
|
||||||
|
);
|
||||||
|
|
||||||
|
test('resolves note links relative to Windows note paths', () => {
|
||||||
|
assert.equal(
|
||||||
|
resolvePathFromFile('C:\\Vault\\Current.md', './Target.md'),
|
||||||
|
'C:/Vault/Target.md'
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
resolvePathFromFile('C:\\Vault\\Folder\\Current.md', '../Target.md'),
|
||||||
|
'C:/Vault/Target.md'
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
resolvePathFromFile('\\\\server\\share\\Folder\\Current.md', '../Target.md'),
|
||||||
|
'//server/share/Target.md'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('preserves Linux relative note-link resolution', () => {
|
||||||
|
assert.equal(
|
||||||
|
resolvePathFromFile('/vault/folder/Current.md', '../Target.md'),
|
||||||
|
'/vault/Target.md'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('converts Windows asset URLs back to portable attachment paths', () => {
|
||||||
|
assert.equal(
|
||||||
|
normalizeLocalAssetPath('/C:\\Users\\user\\Vault\\image.png'),
|
||||||
|
'C:/Users/user/Vault/image.png'
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
assetSourceToMarkdown(
|
||||||
|
'http://asset.localhost/C%3A%5CUsers%5Cuser%5CVault%5C.helixnotes%5Cattachments%5Cimage.png',
|
||||||
|
'C:\\Users\\user\\Vault\\Note.md',
|
||||||
|
'C:\\Users\\user\\Vault'
|
||||||
|
),
|
||||||
|
'.helixnotes/attachments/image.png'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('preserves portable asset paths on Linux and macOS', () => {
|
||||||
|
assert.equal(
|
||||||
|
assetSourceToMarkdown(
|
||||||
|
'asset://localhost/%2Fhome%2Fuser%2FVault%2F.helixnotes%2Fattachments%2Fimage.png',
|
||||||
|
'/home/user/Vault/Note.md',
|
||||||
|
'/home/user/Vault'
|
||||||
|
),
|
||||||
|
'.helixnotes/attachments/image.png'
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
assetSourceToMarkdown(
|
||||||
|
'asset://localhost/%2FUsers%2Fuser%2FVault%2Fassets%2Fimage.png',
|
||||||
|
'/Users/user/Vault/notes/Note.md',
|
||||||
|
'/Users/user/Vault'
|
||||||
|
),
|
||||||
|
'../assets/image.png'
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
assetSourceToMarkdown('../assets/image.png', '/vault/notes/Note.md', '/vault'),
|
||||||
|
'../assets/image.png'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('decodes local asset URLs without damaging platform roots', () => {
|
||||||
|
assert.equal(
|
||||||
|
assetUrlToLocalPath('http://asset.localhost/C%3A%5CUsers%5Cuser%5CVault%5Cimage.png'),
|
||||||
|
'C:/Users/user/Vault/image.png'
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
assetUrlToLocalPath('asset://localhost/%2Fhome%2Fuser%2FVault%2Fimage.png'),
|
||||||
|
'/home/user/Vault/image.png'
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
assetUrlToLocalPath('http://asset.localhost/%5C%5Cserver%5Cshare%5CVault%5Cimage.png'),
|
||||||
|
'//server/share/Vault/image.png'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('resolves vault files consistently across platforms', () => {
|
||||||
|
assert.equal(
|
||||||
|
resolveVaultFilePath('../assets/image.png', 'C:\\Vault\\notes\\Note.md', 'C:\\Vault'),
|
||||||
|
'C:/Vault/assets/image.png'
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
resolveVaultFilePath('.helixnotes/attachments/image.png', 'C:\\Vault\\notes\\Note.md', 'C:\\Vault'),
|
||||||
|
'C:/Vault/.helixnotes/attachments/image.png'
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
resolveVaultFilePath('../assets/image.png', '/vault/notes/Note.md', '/vault'),
|
||||||
|
'/vault/assets/image.png'
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
resolveVaultFilePath('../assets/image.png', '\\\\server\\share\\Vault\\notes\\Note.md', '\\\\server\\share\\Vault'),
|
||||||
|
'//server/share/Vault/assets/image.png'
|
||||||
|
);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user