에디터 미디어 선택 상태 로직 분리
This commit is contained in:
@@ -3,10 +3,13 @@ import test from 'node:test'
|
||||
import {
|
||||
createMediaBlockMarkdown,
|
||||
formatMediaFileSize,
|
||||
getGallerySelectionOrder,
|
||||
getMediaItemKind,
|
||||
getMediaPickerPreviewUrl,
|
||||
isMediaItemSelectableForTarget,
|
||||
isUploadFileAllowedForMediaTarget
|
||||
isUploadFileAllowedForMediaTarget,
|
||||
resolveSelectedMediaItems,
|
||||
toggleMediaSelectionState
|
||||
} from '../lib/markdown-editor-media.js'
|
||||
|
||||
test('미디어 파일 크기를 표시 문자열로 변환한다', () => {
|
||||
@@ -62,3 +65,65 @@ test('미디어 항목으로 fenced 미디어 블록을 만든다', () => {
|
||||
size: 2048
|
||||
}), [':::file', 'url=/uploads/a.pdf', 'title=a.pdf', 'description=', 'name=a.pdf', 'size=2 KB', ':::'])
|
||||
})
|
||||
|
||||
test('갤러리 선택 순서를 선택 URL 순서로 반환한다', () => {
|
||||
assert.equal(getGallerySelectionOrder(['/a.png', '/b.png'], '/b.png'), 2)
|
||||
assert.equal(getGallerySelectionOrder(['/a.png'], '/b.png'), 0)
|
||||
})
|
||||
|
||||
test('단일 미디어 선택은 기존 선택을 새 항목 하나로 교체한다', () => {
|
||||
assert.deepEqual(toggleMediaSelectionState({
|
||||
selectedUrls: ['/old.png'],
|
||||
selectedItemMap: {
|
||||
'/old.png': { url: '/old.png' }
|
||||
},
|
||||
mediaItem: { url: '/new.png', name: 'new' },
|
||||
isGallery: false
|
||||
}), {
|
||||
selectedUrls: ['/new.png'],
|
||||
selectedItemMap: {
|
||||
'/new.png': { url: '/new.png', name: 'new' }
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
test('갤러리 미디어 선택은 선택 추가와 제거를 토글한다', () => {
|
||||
const selected = toggleMediaSelectionState({
|
||||
selectedUrls: ['/a.png'],
|
||||
selectedItemMap: {
|
||||
'/a.png': { url: '/a.png' }
|
||||
},
|
||||
mediaItem: { url: '/b.png' },
|
||||
isGallery: true
|
||||
})
|
||||
|
||||
assert.deepEqual(selected.selectedUrls, ['/a.png', '/b.png'])
|
||||
assert.deepEqual(Object.keys(selected.selectedItemMap), ['/a.png', '/b.png'])
|
||||
|
||||
assert.deepEqual(toggleMediaSelectionState({
|
||||
selectedUrls: selected.selectedUrls,
|
||||
selectedItemMap: selected.selectedItemMap,
|
||||
mediaItem: { url: '/a.png' },
|
||||
isGallery: true
|
||||
}), {
|
||||
selectedUrls: ['/b.png'],
|
||||
selectedItemMap: {
|
||||
'/b.png': { url: '/b.png' }
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
test('선택된 URL 순서대로 미디어 항목을 해석한다', () => {
|
||||
assert.deepEqual(resolveSelectedMediaItems(
|
||||
['/a.png', '/b.png', '/missing.png'],
|
||||
{
|
||||
'/a.png': { url: '/a.png', source: 'map' }
|
||||
},
|
||||
[
|
||||
{ url: '/b.png', source: 'list' }
|
||||
]
|
||||
), [
|
||||
{ url: '/a.png', source: 'map' },
|
||||
{ url: '/b.png', source: 'list' }
|
||||
])
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user