76 lines
2.1 KiB
TypeScript
76 lines
2.1 KiB
TypeScript
import useDataSaver from 'lib/hooks/useDataSaver';
|
|
|
|
describe('useDataSaver hook', () => {
|
|
const content = {
|
|
title: 'title',
|
|
};
|
|
describe('Save as file', () => {
|
|
beforeAll(() => {
|
|
jest.useFakeTimers('modern');
|
|
jest.setSystemTime(new Date('Wed Mar 24 2021 03:19:56 GMT-0700'));
|
|
});
|
|
|
|
afterAll(() => jest.useRealTimers());
|
|
|
|
it('downloads json file', () => {
|
|
const link: HTMLAnchorElement = document.createElement('a');
|
|
link.click = jest.fn();
|
|
|
|
const mockCreate = jest
|
|
.spyOn(document, 'createElement')
|
|
.mockImplementation(() => link);
|
|
|
|
const { saveFile } = useDataSaver('message', content);
|
|
saveFile();
|
|
|
|
expect(mockCreate).toHaveBeenCalledTimes(1);
|
|
expect(link.download).toEqual('message_1616581196000.json');
|
|
expect(link.href).toEqual(
|
|
`data:text/json;charset=utf-8,${encodeURIComponent(
|
|
JSON.stringify(content)
|
|
)}`
|
|
);
|
|
expect(link.click).toHaveBeenCalledTimes(1);
|
|
|
|
mockCreate.mockRestore();
|
|
});
|
|
|
|
it('downloads txt file', () => {
|
|
const link: HTMLAnchorElement = document.createElement('a');
|
|
link.click = jest.fn();
|
|
|
|
const mockCreate = jest
|
|
.spyOn(document, 'createElement')
|
|
.mockImplementation(() => link);
|
|
|
|
const { saveFile } = useDataSaver('message', 'content');
|
|
saveFile();
|
|
|
|
expect(mockCreate).toHaveBeenCalledTimes(1);
|
|
expect(link.download).toEqual('message_1616581196000.txt');
|
|
expect(link.href).toEqual(
|
|
`data:text/json;charset=utf-8,${encodeURIComponent(
|
|
JSON.stringify('content')
|
|
)}`
|
|
);
|
|
expect(link.click).toHaveBeenCalledTimes(1);
|
|
|
|
mockCreate.mockRestore();
|
|
});
|
|
});
|
|
|
|
it('copies the data to the clipboard', () => {
|
|
Object.assign(navigator, {
|
|
clipboard: {
|
|
writeText: jest.fn(),
|
|
},
|
|
});
|
|
jest.spyOn(navigator.clipboard, 'writeText');
|
|
const { copyToClipboard } = useDataSaver('topic', content);
|
|
copyToClipboard();
|
|
|
|
expect(navigator.clipboard.writeText).toHaveBeenCalledWith(
|
|
JSON.stringify(content)
|
|
);
|
|
});
|
|
});
|