미디어 선택 요청 흐름 분리
This commit is contained in:
@@ -107,3 +107,124 @@ test('관리자 Markdown 미디어 선택 모달은 업로드 파일 선택 상
|
||||
assert.equal(picker.isUploadFileAllowedForPicker({ type: 'image/png' }), true)
|
||||
assert.equal(picker.isUploadFileAllowedForPicker({ type: 'video/mp4' }), false)
|
||||
})
|
||||
|
||||
test('관리자 Markdown 미디어 선택 모달은 서버 목록 조회를 상태에 반영한다', async () => {
|
||||
const originalFetch = globalThis.$fetch
|
||||
const calls = []
|
||||
globalThis.$fetch = async (url, options) => {
|
||||
calls.push({ url, options })
|
||||
return {
|
||||
items: [{ url: '/uploads/a.png', kind: 'image' }],
|
||||
pagination: {
|
||||
page: 2,
|
||||
pageSize: 20,
|
||||
total: 21,
|
||||
pageCount: 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
const picker = useAdminMarkdownMediaPicker({ uploadSizeLimits, pageSize: 20 })
|
||||
picker.openMediaPickerState('image')
|
||||
picker.mediaSearchQuery.value = ' a '
|
||||
picker.mediaPickerPage.value = 2
|
||||
|
||||
await picker.fetchMediaItems()
|
||||
|
||||
assert.equal(picker.isLoadingMedia.value, false)
|
||||
assert.deepEqual(picker.mediaItems.value, [{ url: '/uploads/a.png', kind: 'image' }])
|
||||
assert.equal(picker.mediaPickerPage.value, 2)
|
||||
assert.deepEqual(calls[0], {
|
||||
url: '/admin/api/media',
|
||||
options: {
|
||||
query: {
|
||||
paged: '1',
|
||||
tab: 'library',
|
||||
page: 2,
|
||||
pageSize: 20,
|
||||
kind: 'image',
|
||||
search: 'a'
|
||||
}
|
||||
}
|
||||
})
|
||||
} finally {
|
||||
globalThis.$fetch = originalFetch
|
||||
}
|
||||
})
|
||||
|
||||
test('관리자 Markdown 미디어 선택 모달은 업로드 후 라이브러리 탭과 선택 상태를 갱신한다', async () => {
|
||||
const originalFetch = globalThis.$fetch
|
||||
const uploadedFile = { url: '/uploads/a.png', kind: 'image' }
|
||||
const calls = []
|
||||
globalThis.$fetch = async (url, options) => {
|
||||
calls.push({ url, options })
|
||||
|
||||
if (url === '/admin/api/uploads') {
|
||||
return { files: [uploadedFile] }
|
||||
}
|
||||
|
||||
return {
|
||||
items: [uploadedFile],
|
||||
pagination: {
|
||||
page: 1,
|
||||
pageSize: 50,
|
||||
total: 1,
|
||||
pageCount: 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
const picker = useAdminMarkdownMediaPicker({
|
||||
uploadSizeLimits,
|
||||
uploadMaxFileCount: computed(() => 3),
|
||||
uploadMaxTotalSize: computed(() => 1024 * 1024)
|
||||
})
|
||||
picker.openMediaPickerState('image')
|
||||
|
||||
const uploadedFiles = await picker.uploadFilesIntoMediaPicker([
|
||||
new File(['image'], 'a.png', { type: 'image/png' })
|
||||
])
|
||||
|
||||
assert.deepEqual(uploadedFiles, [uploadedFile])
|
||||
assert.equal(picker.isUploading.value, false)
|
||||
assert.equal(picker.activeMediaPickerTab.value, 'library')
|
||||
assert.deepEqual(picker.selectedMediaUrls.value, ['/uploads/a.png'])
|
||||
assert.deepEqual(picker.mediaItems.value, [uploadedFile])
|
||||
assert.equal(calls[0].url, '/admin/api/uploads')
|
||||
assert.equal(calls[0].options.method, 'POST')
|
||||
assert.ok(calls[0].options.body instanceof FormData)
|
||||
assert.equal(calls[1].url, '/admin/api/media')
|
||||
} finally {
|
||||
globalThis.$fetch = originalFetch
|
||||
}
|
||||
})
|
||||
|
||||
test('관리자 Markdown 미디어 선택 모달 업로드는 한도 초과 시 요청하지 않는다', async () => {
|
||||
const originalFetch = globalThis.$fetch
|
||||
let called = false
|
||||
globalThis.$fetch = async () => {
|
||||
called = true
|
||||
return { files: [] }
|
||||
}
|
||||
|
||||
try {
|
||||
const picker = useAdminMarkdownMediaPicker({
|
||||
uploadSizeLimits,
|
||||
uploadMaxFileCount: computed(() => 1),
|
||||
uploadMaxTotalSize: computed(() => 1024 * 1024)
|
||||
})
|
||||
|
||||
await assert.rejects(
|
||||
() => picker.uploadMediaFiles([
|
||||
new File(['a'], 'a.png', { type: 'image/png' }),
|
||||
new File(['b'], 'b.png', { type: 'image/png' })
|
||||
]),
|
||||
/최대 1개/
|
||||
)
|
||||
assert.equal(called, false)
|
||||
} finally {
|
||||
globalThis.$fetch = originalFetch
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user