Files
our_recipe_atlas/tests/image-storage.test.js
2026-08-13 18:36:31 +09:00

37 lines
1.4 KiB
JavaScript

import assert from 'node:assert/strict';
import path from 'node:path';
import test from 'node:test';
import {
buildRelativeImagePath,
isPrivateAddress,
resolveImagePath,
} from '../src/services/image-storage.service.js';
test('이미지는 recipe ID 기준 상대 경로로만 저장한다', () => {
assert.equal(
buildRelativeImagePath('0879bf0f-2b64-49fc-a13f-b11b56031993'),
'recipes/0879bf0f-2b64-49fc-a13f-b11b56031993/cover.webp',
);
assert.throws(() => buildRelativeImagePath('../outside'), /recipe ID/);
});
test('동일한 이미지 상대경로를 Windows와 Linux 파일 경로로 해석한다', () => {
const relativePath = 'recipes/recipe-1/cover.webp';
assert.equal(
resolveImagePath('D:\\project\\our_recipe_atlas\\data\\images', relativePath, path.win32),
'D:\\project\\our_recipe_atlas\\data\\images\\recipes\\recipe-1\\cover.webp',
);
assert.equal(
resolveImagePath('/mnt/recipe-ssd/our_recipe_atlas/images', relativePath, path.posix),
'/mnt/recipe-ssd/our_recipe_atlas/images/recipes/recipe-1/cover.webp',
);
});
test('SSRF에 사용될 수 있는 사설 및 loopback 주소를 판별한다', () => {
assert.equal(isPrivateAddress('127.0.0.1'), true);
assert.equal(isPrivateAddress('192.168.0.250'), true);
assert.equal(isPrivateAddress('::1'), true);
assert.equal(isPrivateAddress('8.8.8.8'), false);
});