에디터 미디어 선택 대상 계산 분리

This commit is contained in:
2026-07-24 18:18:12 +09:00
parent 408d4aa420
commit fe1a390699
7 changed files with 127 additions and 52 deletions

View File

@@ -3,13 +3,17 @@ import test from 'node:test'
import {
buildMediaPickerPageItems,
buildMediaPickerRangeLabel,
buildMediaPickerUploadHint,
createMediaBlockMarkdown,
createDefaultMediaPickerPagination,
findUploadSizeLimitError,
formatMediaFileSize,
getGallerySelectionOrder,
getMediaItemKind,
getMediaPickerAcceptForTarget,
getMediaPickerKindForTarget,
getMediaPickerPreviewUrl,
isGalleryMediaPickerTarget,
isMediaItemSelectableForTarget,
isUploadFileAllowedForMediaTarget,
normalizeMediaPickerResponse,
@@ -60,6 +64,38 @@ test('업로드 파일은 선택 대상별 MIME 타입으로 허용 여부를
assert.equal(isUploadFileAllowedForMediaTarget({ type: 'image/png' }, 'file'), false)
})
test('미디어 선택 대상별 입력 accept와 API kind를 계산한다', () => {
assert.equal(getMediaPickerAcceptForTarget('image'), 'image/*')
assert.equal(getMediaPickerAcceptForTarget('gallery'), 'image/*')
assert.equal(getMediaPickerAcceptForTarget('video'), 'video/*')
assert.equal(getMediaPickerAcceptForTarget('audio'), 'audio/*')
assert.equal(getMediaPickerAcceptForTarget('file'), '.pdf,.zip,.txt,.csv,.docx,.xlsx,.pptx')
assert.equal(getMediaPickerKindForTarget('image'), 'image')
assert.equal(getMediaPickerKindForTarget('active-gallery'), 'image')
assert.equal(getMediaPickerKindForTarget('video'), 'video')
assert.equal(getMediaPickerKindForTarget('file'), 'file')
assert.equal(getMediaPickerKindForTarget('unknown'), 'all')
})
test('미디어 선택 대상별 갤러리 여부와 업로드 안내 문구를 계산한다', () => {
const uploadSizeLimits = buildDefaultUploadSizeLimits({
image: 10485760,
video: 209715200,
audio: 52428800,
document: 52428800
})
assert.equal(isGalleryMediaPickerTarget('gallery'), true)
assert.equal(isGalleryMediaPickerTarget('active-gallery'), true)
assert.equal(isGalleryMediaPickerTarget('image'), false)
assert.equal(buildMediaPickerUploadHint('gallery', uploadSizeLimits), '여러 이미지를 한 번에 선택할 수 있습니다. (최대 10MB)')
assert.equal(buildMediaPickerUploadHint('video', uploadSizeLimits), 'MP4, WebM, MOV 비디오를 업로드할 수 있습니다. (최대 200MB)')
assert.equal(buildMediaPickerUploadHint('audio', uploadSizeLimits), 'MP3, WAV, OGG, M4A 오디오를 업로드할 수 있습니다. (최대 50MB)')
assert.equal(buildMediaPickerUploadHint('file', uploadSizeLimits), 'PDF, ZIP, 문서 파일을 업로드할 수 있습니다. (최대 50MB)')
assert.equal(buildMediaPickerUploadHint('image', uploadSizeLimits), '단일 이미지가 본문에 삽입됩니다. (최대 10MB)')
})
test('미디어 항목으로 fenced 미디어 블록을 만든다', () => {
assert.deepEqual(createMediaBlockMarkdown('video', {
url: '/uploads/a.mp4',