From ff28169c74a79ff5f1bad2f1d361aca0da9166ed Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Thu, 23 Aug 2018 16:26:42 +0200 Subject: [PATCH] Created ImportServersBtn test --- src/servers/helpers/ImportServersBtn.js | 4 +- test/servers/helpers/ImportServersBtn.test.js | 59 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 test/servers/helpers/ImportServersBtn.test.js diff --git a/src/servers/helpers/ImportServersBtn.js b/src/servers/helpers/ImportServersBtn.js index 6187f03d..7d6e277c 100644 --- a/src/servers/helpers/ImportServersBtn.js +++ b/src/servers/helpers/ImportServersBtn.js @@ -9,17 +9,19 @@ import PropTypes from 'prop-types'; const defaultProps = { serversImporter, + onImport: () => {}, }; const propTypes = { onImport: PropTypes.func, serversImporter: serversImporterType, createServers: PropTypes.func, + fileRef: PropTypes.oneOfType([PropTypes.object, PropTypes.node]), }; export class ImportServersBtn extends React.Component { constructor(props) { super(props); - this.fileRef = React.createRef(); + this.fileRef = props.fileRef || React.createRef(); } render() { diff --git a/test/servers/helpers/ImportServersBtn.test.js b/test/servers/helpers/ImportServersBtn.test.js new file mode 100644 index 00000000..e57e8548 --- /dev/null +++ b/test/servers/helpers/ImportServersBtn.test.js @@ -0,0 +1,59 @@ +import React from 'react'; +import { ImportServersBtn } from '../../../src/servers/helpers/ImportServersBtn'; +import sinon from 'sinon'; +import { shallow } from 'enzyme'; +import { UncontrolledTooltip } from 'reactstrap'; + +describe('', () => { + let wrapper; + const onImportMock = sinon.fake(); + const createServersMock = sinon.fake(); + const serversImporterMock = { + importServersFromFile: sinon.fake.returns(Promise.resolve([])), + }; + const fileRef = { + current: { click: sinon.fake() } + }; + + beforeEach(() => { + onImportMock.resetHistory(); + createServersMock.resetHistory(); + serversImporterMock.importServersFromFile.resetHistory(); + fileRef.current.click.resetHistory(); + + wrapper = shallow( + + ); + }); + afterEach(() => wrapper.unmount()); + + it('renders a button, a tooltip and a file input', () => { + expect(wrapper.find('#importBtn')).toHaveLength(1); + expect(wrapper.find(UncontrolledTooltip)).toHaveLength(1); + expect(wrapper.find('.create-server__csv-select')).toHaveLength(1); + }); + + it('triggers click on file ref when button is clicked', () => { + const btn = wrapper.find('#importBtn'); + btn.simulate('click'); + + expect(fileRef.current.click.callCount).toEqual(1); + }); + + it('imports servers when file input changes', done => { + const file = wrapper.find('.create-server__csv-select'); + file.simulate('change', { target: { files: [''] } }); + + setImmediate(() => { + expect(serversImporterMock.importServersFromFile.callCount).toEqual(1); + expect(createServersMock.callCount).toEqual(1); + expect(onImportMock.callCount).toEqual(1); + done(); + }); + }); +});