1
0
mirror of https://github.com/SomboChea/ui synced 2024-11-28 00:44:30 +07:00

refactor(#204): copyToClipBoard.test, moved test of utility to it's own test

This commit is contained in:
Brian Pedersen 2019-10-16 02:00:05 -06:00 committed by Priscila Oliveira
parent dd532955de
commit 16b12ddc76
2 changed files with 58 additions and 20 deletions

View File

@ -1,38 +1,27 @@
import React from 'react'; import React from 'react';
import { mount, ReactWrapper } from 'enzyme'; import { mount, ReactWrapper } from 'enzyme';
import { copyToClipBoardUtility } from '../../utils/cli-utils';
import CopyToClipBoard from './CopyToClipBoard'; import CopyToClipBoard from './CopyToClipBoard';
import { CopyIcon } from './styles'; import { CopyIcon } from './styles';
jest.mock('../../utils/cli-utils');
describe('<CopyToClipBoard /> component', () => { describe('<CopyToClipBoard /> component', () => {
let wrapper: ReactWrapper; let wrapper: ReactWrapper;
const copyText = 'copy text';
beforeEach(() => { beforeEach(() => {
wrapper = mount(<CopyToClipBoard text={'copy text'} />); wrapper = mount(<CopyToClipBoard text={copyText} />);
}); });
test('render the component', () => { test('render the component', () => {
expect(wrapper.html()).toMatchSnapshot(); expect(wrapper.html()).toMatchSnapshot();
}); });
test('should call the DOM APIs for copy to clipboard utility', () => { test('should call the copyToClipBoardUtility for copy to clipboard utility', () => {
const event = { wrapper.find(CopyIcon).simulate('click');
preventDefault: jest.fn(), expect(copyToClipBoardUtility).toHaveBeenCalledWith(copyText);
};
// @ts-ignore: Property 'getSelection' does not exist on type 'Global'.
global.getSelection = jest.fn(() => ({
removeAllRanges: () => {},
addRange: () => {},
}));
// @ts-ignore: Property 'document/getSelection' does not exist on type 'Global'.
const { document, getSelection } = global;
wrapper.find(CopyIcon).simulate('click', event);
expect(event.preventDefault).toHaveBeenCalled();
expect(document.createRange).toHaveBeenCalled();
expect(getSelection).toHaveBeenCalled();
expect(document.execCommand).toHaveBeenCalledWith('copy');
}); });
}); });

View File

@ -0,0 +1,49 @@
import { SyntheticEvent } from 'react';
import { copyToClipBoardUtility } from './cli-utils';
describe('copyToClipBoardUtility', () => {
let originalGetSelection;
const mockGetSelectionResult = {
removeAllRanges: jest.fn(),
addRange: jest.fn(),
};
beforeEach(() => {
originalGetSelection = window.getSelection;
window.getSelection = jest.fn().mockReturnValue(mockGetSelectionResult);
});
afterEach(() => {
window.getSelection = originalGetSelection;
jest.restoreAllMocks();
});
test('should call the DOM APIs', () => {
// Given
const testEvent: { preventDefault: Function } = {
preventDefault: jest.fn(),
};
const testCopy = 'copy text';
const spys = {
createElement: jest.spyOn(document, 'createElement'),
execCommand: jest.spyOn(document, 'execCommand'),
appendChild: jest.spyOn(document.body, 'appendChild'),
removeChild: jest.spyOn(document.body, 'removeChild'),
};
const expectedDiv = document.createElement('div');
expectedDiv.innerText = testCopy;
// When
const copyFunc = copyToClipBoardUtility(testCopy);
copyFunc(testEvent as SyntheticEvent<HTMLElement>);
// Then
expect(mockGetSelectionResult.removeAllRanges).toHaveBeenCalledWith();
expect(mockGetSelectionResult.addRange).toHaveBeenCalled();
expect(spys.createElement).toHaveBeenCalledWith('div');
expect(spys.appendChild).toHaveBeenCalledWith(expectedDiv);
expect(spys.execCommand).toHaveBeenCalledWith('copy');
expect(spys.removeChild).toHaveBeenCalledWith(expectedDiv);
});
});