From deba6c81fb8b4f4ab72fc2d1d6a780c2cfb39d4c Mon Sep 17 00:00:00 2001
From: Gener <39689863+GenerQAQ@users.noreply.github.com>
Date: Mon, 8 May 2023 20:26:38 +0800
Subject: [PATCH] fix(components): [upload] before-upload change data in
promise (#12575)
* fix(components): [upload] befroe-upload change data in promise
closed #12340
* fix(components): [upload] befroe-upload change data in promise
closed #12340
---
.../upload/__tests__/upload.test.tsx | 82 +++++++++++++++++++
.../components/upload/src/upload-content.vue | 7 +-
2 files changed, 88 insertions(+), 1 deletion(-)
diff --git a/packages/components/upload/__tests__/upload.test.tsx b/packages/components/upload/__tests__/upload.test.tsx
index 9595afa0d6..21a7b733d2 100644
--- a/packages/components/upload/__tests__/upload.test.tsx
+++ b/packages/components/upload/__tests__/upload.test.tsx
@@ -165,6 +165,88 @@ describe('', () => {
expect(keyList).toEqual(['test-file.txt', 'test-file2.txt'])
})
+ test('in beforeUpload return promise change data correctly to request', async () => {
+ const keyList: string[] = []
+ const beforeUpload = vi.fn((file: File) => {
+ return new Promise((resolve) => {
+ data.value.key = file.name
+ resolve(file)
+ })
+ })
+ const httpRequest = vi.fn((val) => {
+ keyList.push(val?.data?.key)
+ return Promise.resolve()
+ })
+
+ const data = ref({ key: '' })
+
+ const wrapper = mount(() => (
+
+ ))
+
+ const fileList = [
+ new File(['content'], 'test-file.txt'),
+ new File(['content2'], 'test-file2.txt'),
+ ]
+ mockGetFile(wrapper.find('input').element, fileList)
+
+ await wrapper.find('input').trigger('change')
+
+ expect(beforeUpload).toHaveBeenCalled()
+ await flushPromises()
+
+ expect(keyList).toEqual(['test-file.txt', 'test-file2.txt'])
+ })
+
+ test('upload files and save keyList', async () => {
+ const keyList: string[] = []
+ const beforeUpload = vi.fn((file: File) => {
+ return new Promise((resolve) => {
+ data.value.key = file.name
+ resolve(file)
+ })
+ })
+ const httpRequest = vi.fn((val) => {
+ keyList.push(val?.data?.key)
+ return Promise.resolve()
+ })
+
+ const data = ref({ key: '' })
+
+ const wrapper = mount(() => (
+
+ ))
+
+ // upload the first file
+ const firstFile = new File(['content'], 'test-file.txt')
+ mockGetFile(wrapper.find('input').element, [firstFile])
+ await wrapper.find('input').trigger('change')
+ await flushPromises()
+
+ // upload the second file
+ const secondFile = new File(['content2'], 'test-file2.txt')
+ mockGetFile(wrapper.find('input').element, [firstFile, secondFile])
+ await wrapper.find('input').trigger('change')
+ await flushPromises()
+
+ // check the keyList after uploading both files
+ expect(keyList).toEqual([
+ 'test-file.txt',
+ 'test-file.txt',
+ 'test-file2.txt',
+ ])
+ })
+
test('onProgress should work', async () => {
const onProgress = vi.fn()
const httpRequest = vi.fn(({ onProgress }) => {
diff --git a/packages/components/upload/src/upload-content.vue b/packages/components/upload/src/upload-content.vue
index ff7c903cf5..eb52778155 100644
--- a/packages/components/upload/src/upload-content.vue
+++ b/packages/components/upload/src/upload-content.vue
@@ -29,7 +29,7 @@