| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- import * as _ from 'lodash';
- import { spy } from 'sinon';
- import { BASE_CLASS_PREFIX } from '@douyinfe/semi-foundation/base/constants';
- import Transfer from '../index';
- const defaultItems = [
- {
- label: 'item1',
- value: '1',
- key: 'a',
- },
- {
- label: 'item2',
- value: '2',
- key: 'b',
- },
- ];
- const dataWithGroup = [
- {
- title: '类别A',
- children: [
- { label: 'A-1', value: 1, disabled: false, key: 1 },
- { label: 'A-2', value: 2, disabled: false, key: 2 },
- { label: 'A-3', value: 3, disabled: false, key: 3 },
- ],
- },
- {
- title: '类别B',
- children: [
- { label: 'B-1', value: 4, disabled: false, key: 4 },
- { label: 'B-2', value: 5, disabled: false, key: 5 },
- { label: 'B-3(disabled)', value: 6, disabled: true, key: 6 },
- ],
- },
- {
- title: '类别C',
- children: [
- { label: 'C-1', value: 7, disabled: false, key: 7 },
- { label: 'C-2', value: 8, disabled: false, key: 8 },
- { label: 'C-3', value: 9, disabled: false, key: 9 },
- { label: 'C-4', value: 10, disabled: false, key: 10 },
- { label: 'C-5', value: 11, disabled: false, key: 11 },
- { label: 'C-6', value: 12, disabled: false, key: 12 },
- { label: 'C-7', value: 13, disabled: false, key: 13 },
- ],
- },
- ];
- const treeData = [
- {
- label: 'Asia',
- value: 'Asia',
- key: '0',
- children: [
- {
- label: 'China',
- value: 'China',
- key: '0-0',
- children: [
- {
- label: 'Beijing',
- value: 'Beijing',
- key: '0-0-0',
- disabled: true,
- },
- {
- label: 'Shanghai',
- value: 'Shanghai',
- key: '0-0-1',
- },
- {
- label: 'Chengdu',
- value: 'Chengdu',
- key: '0-0-2',
- },
- {
- label: 'Chongqing',
- value: 'Chongqing',
- key: '0-0-3',
- },
- ],
- },
- {
- label: 'Japan',
- value: 'Japan',
- key: '0-1',
- children: [
- {
- label: 'Osaka',
- value: 'Osaka',
- key: '0-1-0',
- },
- ],
- },
- ],
- },
- {
- label: 'North America',
- value: 'North America',
- key: '1',
- children: [
- {
- label: 'United States',
- value: 'United States',
- key: '1-0',
- },
- {
- label: 'Canada',
- value: 'Canada',
- key: '1-1',
- },
- ],
- },
- ];
- function getTransfer(props) {
- return mount(<Transfer {...props} />, { attachTo: document.getElementById('container') });
- }
- describe(`Transfer`, () => {
- beforeEach(() => {
- // Avoid `attachTo: document.body` Warning
- const div = document.createElement('div');
- div.setAttribute('id', 'container');
- document.body.appendChild(div);
- });
- afterEach(() => {
- const div = document.getElementById('container');
- if (div) {
- document.body.removeChild(div);
- }
- document.body.innerHTML = '';
- });
- it('custom className & style', () => {
- let props = {
- className: 'test',
- style: {
- color: 'red',
- },
- };
- const wrapper = getTransfer(props);
- expect(wrapper.hasClass('test')).toEqual(true);
- expect(wrapper.find('div.test')).toHaveStyle('color', 'red');
- });
- it('defaultValue effective', () => {
- let props = {
- dataSource: defaultItems,
- defaultValue: ['1'],
- };
- const wrapper = getTransfer(props);
- expect(wrapper.state().selectedItems.has('a')).toEqual(true);
- });
- it('search effect while data change', () => {
- let props = {
- dataSource: [],
- };
- const wrapper = getTransfer(props);
- const searchIn = wrapper.find(`.${BASE_CLASS_PREFIX}-input`);
- const env = { target: { value: '2' } };
- searchIn.simulate('change', env);
- wrapper.setProps({
- dataSource: [
- { label: '1', value: 1, key: 1 },
- { label: '2', value: 2, key: 2 },
- ],
- });
- expect(wrapper.state().searchResult.has(2)).toEqual(true);
- expect(wrapper.state().searchResult.size === 1).toEqual(true);
- expect(wrapper.state().inputValue === '2').toEqual(true);
- });
- it('search', () => {
- const spyOnSearch = spy();
- let props = {
- dataSource: defaultItems,
- onSearch: spyOnSearch,
- };
- const transfer = getTransfer(props);
- const inputNode = transfer.find(`.${BASE_CLASS_PREFIX}-transfer-filter input`).at(0);
- const env = { target: { value: '1' } };
- inputNode.simulate('change', env);
- expect(spyOnSearch.calledOnce).toEqual(true);
- expect(spyOnSearch.firstCall.args).toHaveLength(1);
- expect(spyOnSearch.firstCall.args[0] === '1').toEqual(true);
- });
- it('select and change', () => {
- const spyOnChange = spy();
- const spyOnSelect = spy();
- const spyOnDeselect = spy();
- let props = {
- dataSource: defaultItems,
- onChange: spyOnChange,
- onSelect: spyOnSelect,
- onDeselect: spyOnDeselect,
- };
- const transfer = getTransfer(props);
- // select first item -> deselect first item
- const firstItem = transfer.find(`span.${BASE_CLASS_PREFIX}-transfer-item`).at(0);
- firstItem.simulate('click');
- firstItem.simulate('click');
- expect(spyOnSelect.calledOnce).toEqual(true);
- expect(spyOnDeselect.calledOnce).toEqual(true);
- expect(spyOnChange.calledTwice).toEqual(true);
- expect(spyOnChange.firstCall.args).toHaveLength(2);
- expect(Array.isArray(spyOnChange.firstCall.args[0])).toEqual(true);
- expect(spyOnChange.firstCall.args[0]).toHaveLength(1);
- expect(spyOnChange.firstCall.args[0][0]).toEqual(defaultItems[0].value);
- expect(Array.isArray(spyOnChange.firstCall.args[1])).toEqual(true);
- expect(spyOnChange.firstCall.args[1]).toHaveLength(1);
- expect(spyOnChange.firstCall.args[1][0]).toMatchObject(defaultItems[0]);
- expect(spyOnChange.secondCall.args).toHaveLength(2);
- expect(Array.isArray(spyOnChange.secondCall.args[0])).toEqual(true);
- expect(spyOnChange.secondCall.args[0]).toHaveLength(0);
- expect(Array.isArray(spyOnChange.secondCall.args[1])).toEqual(true);
- expect(spyOnChange.secondCall.args[1]).toHaveLength(0);
- });
- it('de/select all', () => {
- const spyOnChange = spy();
- let props = {
- dataSource: defaultItems,
- onChange: spyOnChange,
- };
- const transfer = getTransfer(props);
- const selectAllNode = transfer.find(`button.${BASE_CLASS_PREFIX}-transfer-header-all`).at(0);
- selectAllNode.simulate('click');
- selectAllNode.simulate('click');
- expect(spyOnChange.calledTwice).toEqual(true);
- expect(spyOnChange.firstCall.args).toHaveLength(2);
- expect(spyOnChange.firstCall.args[0]).toHaveLength(defaultItems.length);
- expect(spyOnChange.firstCall.args[1]).toHaveLength(defaultItems.length);
- expect(spyOnChange.secondCall.args).toHaveLength(2);
- expect(spyOnChange.secondCall.args[0]).toHaveLength(0);
- expect(spyOnChange.secondCall.args[1]).toHaveLength(0);
- });
- it('clear all', () => {
- const spyOnChange = spy();
- let props = {
- dataSource: defaultItems,
- onChange: spyOnChange,
- defaultValue: defaultItems.map(i=>i.value),
- };
- const transfer = getTransfer(props);
- const clearAllNode = transfer.find(`button.${BASE_CLASS_PREFIX}-transfer-header-all`).at(1);
- clearAllNode.simulate('click');
- expect(spyOnChange.calledOnce).toEqual(true);
- expect(spyOnChange.firstCall.args).toHaveLength(2);
- expect(spyOnChange.firstCall.args[0]).toHaveLength(0);
- expect(spyOnChange.firstCall.args[1]).toHaveLength(0);
- });
- it('group transfer render', () => {
- const spyOnChange = spy();
- const spyOnSearch = spy();
- const props = {
- type: 'groupList',
- defaultValue: [6],
- dataSource: dataWithGroup,
- onChange: spyOnChange,
- onSearch: spyOnSearch,
- };
- const transfer = getTransfer(props);
- expect(transfer.exists(`.${BASE_CLASS_PREFIX}-transfer`)).toEqual(true);
- });
- it('tree transfer render', () => {
- const spyOnChange = spy();
- const spyOnSearch = spy();
- const props = {
- type: 'treeList',
- draggable: true,
- dataSource: treeData,
- value: ['Shanghai'],
- showPath: true,
- onChange: spyOnChange,
- onSearch: spyOnSearch,
- };
- const transfer = getTransfer(props);
- const treeNode = transfer.find(`li.${BASE_CLASS_PREFIX}-tree-option`).at(0);
- treeNode.simulate('click');
- const inputNode = transfer.find(`.${BASE_CLASS_PREFIX}-transfer-filter input`).at(0);
- const env = { target: { value: '1' } };
- inputNode.simulate('change', env);
- expect(transfer.exists(`.${BASE_CLASS_PREFIX}-transfer`)).toEqual(true);
- expect(spyOnChange.calledOnce).toEqual(true);
- expect(spyOnChange.firstCall.args).toHaveLength(2);
- expect(spyOnChange.firstCall.args[0]).toHaveLength(4);
- expect(spyOnChange.firstCall.args[1]).toHaveLength(4);
- expect(spyOnSearch.calledOnce).toEqual(true);
- expect(spyOnSearch.firstCall.args).toHaveLength(1);
- expect(spyOnSearch.firstCall.args[0] === '1').toEqual(true);
- });
- });
|