UNPKG

rsuite

Version:

A suite of react components

255 lines (210 loc) 7.46 kB
import React from 'react'; import ReactTestUtils from 'react-dom/test-utils'; import { findDOMNode } from 'react-dom'; import { globalKey, getDOMNode, getInstance } from '@test/testUtils'; import Dropdown from '../MultiCascader'; import Button from '../../Button'; const namespace = `${globalKey}-picker`; const toggleClassName = `.${namespace}-toggle-placeholder`; const activeClassName = '.rs-dropdown-menu-item-active'; const items = [ { value: 'abc', label: 'abc' }, { value: 'abcd', label: 'abcd' }, { value: 'abcde', label: 'abcde', children: [ { value: 'abcde-1', label: 'abcde-1' }, { value: 'abcde-2', label: 'abcde-2' } ] } ]; describe('MultiCascader', () => { it('Should output a dropdown', () => { const instance = getDOMNode(<Dropdown>Title</Dropdown>); assert.ok(instance.className.match(/\bpicker-cascader\b/)); }); it('Should render number', () => { const instance = getDOMNode( <Dropdown data={items} value={['abcde-1', 'abcde-2']} classPrefix="rs-picker" /> ); assert.equal(instance.querySelector('.rs-picker-value-count').innerText, '1'); }); it('Should not render number', () => { const instance = getDOMNode( <Dropdown data={items} value={['abcde-1', 'abcde-2']} countable={false} classPrefix="rs-picker" /> ); assert.ok(!instance.querySelector('.rs-picker-value-count')); }); it('Should render the parent node by children value', () => { const instance = getDOMNode( <Dropdown data={items} value={['abcde-1', 'abcde-2']} classPrefix="rs-picker" /> ); assert.equal(instance.querySelector('.rs-picker-value-list').innerText, 'abcde (All)'); }); it('Should render the parent node by children defaultValue', () => { const instance = getDOMNode( <Dropdown data={items} defaultValue={['abcde-1', 'abcde-2']} classPrefix="rs-picker" /> ); assert.equal(instance.querySelector('.rs-picker-value-list').innerText, 'abcde (All)'); }); it('Should render the parent node by children value', () => { const instance = getDOMNode( <Dropdown data={items} value={['abcde-1']} classPrefix="rs-picker" uncheckableItemValues={['abcde-2']} /> ); assert.equal(instance.querySelector('.rs-picker-value-list').innerText, 'abcde (All)'); }); it('Should render the children nodes', () => { const instance = getDOMNode( <Dropdown data={items} value={['abcde-1', 'abcde-2']} classPrefix="rs-picker" uncheckableItemValues={['abcde']} /> ); assert.equal(instance.querySelector('.rs-picker-value-list').innerText, 'abcde-1,abcde-2'); }); it('Should be disabled', () => { const instance = getDOMNode(<Dropdown disabled />); assert.ok(instance.className.match(/\bdisabled\b/)); }); it('Should output a placeholder', () => { const placeholder = 'foobar'; const instance = getDOMNode(<Dropdown placeholder={placeholder} />); assert.equal(instance.querySelector(toggleClassName).innerText, placeholder); }); it('Should output a button', () => { const instance = getInstance(<Dropdown toggleComponentClass="button" />); assert.ok(ReactTestUtils.findRenderedDOMComponentWithTag(instance, 'button')); }); it('Should be block', () => { const instance = getDOMNode(<Dropdown block />); assert.ok(instance.className.match(/\bblock\b/)); }); it('Should output a placeholder by renderValue()', () => { const placeholder = 'foobar'; const instance = getDOMNode( <Dropdown renderValue={() => placeholder} data={items} value={['abc']} /> ); assert.equal(instance.querySelector('.rs-picker-toggle-value').innerText, placeholder); const instance2 = getDOMNode(<Dropdown renderValue={() => placeholder} />); assert.equal(instance2.querySelector(toggleClassName).innerText, 'Select'); }); it('Should be active by value', () => { const value = ['abcd']; const instance = getInstance(<Dropdown defaultOpen data={items} value={value} />); const menu = findDOMNode(instance.menuContainerRef.current); assert.equal(menu.querySelector('.rs-checkbox-checked').innerText, value); }); it('Should be active by defaultValue', () => { const value = ['abcd']; const instance = getInstance(<Dropdown defaultOpen data={items} defaultValue={value} />); const menu = findDOMNode(instance.menuContainerRef.current); assert.equal(menu.querySelector('.rs-checkbox-checked').innerText, value); }); it('Should call onSelect callback ', done => { const doneOp = () => { done(); }; const instance = getInstance(<Dropdown data={items} defaultOpen onSelect={doneOp} />); const menu = findDOMNode(instance.menuContainerRef.current); ReactTestUtils.Simulate.click(menu.querySelector('.rs-checkbox')); }); it('Should call onChange callback ', done => { const doneOp = value => { if (value[0] === 'abc') { done(); } }; const instance = getInstance(<Dropdown data={items} defaultOpen onChange={doneOp} />); const menu = findDOMNode(instance.menuContainerRef.current).querySelector( '.rs-checkbox-wrapper' ); ReactTestUtils.Simulate.click(menu); }); it('Should call onClean callback', done => { const doneOp = () => { done(); }; const instance = getDOMNode(<Dropdown data={items} defaultValue={['abc']} onClean={doneOp} />); ReactTestUtils.Simulate.click(instance.querySelector('.rs-picker-toggle-clean')); }); it('Should call `onOpen` callback', done => { const doneOp = key => { done(); }; let picker = null; getDOMNode( <Dropdown ref={ref => { picker = ref; }} onOpen={doneOp} data={items} /> ); picker.open(); }); it('Should call `onClose` callback', done => { const doneOp = key => { done(); }; let picker = null; getDOMNode( <Dropdown defaultOpen ref={ref => { picker = ref; }} onClose={doneOp} data={items} /> ); picker.close(); }); it('Should clean selected default value', () => { const instance = getDOMNode(<Dropdown defaultOpen data={items} defaultValue={['abcde-1']} />); ReactTestUtils.Simulate.click(instance.querySelector('.rs-picker-toggle-clean')); expect(instance.querySelector('.rs-picker-toggle-placeholder').innerText).to.equal('Select'); }); it('Should have a custom className', () => { const instance = getDOMNode(<Dropdown className="custom" />); assert.ok(instance.className.match(/\bcustom\b/)); }); it('Should have a custom style', () => { const fontSize = '12px'; const instance = getDOMNode(<Dropdown style={{ fontSize }} />); assert.equal(instance.style.fontSize, fontSize); }); it('Should have a custom className prefix', () => { const instance = getDOMNode(<Dropdown classPrefix="custom-prefix" />); assert.ok(instance.className.match(/\bcustom-prefix\b/)); }); it('Should render a button by toggleComponentClass={Button}', () => { const instance = getInstance(<Dropdown open data={items} toggleComponentClass={Button} />); ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'rs-btn'); }); });