|
@@ -1,9 +1,12 @@
|
|
|
|
+import React, { useEffect } from 'react';
|
|
|
|
+import { render } from 'lib/testHelpers';
|
|
import useDataSaver from 'lib/hooks/useDataSaver';
|
|
import useDataSaver from 'lib/hooks/useDataSaver';
|
|
|
|
|
|
describe('useDataSaver hook', () => {
|
|
describe('useDataSaver hook', () => {
|
|
const content = {
|
|
const content = {
|
|
title: 'title',
|
|
title: 'title',
|
|
};
|
|
};
|
|
|
|
+
|
|
describe('Save as file', () => {
|
|
describe('Save as file', () => {
|
|
beforeAll(() => {
|
|
beforeAll(() => {
|
|
jest.useFakeTimers('modern');
|
|
jest.useFakeTimers('modern');
|
|
@@ -20,10 +23,14 @@ describe('useDataSaver hook', () => {
|
|
.spyOn(document, 'createElement')
|
|
.spyOn(document, 'createElement')
|
|
.mockImplementation(() => link);
|
|
.mockImplementation(() => link);
|
|
|
|
|
|
- const { saveFile } = useDataSaver('message', content);
|
|
|
|
- saveFile();
|
|
|
|
|
|
+ const HookWrapper: React.FC = () => {
|
|
|
|
+ const { saveFile } = useDataSaver('message', content);
|
|
|
|
+ useEffect(() => saveFile(), []);
|
|
|
|
+ return null;
|
|
|
|
+ };
|
|
|
|
|
|
- expect(mockCreate).toHaveBeenCalledTimes(1);
|
|
|
|
|
|
+ render(<HookWrapper />);
|
|
|
|
+ expect(mockCreate).toHaveBeenCalledTimes(2);
|
|
expect(link.download).toEqual('message_1616581196000.json');
|
|
expect(link.download).toEqual('message_1616581196000.json');
|
|
expect(link.href).toEqual(
|
|
expect(link.href).toEqual(
|
|
`data:text/json;charset=utf-8,${encodeURIComponent(
|
|
`data:text/json;charset=utf-8,${encodeURIComponent(
|
|
@@ -43,10 +50,14 @@ describe('useDataSaver hook', () => {
|
|
.spyOn(document, 'createElement')
|
|
.spyOn(document, 'createElement')
|
|
.mockImplementation(() => link);
|
|
.mockImplementation(() => link);
|
|
|
|
|
|
- const { saveFile } = useDataSaver('message', 'content');
|
|
|
|
- saveFile();
|
|
|
|
|
|
+ const HookWrapper: React.FC = () => {
|
|
|
|
+ const { saveFile } = useDataSaver('message', 'content');
|
|
|
|
+ useEffect(() => saveFile(), []);
|
|
|
|
+ return null;
|
|
|
|
+ };
|
|
|
|
|
|
- expect(mockCreate).toHaveBeenCalledTimes(1);
|
|
|
|
|
|
+ render(<HookWrapper />);
|
|
|
|
+ expect(mockCreate).toHaveBeenCalledTimes(2);
|
|
expect(link.download).toEqual('message_1616581196000.txt');
|
|
expect(link.download).toEqual('message_1616581196000.txt');
|
|
expect(link.href).toEqual(
|
|
expect(link.href).toEqual(
|
|
`data:text/json;charset=utf-8,${encodeURIComponent(
|
|
`data:text/json;charset=utf-8,${encodeURIComponent(
|
|
@@ -66,9 +77,14 @@ describe('useDataSaver hook', () => {
|
|
},
|
|
},
|
|
});
|
|
});
|
|
jest.spyOn(navigator.clipboard, 'writeText');
|
|
jest.spyOn(navigator.clipboard, 'writeText');
|
|
- const { copyToClipboard } = useDataSaver('topic', content);
|
|
|
|
- copyToClipboard();
|
|
|
|
|
|
|
|
|
|
+ const HookWrapper: React.FC = () => {
|
|
|
|
+ const { copyToClipboard } = useDataSaver('topic', content);
|
|
|
|
+ useEffect(() => copyToClipboard(), []);
|
|
|
|
+ return null;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ render(<HookWrapper />);
|
|
expect(navigator.clipboard.writeText).toHaveBeenCalledWith(
|
|
expect(navigator.clipboard.writeText).toHaveBeenCalledWith(
|
|
JSON.stringify(content)
|
|
JSON.stringify(content)
|
|
);
|
|
);
|