fix(driver): 限制驾驶证上传为 JPG 和 PNG 图片
This commit is contained in:
@@ -307,6 +307,23 @@ describe('driver page workflows', () => {
|
||||
expect(api.getDriverQualification).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
it('accepts image selection and clears it when a PDF is selected instead', async () => {
|
||||
vi.mocked(api.updateDriver).mockResolvedValue(structuredClone(driver))
|
||||
const wrapper = mount(DriverEditorDialog, { modelValue: false, driver })
|
||||
await wrapper.setProps({ modelValue: true }); await flushPromises()
|
||||
const picker = wrapper.get('input[type="file"]')
|
||||
expect(picker.attributes('accept')).toBe('image/jpeg,image/png')
|
||||
Object.defineProperty(picker.element, 'files', { value: [new File(['image'], 'license.png', { type: 'image/png' })], configurable: true })
|
||||
await picker.trigger('change')
|
||||
expect(ElMessage.warning).not.toHaveBeenCalled()
|
||||
Object.defineProperty(picker.element, 'files', { value: [new File(['%PDF'], 'license.pdf', { type: 'application/pdf' })], configurable: true })
|
||||
await picker.trigger('change')
|
||||
expect(ElMessage.warning).toHaveBeenCalledWith('请选择非空 JPG 或 PNG,最大 10MiB')
|
||||
wrapper.findComponent({ name: 'AppDialog' }).vm.$emit('confirm'); await flushPromises()
|
||||
expect(api.updateDriver).toHaveBeenCalledTimes(1)
|
||||
expect(api.uploadDriverLicense).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('does not create a second draft when attachment upload fails after saving', async () => {
|
||||
vi.mocked(api.createDriver).mockResolvedValue({ ...structuredClone(driver), recordVersion: 0 })
|
||||
vi.mocked(api.uploadDriverLicense).mockRejectedValueOnce(new Error('文件服务不可用')).mockResolvedValueOnce({ ...structuredClone(driver), recordVersion: 1 })
|
||||
@@ -317,7 +334,7 @@ describe('driver page workflows', () => {
|
||||
inputs[1]!.vm.$emit('update:modelValue', '123')
|
||||
const selects = wrapper.findAllComponents({ name: 'ElSelect' })
|
||||
selects.at(-1)!.vm.$emit('update:modelValue', 'UTC')
|
||||
const file = new File(['%PDF-test'], 'license.pdf', { type: 'application/pdf' })
|
||||
const file = new File(['image'], 'license.png', { type: 'image/png' })
|
||||
const picker = wrapper.get('input[type="file"]')
|
||||
Object.defineProperty(picker.element, 'files', { value: [file] })
|
||||
await picker.trigger('change')
|
||||
@@ -342,7 +359,7 @@ describe('driver page workflows', () => {
|
||||
expect(api.updateDriver).toHaveBeenCalledWith(driver.id, 2, expect.anything())
|
||||
await wrapper.setProps({ modelValue: false }); await flushPromises()
|
||||
await wrapper.setProps({ driver: other, modelValue: true }); await flushPromises()
|
||||
const file = new File(['%PDF-other'], 'other-driver.pdf', { type: 'application/pdf' })
|
||||
const file = new File(['image'], 'other-driver.jpg', { type: 'image/jpeg' })
|
||||
const picker = wrapper.get('input[type="file"]')
|
||||
Object.defineProperty(picker.element, 'files', { value: [file], configurable: true })
|
||||
await picker.trigger('change')
|
||||
@@ -365,7 +382,7 @@ describe('driver page workflows', () => {
|
||||
const wrapper = mount(DriverEditorDialog, { modelValue: false, driver })
|
||||
await wrapper.setProps({ modelValue: true }); await flushPromises()
|
||||
const picker = wrapper.get('input[type="file"]')
|
||||
Object.defineProperty(picker.element, 'files', { value: [new File(['%PDF'], 'driver.pdf', { type: 'application/pdf' })] })
|
||||
Object.defineProperty(picker.element, 'files', { value: [new File(['image'], 'driver.jpg', { type: 'image/jpeg' })] })
|
||||
await picker.trigger('change')
|
||||
wrapper.findComponent({ name: 'AppDialog' }).vm.$emit('confirm'); await flushPromises()
|
||||
wrapper.unmount()
|
||||
|
||||
Reference in New Issue
Block a user