|
1 |
| -import { render } from '@testing-library/react'; |
| 1 | +import { render, fireEvent } from '@testing-library/react'; |
2 | 2 | import { mount } from 'enzyme';
|
3 | 3 | import KeyCode from '@rc-component/util/lib/KeyCode';
|
4 | 4 | import React from 'react';
|
@@ -709,4 +709,147 @@ describe('TreeSelect.basic', () => {
|
709 | 709 | expect(itemTitle).toHaveStyle(customStyles.popup.itemTitle);
|
710 | 710 | expect(item).toHaveStyle(customStyles.popup.item);
|
711 | 711 | });
|
| 712 | + |
| 713 | + describe('combine showSearch', () => { |
| 714 | + const treeData = [ |
| 715 | + { key: '0', value: 'a', title: '0 label' }, |
| 716 | + { |
| 717 | + key: '1', |
| 718 | + value: 'b', |
| 719 | + title: '1 label', |
| 720 | + children: [ |
| 721 | + { key: '10', value: 'ba', title: '10 label' }, |
| 722 | + { key: '11', value: 'bb', title: '11 label' }, |
| 723 | + ], |
| 724 | + }, |
| 725 | + ]; |
| 726 | + it('searchValue and onSearch', () => { |
| 727 | + const currentSearchFn = jest.fn(); |
| 728 | + const legacySearchFn = jest.fn(); |
| 729 | + const { container } = render( |
| 730 | + <> |
| 731 | + <div id="test1"> |
| 732 | + <TreeSelect |
| 733 | + showSearch |
| 734 | + searchValue="1-10" |
| 735 | + onSearch={currentSearchFn} |
| 736 | + open |
| 737 | + treeDefaultExpandAll |
| 738 | + treeData={treeData} |
| 739 | + /> |
| 740 | + </div> |
| 741 | + <div id="test2"> |
| 742 | + <TreeSelect |
| 743 | + showSearch={{ searchValue: '1-10', onSearch: legacySearchFn }} |
| 744 | + open |
| 745 | + treeDefaultExpandAll |
| 746 | + treeData={treeData} |
| 747 | + /> |
| 748 | + </div> |
| 749 | + </>, |
| 750 | + ); |
| 751 | + const legacyInput = container.querySelector<HTMLInputElement>('#test1 input'); |
| 752 | + const currentInput = container.querySelector<HTMLInputElement>('#test2 input'); |
| 753 | + fireEvent.change(legacyInput, { target: { value: '2' } }); |
| 754 | + fireEvent.change(currentInput, { target: { value: '2' } }); |
| 755 | + expect(currentSearchFn).toHaveBeenCalledWith('2'); |
| 756 | + expect(legacySearchFn).toHaveBeenCalledWith('2'); |
| 757 | + }); |
| 758 | + it('treeNodeFilterProp and autoClearSearchValue', () => { |
| 759 | + const { container } = render( |
| 760 | + <> |
| 761 | + <div id="test1"> |
| 762 | + <TreeSelect |
| 763 | + showSearch |
| 764 | + open |
| 765 | + treeDefaultExpandAll |
| 766 | + treeData={treeData} |
| 767 | + autoClearSearchValue={false} |
| 768 | + treeNodeFilterProp="value" |
| 769 | + /> |
| 770 | + </div> |
| 771 | + <div id="test2"> |
| 772 | + <TreeSelect |
| 773 | + showSearch={{ |
| 774 | + autoClearSearchValue: false, |
| 775 | + treeNodeFilterProp: 'value', |
| 776 | + }} |
| 777 | + open |
| 778 | + treeDefaultExpandAll |
| 779 | + treeData={treeData} |
| 780 | + /> |
| 781 | + </div> |
| 782 | + </>, |
| 783 | + ); |
| 784 | + const legacyInput = container.querySelector<HTMLInputElement>('#test1 input'); |
| 785 | + const currentInput = container.querySelector<HTMLInputElement>('#test2 input'); |
| 786 | + fireEvent.change(legacyInput, { target: { value: 'a' } }); |
| 787 | + fireEvent.change(currentInput, { target: { value: 'a' } }); |
| 788 | + const legacyItem = container.querySelector<HTMLInputElement>( |
| 789 | + '#test1 .rc-tree-select-tree-title', |
| 790 | + ); |
| 791 | + const currentItem = container.querySelector<HTMLInputElement>( |
| 792 | + '#test2 .rc-tree-select-tree-title', |
| 793 | + ); |
| 794 | + |
| 795 | + expect(legacyInput).toHaveValue('a'); |
| 796 | + expect(currentInput).toHaveValue('a'); |
| 797 | + fireEvent.click(legacyItem); |
| 798 | + fireEvent.click(currentItem); |
| 799 | + const valueSpan = container.querySelectorAll<HTMLSpanElement>( |
| 800 | + ' .rc-tree-select-selection-item', |
| 801 | + ); |
| 802 | + |
| 803 | + expect(valueSpan[0]).toHaveTextContent('0 label'); |
| 804 | + expect(valueSpan[1]).toHaveTextContent('0 label'); |
| 805 | + }); |
| 806 | + it('filterTreeNode', () => { |
| 807 | + const { container } = render( |
| 808 | + <> |
| 809 | + <div id="test1"> |
| 810 | + <TreeSelect |
| 811 | + showSearch |
| 812 | + open |
| 813 | + treeDefaultExpandAll |
| 814 | + treeData={treeData} |
| 815 | + filterTreeNode={(inputValue, node) => node.value === inputValue} |
| 816 | + /> |
| 817 | + </div> |
| 818 | + <div id="test2"> |
| 819 | + <TreeSelect |
| 820 | + showSearch={{ |
| 821 | + filterTreeNode: (inputValue, node) => node.value === inputValue, |
| 822 | + }} |
| 823 | + open |
| 824 | + treeDefaultExpandAll |
| 825 | + treeData={treeData} |
| 826 | + /> |
| 827 | + </div> |
| 828 | + </>, |
| 829 | + ); |
| 830 | + const legacyInput = container.querySelector<HTMLInputElement>('#test1 input'); |
| 831 | + const currentInput = container.querySelector<HTMLInputElement>('#test2 input'); |
| 832 | + fireEvent.change(legacyInput, { target: { value: 'bb' } }); |
| 833 | + fireEvent.change(currentInput, { target: { value: 'bb' } }); |
| 834 | + const options = container.querySelectorAll<HTMLDivElement>(' .rc-tree-select-tree-title'); |
| 835 | + |
| 836 | + expect(options).toHaveLength(4); |
| 837 | + }); |
| 838 | + it.each([ |
| 839 | + // [description, props, shouldExist] |
| 840 | + ['showSearch=false ', { showSearch: false }, false], |
| 841 | + ['showSearch=undefined ', {}, false], |
| 842 | + ['showSearch=true', { showSearch: true }, true], |
| 843 | + ])('%s', (_, props: { showSearch?: boolean; mode?: 'tags' }, shouldExist) => { |
| 844 | + const { container } = render( |
| 845 | + <TreeSelect open treeDefaultExpandAll treeData={treeData} {...props} />, |
| 846 | + ); |
| 847 | + const inputNode = container.querySelector('input'); |
| 848 | + if (shouldExist) { |
| 849 | + expect(inputNode).not.toHaveAttribute('readonly'); |
| 850 | + } else { |
| 851 | + expect(inputNode).toHaveAttribute('readonly'); |
| 852 | + } |
| 853 | + }); |
| 854 | + }); |
712 | 855 | });
|
0 commit comments