Spaces:
Runtime error
Runtime error
| import React from 'react'; | |
| import {mountWithIntl, shallowWithIntl, componentWithIntl} from '../../helpers/intl-helpers.jsx'; | |
| import SpriteSelectorItemComponent from '../../../src/components/sprite-selector-item/sprite-selector-item'; | |
| import DeleteButton from '../../../src/components/delete-button/delete-button'; | |
| describe('SpriteSelectorItemComponent', () => { | |
| let className; | |
| let costumeURL; | |
| let name; | |
| let onClick; | |
| let onDeleteButtonClick; | |
| let selected; | |
| let number; | |
| let details; | |
| // Wrap this in a function so it gets test specific states and can be reused. | |
| const getComponent = function () { | |
| return ( | |
| <SpriteSelectorItemComponent | |
| className={className} | |
| costumeURL={costumeURL} | |
| details={details} | |
| name={name} | |
| number={number} | |
| selected={selected} | |
| onClick={onClick} | |
| onDeleteButtonClick={onDeleteButtonClick} | |
| /> | |
| ); | |
| }; | |
| beforeEach(() => { | |
| className = 'ponies'; | |
| costumeURL = 'https://scratch.mit.edu/foo/bar/pony'; | |
| name = 'Pony sprite'; | |
| onClick = jest.fn(); | |
| onDeleteButtonClick = jest.fn(); | |
| selected = true; | |
| // Reset to undefined since they are optional props | |
| number = undefined; // eslint-disable-line no-undefined | |
| details = undefined; // eslint-disable-line no-undefined | |
| }); | |
| test('matches snapshot when selected', () => { | |
| const component = componentWithIntl(getComponent()); | |
| expect(component.toJSON()).toMatchSnapshot(); | |
| }); | |
| test('matches snapshot when given a number and details to show', () => { | |
| number = 5; | |
| details = '480 x 360'; | |
| const component = componentWithIntl(getComponent()); | |
| expect(component.toJSON()).toMatchSnapshot(); | |
| }); | |
| test('does not have a close box when not selected', () => { | |
| selected = false; | |
| const wrapper = shallowWithIntl(getComponent()); | |
| expect(wrapper.find(DeleteButton).exists()).toBe(false); | |
| }); | |
| test('triggers callback when Box component is clicked', () => { | |
| // Use `mount` here because of the way ContextMenuTrigger consumes onClick | |
| const wrapper = mountWithIntl(getComponent()); | |
| wrapper.simulate('click'); | |
| expect(onClick).toHaveBeenCalled(); | |
| }); | |
| test('triggers callback when CloseButton component is clicked', () => { | |
| const wrapper = shallowWithIntl(getComponent()); | |
| wrapper.find(DeleteButton).simulate('click'); | |
| expect(onDeleteButtonClick).toHaveBeenCalled(); | |
| }); | |
| test('it has a context menu with delete menu item and callback', () => { | |
| const wrapper = mountWithIntl(getComponent()); | |
| const contextMenu = wrapper.find('ContextMenu'); | |
| expect(contextMenu.exists()).toBe(true); | |
| contextMenu.find('[children="delete"]').simulate('click'); | |
| expect(onDeleteButtonClick).toHaveBeenCalled(); | |
| }); | |
| }); | |