관리자 미디어 선택 상태 분리

This commit is contained in:
2026-07-27 18:30:19 +09:00
parent b3f3cbd0ec
commit a122ef46ac
12 changed files with 661 additions and 266 deletions

View File

@@ -8,6 +8,7 @@ import {
buildMediaPickerUploadHint,
createMediaBlockMarkdown,
createDefaultMediaPickerPagination,
createSelectedMediaInsertPlan,
findUploadSizeLimitError,
formatMediaFileSize,
getGallerySelectionOrder,
@@ -157,6 +158,100 @@ test('미디어 항목으로 fenced 미디어 블록을 만든다', () => {
}), [':::file', 'url=/uploads/a.pdf', 'title=a.pdf', 'description=', 'name=a.pdf', 'size=2 KB', ':::'])
})
test('선택 미디어 삽입 계획은 슬래시 줄 삽입과 일반 삽입을 구분한다', () => {
assert.deepEqual(createSelectedMediaInsertPlan({
target: 'image',
selectedItems: [{ url: '/uploads/a.png' }],
liveSlashLine: 3
}), {
kind: 'insert-at-line',
line: 3,
lines: ['![](/uploads/a.png)']
})
assert.deepEqual(createSelectedMediaInsertPlan({
target: 'gallery',
selectedItems: [{ url: '/uploads/a.png' }, { url: '/uploads/b.png' }],
liveSlashLine: 1
}), {
kind: 'insert-at-line',
line: 1,
lines: [':::gallery', '![](/uploads/a.png)', '![](/uploads/b.png)', ':::']
})
assert.deepEqual(createSelectedMediaInsertPlan({
target: 'video',
selectedItems: [{ url: '/uploads/a.mp4', title: '영상' }],
liveSlashLine: 2
}), {
kind: 'insert-at-line',
line: 2,
lines: [':::video', 'url=/uploads/a.mp4', 'title=영상', 'caption=', ':::']
})
})
test('선택 미디어 삽입 계획은 일반 삽입 대상을 구분한다', () => {
assert.deepEqual(createSelectedMediaInsertPlan({
target: 'image',
selectedItems: [{ url: '/uploads/a.png' }],
liveSlashLine: null
}), {
kind: 'image',
image: {
url: '/uploads/a.png',
useAlt: false,
caption: ''
}
})
assert.deepEqual(createSelectedMediaInsertPlan({
target: 'active-gallery',
selectedItems: [{ url: '/uploads/a.png' }, { url: '/uploads/b.png' }],
liveSlashLine: null
}), {
kind: 'active-gallery',
images: [
{
url: '/uploads/a.png',
useAlt: false,
caption: ''
},
{
url: '/uploads/b.png',
useAlt: false,
caption: ''
}
]
})
assert.deepEqual(createSelectedMediaInsertPlan({
target: 'file',
selectedItems: [{ url: '/uploads/a.pdf', name: 'a.pdf', size: 2048 }],
liveSlashLine: null
}), {
kind: 'block',
lines: [':::file', 'url=/uploads/a.pdf', 'title=a.pdf', 'description=', 'name=a.pdf', 'size=2 KB', ':::']
})
})
test('선택 미디어 삽입 계획은 적용할 항목이 없으면 무시한다', () => {
assert.deepEqual(createSelectedMediaInsertPlan({
target: 'image',
selectedItems: [],
liveSlashLine: null
}), {
kind: 'none'
})
assert.deepEqual(createSelectedMediaInsertPlan({
target: 'unknown',
selectedItems: [{ url: '/uploads/a.png' }],
liveSlashLine: 1
}), {
kind: 'none'
})
})
test('갤러리 선택 순서를 선택 URL 순서로 반환한다', () => {
assert.equal(getGallerySelectionOrder(['/a.png', '/b.png'], '/b.png'), 2)
assert.equal(getGallerySelectionOrder(['/a.png'], '/b.png'), 0)