Files
admin-web/src/modules/overseas-master-data/downloadCsv.test.ts
T

30 lines
1.4 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import { saveCsv } from '@/shared/downloadCsv'
describe('saveCsv', () => {
beforeEach(() => vi.stubGlobal('URL', { createObjectURL: vi.fn(), revokeObjectURL: vi.fn() }))
afterEach(() => { vi.restoreAllMocks(); vi.unstubAllGlobals() })
it('downloads the provided Blob with the requested file name and always revokes the URL', () => {
const blob = new Blob(['id,status\n1,ACTIVE\n'], { type: 'text/csv;charset=UTF-8' })
const createObjectURL = vi.mocked(URL.createObjectURL).mockReturnValue('blob:overseas-master-data')
const revokeObjectURL = vi.mocked(URL.revokeObjectURL)
const click = vi.spyOn(HTMLAnchorElement.prototype, 'click').mockImplementation(() => undefined)
saveCsv(blob, 'vehicles.csv')
expect(createObjectURL).toHaveBeenCalledWith(blob)
expect(click).toHaveBeenCalledOnce()
expect(revokeObjectURL).toHaveBeenCalledWith('blob:overseas-master-data')
})
it('revokes the Blob URL even when the browser click fails', () => {
vi.mocked(URL.createObjectURL).mockReturnValue('blob:failed-download')
const revokeObjectURL = vi.mocked(URL.revokeObjectURL)
vi.spyOn(HTMLAnchorElement.prototype, 'click').mockImplementation(() => { throw new Error('browser blocked') })
expect(() => saveCsv(new Blob(['csv']), 'quotes.csv')).toThrow('browser blocked')
expect(revokeObjectURL).toHaveBeenCalledWith('blob:failed-download')
})
})