Files
memind/user-image-url.test.mjs
2026-06-29 22:20:04 +08:00

46 lines
1.5 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
buildPublicImagePaths,
buildImgproxyDisplayUrl,
formatImageDateFolder,
isPublicImageStorageKey,
} from './user-image-url.mjs';
test('buildPublicImagePaths uses date folder under user images namespace', () => {
const paths = buildPublicImagePaths({
userId: 'user-1',
assetId: 'asset-1',
mimeType: 'image/png',
originalFilename: '封面.png',
date: new Date('2026-06-29T10:00:00+08:00'),
});
assert.equal(paths.dateFolder, '2026-06-29');
assert.equal(
paths.storageKey,
'users/user-1/images/2026-06-29/封面.png',
);
assert.equal(
paths.workspaceRelativePath,
'public/images/2026-06-29/封面.png',
);
});
test('buildImgproxyDisplayUrl falls back to unsafe local path without signer', () => {
const url = buildImgproxyDisplayUrl('users/u1/images/2026-06-29/a.jpg', {
baseUrl: 'http://localhost:20081',
signer: null,
});
assert.match(url, /^http:\/\/localhost:20081\/unsafe\//);
assert.match(url, /plain\/local:\/\/\/users\/u1\/images\/2026-06-29\/a\.jpg@jpg$/);
});
test('isPublicImageStorageKey detects dated image storage keys', () => {
assert.equal(isPublicImageStorageKey('users/u1/images/2026-06-29/a.jpg'), true);
assert.equal(isPublicImageStorageKey('users/u1/public/.tmp-images/a.jpg'), false);
});
test('formatImageDateFolder uses local calendar date', () => {
assert.equal(formatImageDateFolder(new Date('2026-01-02T01:00:00+08:00')), '2026-01-02');
});