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();
+ });
+ });
+});