feat(phase4): automate admin integration acceptance
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { saveCsv } from './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')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user