useDataSaver.spec.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import useDataSaver from '../useDataSaver';
  2. describe('useDataSaver hook', () => {
  3. const content = {
  4. title: 'title',
  5. };
  6. describe('Save as file', () => {
  7. beforeAll(() => {
  8. jest.useFakeTimers('modern');
  9. jest.setSystemTime(new Date('Wed Mar 24 2021 03:19:56 GMT-0700'));
  10. });
  11. afterAll(() => jest.useRealTimers());
  12. it('downloads json file', () => {
  13. const link: HTMLAnchorElement = document.createElement('a');
  14. link.click = jest.fn();
  15. const mockCreate = jest
  16. .spyOn(document, 'createElement')
  17. .mockImplementation(() => link);
  18. const { saveFile } = useDataSaver('message', content);
  19. saveFile();
  20. expect(mockCreate).toHaveBeenCalledTimes(1);
  21. expect(link.download).toEqual('message_1616581196000.json');
  22. expect(link.href).toEqual(
  23. `data:text/json;charset=utf-8,${encodeURIComponent(
  24. JSON.stringify(content)
  25. )}`
  26. );
  27. expect(link.click).toHaveBeenCalledTimes(1);
  28. mockCreate.mockRestore();
  29. });
  30. it('downloads txt file', () => {
  31. const link: HTMLAnchorElement = document.createElement('a');
  32. link.click = jest.fn();
  33. const mockCreate = jest
  34. .spyOn(document, 'createElement')
  35. .mockImplementation(() => link);
  36. const { saveFile } = useDataSaver('message', 'content');
  37. saveFile();
  38. expect(mockCreate).toHaveBeenCalledTimes(1);
  39. expect(link.download).toEqual('message_1616581196000.txt');
  40. expect(link.href).toEqual(
  41. `data:text/json;charset=utf-8,${encodeURIComponent(
  42. JSON.stringify('content')
  43. )}`
  44. );
  45. expect(link.click).toHaveBeenCalledTimes(1);
  46. mockCreate.mockRestore();
  47. });
  48. });
  49. it('copies the data to the clipboard', () => {
  50. Object.assign(navigator, {
  51. clipboard: {
  52. writeText: jest.fn(),
  53. },
  54. });
  55. jest.spyOn(navigator.clipboard, 'writeText');
  56. const { copyToClipboard } = useDataSaver('topic', content);
  57. copyToClipboard();
  58. expect(navigator.clipboard.writeText).toHaveBeenCalledWith(
  59. JSON.stringify(content)
  60. );
  61. });
  62. });