UNPKG

rsuite

Version:

A suite of react components

148 lines (129 loc) 4.66 kB
import React from 'react'; import ReactTestUtils from 'react-dom/test-utils'; import { getDOMNode } from '@test/testUtils'; import CheckboxGroup from '../CheckboxGroup'; import Checkbox from '../../Checkbox'; import { globalKey } from '../../utils/prefix'; describe('CheckboxGroup', () => { it('Should render a checkbox group', () => { const instance = getDOMNode( <CheckboxGroup> <Checkbox>Test1</Checkbox> <Checkbox>Test2</Checkbox> </CheckboxGroup> ); assert.equal(instance.querySelectorAll(`.${globalKey}checkbox`).length, 2); }); it('Should have a name in input', () => { const name = 'Test'; const instance = getDOMNode( <CheckboxGroup name={name}> <Checkbox>Test1</Checkbox> <Checkbox>Test2</Checkbox> </CheckboxGroup> ); assert.equal(instance.querySelectorAll('input[name="Test"]').length, 2); }); it('Should have `checkbox-inline` className in checkbox', () => { const instance = getDOMNode( <CheckboxGroup inline> <Checkbox>Test1</Checkbox> <Checkbox>Test2</Checkbox> </CheckboxGroup> ); assert.equal(instance.querySelectorAll(`.${globalKey}checkbox-inline`).length, 2); }); it('Should output a h1', () => { const instance = getDOMNode( <CheckboxGroup inline> <h1>Group</h1> <Checkbox>Test1</Checkbox> </CheckboxGroup> ); assert.ok(instance.querySelectorAll('.h1')); }); it('Should be checked when set value', () => { const instance = getDOMNode( <CheckboxGroup value={[2, 4, '1']}> <Checkbox value={1}>Test1</Checkbox> <Checkbox value={2}>Test2</Checkbox> <Checkbox value={3}>Test2</Checkbox> <Checkbox value={4}>Test2</Checkbox> </CheckboxGroup> ); const checkboxs = instance.querySelectorAll(`.${globalKey}checkbox`); const checked = /\bcheckbox-checked\b/; assert.ok(!checkboxs[0].className.match(checked)); assert.ok(!checkboxs[2].className.match(checked)); assert.ok(checkboxs[1].className.match(checked)); assert.ok(checkboxs[3].className.match(checked)); }); it('Should be checked when set defaultValue', () => { const instance = getDOMNode( <CheckboxGroup defaultValue={[2, 4, '1']}> <Checkbox value={1}>Test1</Checkbox> <Checkbox value={2}>Test2</Checkbox> <Checkbox value={3}>Test2</Checkbox> <Checkbox value={4}>Test2</Checkbox> </CheckboxGroup> ); const checkboxs = instance.querySelectorAll(`.${globalKey}checkbox`); const checked = /\bcheckbox-checked\b/; assert.ok(!checkboxs[0].className.match(checked)); assert.ok(!checkboxs[2].className.match(checked)); assert.ok(checkboxs[1].className.match(checked)); assert.ok(checkboxs[3].className.match(checked)); }); it('Should call onChange callback', done => { const instance = getDOMNode( <CheckboxGroup onChange={value => { if (value.length === 1 && value[0] === 3) { done(); } }} > <Checkbox value={1}>Test1</Checkbox> <Checkbox value={2}>Test2</Checkbox> <Checkbox value={3}>Test2</Checkbox> <Checkbox value={4}>Test2</Checkbox> </CheckboxGroup> ); const checkboxs = instance.querySelectorAll(`.${globalKey}checkbox`); ReactTestUtils.Simulate.change(checkboxs[2].querySelector('input')); }); it('Should call onChange callback', done => { let count = 0; function onDone() { count++; if (count === 2) { done(); } } const instance = getDOMNode( <CheckboxGroup onChange={onDone}> <Checkbox value={1}>Test1</Checkbox> <Checkbox value={2}>Test2</Checkbox> <Checkbox value={3} onChange={onDone}> Test2 </Checkbox> <Checkbox value={4}>Test2</Checkbox> </CheckboxGroup> ); const checkboxs = instance.querySelectorAll(`.${globalKey}checkbox`); ReactTestUtils.Simulate.change(checkboxs[2].querySelector('input')); }); it('Should have a custom className', () => { const instance = getDOMNode(<CheckboxGroup className="custom" />); assert.include(instance.className, 'custom'); }); it('Should have a custom style', () => { const fontSize = '12px'; const instance = getDOMNode(<CheckboxGroup style={{ fontSize }} />); assert.equal(instance.style.fontSize, fontSize); }); it('Should have a custom className prefix', () => { const instance = getDOMNode(<CheckboxGroup classPrefix="custom-prefix" />); assert.ok(instance.className.match(/\bcustom-prefix\b/)); }); });