| 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);    });});
 |