diff options
Diffstat (limited to 'spec/frontend/lib/utils/downloader_spec.js')
-rw-r--r-- | spec/frontend/lib/utils/downloader_spec.js | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/spec/frontend/lib/utils/downloader_spec.js b/spec/frontend/lib/utils/downloader_spec.js new file mode 100644 index 00000000000..c14cba3a62b --- /dev/null +++ b/spec/frontend/lib/utils/downloader_spec.js @@ -0,0 +1,40 @@ +import downloader from '~/lib/utils/downloader'; + +describe('Downloader', () => { + let a; + + beforeEach(() => { + a = { click: jest.fn() }; + jest.spyOn(document, 'createElement').mockImplementation(() => a); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('when inline file content is provided', () => { + const fileData = 'inline content'; + const fileName = 'test.csv'; + + it('uses the data urls to download the file', () => { + downloader({ fileName, fileData }); + expect(document.createElement).toHaveBeenCalledWith('a'); + expect(a.download).toBe(fileName); + expect(a.href).toBe(`data:text/plain;base64,${fileData}`); + expect(a.click).toHaveBeenCalledTimes(1); + }); + }); + + describe('when an endpoint is provided', () => { + const url = 'https://gitlab.com/test.csv'; + const fileName = 'test.csv'; + + it('uses the endpoint to download the file', () => { + downloader({ fileName, url }); + expect(document.createElement).toHaveBeenCalledWith('a'); + expect(a.download).toBe(fileName); + expect(a.href).toBe(url); + expect(a.click).toHaveBeenCalledTimes(1); + }); + }); +}); |