diff --git a/src/servers/DeleteServerModal.js b/src/servers/DeleteServerModal.js index 419e6a33..0d69bd52 100644 --- a/src/servers/DeleteServerModal.js +++ b/src/servers/DeleteServerModal.js @@ -7,6 +7,12 @@ import { compose } from 'redux'; import { deleteServer } from './reducers/server'; import { serverType } from './prop-types'; +const propTypes = { + toggle: PropTypes.func.isRequired, + isOpen: PropTypes.bool.isRequired, + server: serverType, +}; + export const DeleteServerModal = ({ server, toggle, isOpen, deleteServer, history }) => { const closeModal = () => { deleteServer(server); @@ -32,11 +38,7 @@ export const DeleteServerModal = ({ server, toggle, isOpen, deleteServer, histor ); }; -DeleteServerModal.propTypes = { - toggle: PropTypes.func.isRequired, - isOpen: PropTypes.bool.isRequired, - server: serverType, -}; +DeleteServerModal.propTypes = propTypes; export default compose( withRouter, diff --git a/test/servers/DeleteServerModal.test.js b/test/servers/DeleteServerModal.test.js new file mode 100644 index 00000000..23866f64 --- /dev/null +++ b/test/servers/DeleteServerModal.test.js @@ -0,0 +1,62 @@ +import React from 'react'; +import { shallow } from 'enzyme'; +import { DeleteServerModal } from '../../src/servers/DeleteServerModal'; +import sinon from 'sinon'; +import { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap'; + +describe('', () => { + let wrapper; + const deleteServerMock = sinon.fake(); + const historyMock = { push: sinon.fake() }; + const toggleMock = sinon.fake(); + const serverName = 'the_server_name'; + + beforeEach(() => { + toggleMock.resetHistory(); + deleteServerMock.resetHistory(); + historyMock.push.resetHistory(); + + wrapper = shallow( + + ); + }); + afterEach(() => wrapper.unmount()); + + it('renders a modal window', () => { + expect(wrapper.find(Modal)).toHaveLength(1); + expect(wrapper.find(ModalHeader)).toHaveLength(1); + expect(wrapper.find(ModalBody)).toHaveLength(1); + expect(wrapper.find(ModalFooter)).toHaveLength(1); + }); + + it('displays the name of the server as part of the content', () => { + const modalBody = wrapper.find(ModalBody); + expect(modalBody.find('p').first().text()).toEqual( + `Are you sure you want to delete server ${serverName}?` + ); + }); + + it('toggles when clicking cancel button', () => { + const cancelBtn = wrapper.find('button').first(); + cancelBtn.simulate('click'); + + expect(toggleMock.callCount).toEqual(1); + expect(deleteServerMock.callCount).toEqual(0); + expect(historyMock.push.callCount).toEqual(0); + }); + + it('deletes server when clicking accept button', () => { + const acceptBtn = wrapper.find('button').last(); + acceptBtn.simulate('click'); + + expect(toggleMock.callCount).toEqual(1); + expect(deleteServerMock.callCount).toEqual(1); + expect(historyMock.push.callCount).toEqual(1); + }); +});