에디터 미디어 업로드 검증 로직 분리

This commit is contained in:
2026-07-24 17:55:33 +09:00
parent 6cc820d2a2
commit e3f98cb820
7 changed files with 143 additions and 61 deletions

View File

@@ -2,6 +2,7 @@ import assert from 'node:assert/strict'
import test from 'node:test'
import {
createMediaBlockMarkdown,
findUploadSizeLimitError,
formatMediaFileSize,
getGallerySelectionOrder,
getMediaItemKind,
@@ -9,8 +10,10 @@ import {
isMediaItemSelectableForTarget,
isUploadFileAllowedForMediaTarget,
resolveSelectedMediaItems,
resolveUploadFetchErrorMessage,
toggleMediaSelectionState
} from '../lib/markdown-editor-media.js'
import { buildDefaultUploadSizeLimits } from '../lib/upload-size-limit.js'
test('미디어 파일 크기를 표시 문자열로 변환한다', () => {
assert.equal(formatMediaFileSize(512), '512 B')
@@ -127,3 +130,58 @@ test('선택된 URL 순서대로 미디어 항목을 해석한다', () => {
{ url: '/b.png', source: 'list' }
])
})
test('업로드 API 오류를 사용자 메시지로 변환한다', () => {
assert.equal(resolveUploadFetchErrorMessage({
data: {
message: ' 서버 오류 '
}
}), '서버 오류')
assert.equal(resolveUploadFetchErrorMessage({ statusCode: 413 }), '업로드 가능한 파일 크기를 초과했습니다.')
assert.equal(resolveUploadFetchErrorMessage(new Error('네트워크 오류')), '네트워크 오류')
assert.equal(resolveUploadFetchErrorMessage({}), '파일 업로드에 실패했습니다.')
})
test('업로드 파일 한도 초과 메시지를 계산한다', () => {
const uploadSizeLimits = buildDefaultUploadSizeLimits({
image: 100
})
assert.equal(findUploadSizeLimitError({
files: [
{ name: 'a.png', type: 'image/png', size: 10 },
{ name: 'b.png', type: 'image/png', size: 10 }
],
maxFileCount: 1,
maxTotalSize: 1000,
uploadSizeLimits
}), '한 번에 업로드할 수 있는 파일은 최대 1개입니다.')
assert.equal(findUploadSizeLimitError({
files: [
{ name: 'a.png', type: 'image/png', size: 60 },
{ name: 'b.png', type: 'image/png', size: 60 }
],
maxFileCount: 5,
maxTotalSize: 100,
uploadSizeLimits
}), '한 번에 업로드 가능한 전체 용량을 초과했습니다. (최대 100B)')
assert.equal(findUploadSizeLimitError({
files: [
{ name: 'a.png', type: 'image/png', size: 101 }
],
maxFileCount: 5,
maxTotalSize: 1000,
uploadSizeLimits
}), '파일 크기가 너무 큽니다. (최대 100B)')
assert.equal(findUploadSizeLimitError({
files: [
{ name: 'a.png', type: 'image/png', size: 100 }
],
maxFileCount: 5,
maxTotalSize: 1000,
uploadSizeLimits
}), null)
})