Skip to content
Snippets Groups Projects
Commit 2ebcd850 authored by Christopher Willis-Ford's avatar Christopher Willis-Ford
Browse files

add unit tests for About button on menu bar

parent 9d307f0e
No related branches found
No related tags found
No related merge requests found
...@@ -141,6 +141,19 @@ MenuItemTooltip.propTypes = { ...@@ -141,6 +141,19 @@ MenuItemTooltip.propTypes = {
isRtl: PropTypes.bool isRtl: PropTypes.bool
}; };
const AboutButton = props => (
<Button
className={classNames(styles.menuBarItem, styles.hoverable)}
iconClassName={styles.aboutIcon}
iconSrc={aboutIcon}
onClick={props.onClick}
/>
);
AboutButton.propTypes = {
onClick: PropTypes.func.isRequired
};
class MenuBar extends React.Component { class MenuBar extends React.Component {
constructor (props) { constructor (props) {
super(props); super(props);
...@@ -311,17 +324,8 @@ class MenuBar extends React.Component { ...@@ -311,17 +324,8 @@ class MenuBar extends React.Component {
{remixMessage} {remixMessage}
</Button> </Button>
); );
const handleClickAbout = this.props.onClickAbout;
// Show the About button only if we have a handler for it (like in the desktop app) // Show the About button only if we have a handler for it (like in the desktop app)
const aboutButton = handleClickAbout ? ( const aboutButton = this.props.onClickAbout ? <AboutButton onClick={this.props.onClickAbout} /> : null;
<div className={classNames(styles.menuBarItem, styles.hoverable)}>
<img
className={styles.aboutIcon}
onClick={handleClickAbout}
src={aboutIcon}
/>
</div>
) : null;
return ( return (
<Box <Box
className={classNames( className={classNames(
......
import React from 'react';
import {mountWithIntl} from '../../helpers/intl-helpers';
import MenuBar from '../../../src/components/menu-bar/menu-bar';
import {menuInitialState} from '../../../src/reducers/menus';
import {LoadingState} from '../../../src/reducers/project-state';
import configureStore from 'redux-mock-store';
import {Provider} from 'react-redux';
import VM from 'scratch-vm';
describe('MenuBar Component', () => {
const store = configureStore()({
locales: {
isRtl: false,
locale: 'en-US'
},
scratchGui: {
menus: menuInitialState,
projectState: {
loadingState: LoadingState.NOT_LOADED
},
vm: new VM()
}
});
const getComponent = function (props = {}) {
return <Provider store={store}><MenuBar {...props} /></Provider>;
};
test('menu bar with no About handler has no About button', () => {
const menuBar = mountWithIntl(getComponent());
const button = menuBar.find('AboutButton');
expect(button.exists()).toBe(false);
});
test('menu bar with an About handler has an About button', () => {
const onClickAbout = jest.fn();
const menuBar = mountWithIntl(getComponent({onClickAbout}));
const button = menuBar.find('AboutButton');
expect(button.exists()).toBe(true);
});
test('clicking on About button calls the handler', () => {
const onClickAbout = jest.fn();
const menuBar = mountWithIntl(getComponent({onClickAbout}));
const button = menuBar.find('AboutButton');
expect(onClickAbout).toHaveBeenCalledTimes(0);
button.simulate('click');
expect(onClickAbout).toHaveBeenCalledTimes(1);
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment