UNPKG

rsuite

Version:

A suite of react components

173 lines (153 loc) 5.25 kB
import React from 'react'; import ReactTestUtils from 'react-dom/test-utils'; import { findDOMNode } from 'react-dom'; import { getDOMNode, getInstance } from '@test/testUtils'; import DropdownMenu from '../DropdownMenu'; import Dropdown from '../Cascader'; const items = [ { value: 'abc', label: 'abc' }, { value: 'abcd', label: 'abcd' }, { value: 'abcde', label: 'abcde', children: [ { value: 'vv-abc', label: 'vv-abc' }, { value: 'vv-abcd', label: 'vv-abcd' } ] } ]; describe('Cascader - DropdownMenu', () => { it('Should output a `cascader-menu-items` ', () => { const instance = getDOMNode(<DropdownMenu classPrefix="rs-picker-cascader-menu" />); assert.ok(instance.className.match(/\bcascader-menu-items\b/)); }); it('Should output 3 `menu-item` ', () => { const instance = getInstance(<Dropdown defaultOpen data={items} />); const menuContainer = findDOMNode(instance.menuContainerRef.current); assert.equal(menuContainer.querySelectorAll('li').length, 3); }); it('Should have a menuWidth', () => { const instance = getInstance(<Dropdown defaultOpen data={items} menuWidth={100} />); const menuContainer = findDOMNode(instance.menuContainerRef.current).querySelector( '.rs-picker-cascader-menu-column' ); assert.ok(menuContainer.style.width, '100px'); }); it('Should output 3 `menu-item` ', () => { const data = [ { myValue: 'abc', myLabel: 'abc' }, { myValue: 'abcd', myLabel: 'abcd' }, { myLabel: 'vvv', items: [ { myValue: 'vv-abc', myLabel: 'vv-abc' }, { myValue: 'vv-abcd', myLabel: 'vv-abcd' } ] } ]; const instance = getInstance( <Dropdown defaultOpen labelKey="myLabel" valueKey="myValue" childrenKey="items" data={data} /> ); const menuContainer = findDOMNode(instance.menuContainerRef.current); assert.equal(menuContainer.querySelectorAll('li').length, 3); }); it('Should call onSelect callback ', done => { const doneOp = node => { if (node.value === 'abcd') { done(); } }; const instance = getInstance(<Dropdown defaultOpen data={items} onSelect={doneOp} />); const menuContainer = findDOMNode(instance.menuContainerRef.current); ReactTestUtils.Simulate.click( menuContainer.querySelectorAll('.rs-picker-cascader-menu-item')[1] ); }); it('Should call onSelect callback 2 count', () => { const onSelectSpy = sinon.spy(); const instance = getInstance( <Dropdown defaultOpen data={items} disabledItemValues={['abcd']} onSelect={onSelectSpy} /> ); const menuContainer = findDOMNode(instance.menuContainerRef.current); setTimeout(() => { ReactTestUtils.Simulate.click( menuContainer.querySelectorAll('.rs-picker-cascader-menu-item')[0] ); ReactTestUtils.Simulate.click( menuContainer.querySelectorAll('.rs-picker-cascader-menu-item')[2] ); assert.equal(onSelectSpy.callCount, 2); }, 1); }); it('Should not call onSelect callback on disabled item', () => { const onSelectSpy = sinon.spy(); const instance = getInstance( <Dropdown defaultOpen data={items} disabledItemValues={['abcd']} onSelect={onSelectSpy} /> ); const menuContainer = findDOMNode(instance.menuContainerRef.current); ReactTestUtils.Simulate.click( menuContainer.querySelectorAll('.rs-picker-cascader-menu-item')[1] ); assert.ok(onSelectSpy.notCalled); }); it('Should call renderMenuItem callback ', () => { const instance = getInstance( <Dropdown defaultOpen data={items} renderMenuItem={item => <i>{item}</i>} /> ); const menuContainer = findDOMNode(instance.menuContainerRef.current); assert.equal(menuContainer.querySelectorAll(`${'.rs-picker-cascader-menu-item'} i`).length, 3); }); it('Should be disabled item ', () => { const instance = getInstance( <Dropdown defaultOpen data={items} disabledItemValues={['abcd', 'abcde']} /> ); const menuContainer = findDOMNode(instance.menuContainerRef.current); assert.ok( menuContainer .querySelectorAll('.rs-picker-cascader-menu-item')[1] .className.match(/\bdisabled\b/) ); assert.ok( menuContainer .querySelectorAll('.rs-picker-cascader-menu-item')[2] .className.match(/\bdisabled\b/) ); }); it('Should have a custom className', () => { const instance = getDOMNode(<DropdownMenu classPrefix="cascader" className="custom" />); assert.ok(findDOMNode(instance).className.match(/\bcustom\b/)); }); it('Should have a custom style', () => { const fontSize = '12px'; const instance = getDOMNode(<DropdownMenu classPrefix="cascader" style={{ fontSize }} />); assert.equal(findDOMNode(instance).style.fontSize, fontSize); }); it('Should have a custom className prefix', () => { const instance = getDOMNode(<DropdownMenu classPrefix="custom-prefix" />); assert.ok(instance.className.match(/\bcustom-prefix\b/)); }); });