mirror of https://github.com/langgenius/dify.git
76 lines
2.4 KiB
TypeScript
76 lines
2.4 KiB
TypeScript
import { downloadBlob, downloadUrl } from './download'
|
|
|
|
describe('downloadUrl', () => {
|
|
let mockAnchor: HTMLAnchorElement
|
|
|
|
beforeEach(() => {
|
|
mockAnchor = {
|
|
href: '',
|
|
download: '',
|
|
rel: '',
|
|
target: '',
|
|
style: { display: '' },
|
|
click: vi.fn(),
|
|
remove: vi.fn(),
|
|
} as unknown as HTMLAnchorElement
|
|
|
|
vi.spyOn(document, 'createElement').mockReturnValue(mockAnchor)
|
|
vi.spyOn(document.body, 'appendChild').mockImplementation((node: Node) => node)
|
|
})
|
|
|
|
afterEach(() => {
|
|
vi.restoreAllMocks()
|
|
})
|
|
|
|
it('should create a link and trigger a download correctly', () => {
|
|
downloadUrl({ url: 'https://example.com/file.txt', fileName: 'file.txt', target: '_blank' })
|
|
|
|
expect(mockAnchor.href).toBe('https://example.com/file.txt')
|
|
expect(mockAnchor.download).toBe('file.txt')
|
|
expect(mockAnchor.rel).toBe('noopener noreferrer')
|
|
expect(mockAnchor.target).toBe('_blank')
|
|
expect(mockAnchor.style.display).toBe('none')
|
|
expect(mockAnchor.click).toHaveBeenCalled()
|
|
expect(mockAnchor.remove).toHaveBeenCalled()
|
|
})
|
|
|
|
it('should skip when url is empty', () => {
|
|
downloadUrl({ url: '' })
|
|
expect(document.createElement).not.toHaveBeenCalled()
|
|
})
|
|
})
|
|
|
|
describe('downloadBlob', () => {
|
|
it('should create a blob url, trigger download, and revoke url', () => {
|
|
const blob = new Blob(['test'], { type: 'text/plain' })
|
|
const mockUrl = 'blob:mock-url'
|
|
const createObjectURLMock = vi.spyOn(window.URL, 'createObjectURL').mockReturnValue(mockUrl)
|
|
const revokeObjectURLMock = vi.spyOn(window.URL, 'revokeObjectURL').mockImplementation(() => {})
|
|
|
|
const mockAnchor = {
|
|
href: '',
|
|
download: '',
|
|
rel: '',
|
|
target: '',
|
|
style: { display: '' },
|
|
click: vi.fn(),
|
|
remove: vi.fn(),
|
|
} as unknown as HTMLAnchorElement
|
|
|
|
vi.spyOn(document, 'createElement').mockReturnValue(mockAnchor)
|
|
vi.spyOn(document.body, 'appendChild').mockImplementation((node: Node) => node)
|
|
|
|
downloadBlob({ data: blob, fileName: 'file.txt' })
|
|
|
|
expect(createObjectURLMock).toHaveBeenCalledWith(blob)
|
|
expect(mockAnchor.href).toBe(mockUrl)
|
|
expect(mockAnchor.download).toBe('file.txt')
|
|
expect(mockAnchor.rel).toBe('noopener noreferrer')
|
|
expect(mockAnchor.click).toHaveBeenCalled()
|
|
expect(mockAnchor.remove).toHaveBeenCalled()
|
|
expect(revokeObjectURLMock).toHaveBeenCalledWith(mockUrl)
|
|
|
|
vi.restoreAllMocks()
|
|
})
|
|
})
|