UNPKG

@shopgate/pwa-common

Version:

Common library for the Shopgate Connect PWA.

4 lines 2.48 kB
import React from'react';import{shallow,mount}from'enzyme';import Select from"./index";import SelectItem from"./components/Item";describe('<Select />',function(){jest.useFakeTimers();it('opens and closes the item list',function(){var wrapper=shallow(React.createElement(Select,null));var previousOpenState=wrapper.state('isOpen');wrapper.instance().toggleOpenState();expect(wrapper.state('isOpen')).toBe(!previousOpenState);previousOpenState=wrapper.state('isOpen');wrapper.instance().toggleOpenState();expect(wrapper.state('isOpen')).toBe(!previousOpenState);});it('renders without items',function(){var wrapper=mount(React.createElement(Select,null));wrapper.instance().toggleOpenState();expect(wrapper).toMatchSnapshot();expect(wrapper.find(SelectItem).length).toBe(0);});it('renders with implicit items (closed)',function(){var items=['a','b','c','d','e','f'];var wrapper=mount(React.createElement(Select,{items:items}));expect(wrapper).toMatchSnapshot();expect(wrapper.find(SelectItem).length).toBe(0);});it('renders with implicit items (opened)',function(){var items=['a','b','c','d','e','f'];var wrapper=mount(React.createElement(Select,{items:items}));wrapper.instance().toggleOpenState();wrapper.update();expect(wrapper).toMatchSnapshot();expect(wrapper.find(SelectItem).length).toBe(items.length);});it('accepts implicit and explicit items',function(){var items=['a','b',{value:'c'},'d',{value:'e',label:'E'},'f'];var wrapper=mount(React.createElement(Select,{items:items}));wrapper.instance().toggleOpenState();wrapper.update();expect(wrapper).toMatchSnapshot();expect(wrapper.find(SelectItem).length).toBe(items.length);var i=0;wrapper.find(SelectItem).forEach(function(item){var expectedLabel=items[i];if(expectedLabel.label){expectedLabel=expectedLabel.label;}if(expectedLabel.value){expectedLabel=expectedLabel.value;}expect(item.prop('label')).toBe(expectedLabel);i+=1;});});it('triggers callback on change',function(){var items=['a','b','c','d','e','f'];var selectionIndex=Math.floor(items.length/2);/** * Mocked callback for the onSelect event * @param {string} value Mocked value */var callback=function callback(value){expect(value).toBe(items[selectionIndex]);};var wrapper=mount(React.createElement(Select,{items:items,onChange:callback}));wrapper.instance().toggleOpenState();wrapper.update();expect(wrapper).toMatchSnapshot();var node=wrapper.find(SelectItem).at(selectionIndex);node.prop('onSelect')(node.prop('value'),node.prop('label'));});});