diff --git a/__tests__/components/TowerLogo.test.jsx b/__tests__/components/TowerLogo.test.jsx new file mode 100644 index 0000000000..5a6561ff42 --- /dev/null +++ b/__tests__/components/TowerLogo.test.jsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { MemoryRouter } from 'react-router-dom'; +import { mount } from 'enzyme'; +import TowerLogo from '../../src/components/TowerLogo'; + +let logoWrapper; +let towerLogoElem; +let brandElem; + +const findChildren = () => { + towerLogoElem = logoWrapper.find('TowerLogo'); + brandElem = logoWrapper.find('Brand'); +}; + +describe('', () => { + test('initially renders without crashing', () => { + logoWrapper = mount(); + findChildren(); + expect(logoWrapper.length).toBe(1); + expect(towerLogoElem.length).toBe(1); + expect(brandElem.length).toBe(1); + }); + + test('adds navigation to route history on click', () => { + const onLogoClick = jest.fn(); + logoWrapper = mount(); + findChildren(); + expect(towerLogoElem.props().history.length).toBe(1); + logoWrapper.simulate('click'); + expect(towerLogoElem.props().history.length).toBe(2); + }); + + test('gracefully handles not being passed click handler', () => { + logoWrapper = mount(); + findChildren(); + expect(towerLogoElem.props().history.length).toBe(1); + logoWrapper.simulate('click'); + expect(towerLogoElem.props().history.length).toBe(1); + }); + + test('handles mouse over and out state.hover changes', () => { + const onLogoClick = jest.fn(); + logoWrapper = mount(); + findChildren(); + findChildren(); + expect(brandElem.props().src).toBe('tower-logo-header.svg'); + brandElem.props().onMouseOver(); + expect(towerLogoElem.state().hover).toBe(true); + logoWrapper.update(); + findChildren(); + expect(brandElem.props().src).toBe('tower-logo-header-hover.svg'); + brandElem.props().onMouseOut(); + expect(towerLogoElem.state().hover).toBe(false); + logoWrapper.update(); + findChildren(); + expect(brandElem.props().src).toBe('tower-logo-header.svg'); + }); +}); diff --git a/src/components/TowerLogo/TowerLogo.jsx b/src/components/TowerLogo/TowerLogo.jsx index 242e77864c..113e405453 100644 --- a/src/components/TowerLogo/TowerLogo.jsx +++ b/src/components/TowerLogo/TowerLogo.jsx @@ -13,13 +13,13 @@ class TowerLogo extends Component { } onClick = () => { - if (!this.props.onClick) return; + const { history, onClick: handleClick } = this.props; - const { history } = this.props; + if (!handleClick) return; history.push('/'); - this.props.onClick(); + handleClick(); }; onHover = () => { @@ -30,10 +30,11 @@ class TowerLogo extends Component { render () { const { hover } = this.state; + const { onClick: handleClick } = this.props; let src = TowerLogoHeader; - if (hover && this.props.onClick) { + if (hover && handleClick) { src = TowerLogoHeaderHover; }