12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import useDataSaver from '../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)
- );
- });
- });
|