| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 | 
							- import Pagination from '../index';
 
- import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
 
- import { genAfterEach, genBeforeEach, sleep } from '../../_test_/utils';
 
- const defaultPageSize = 10;
 
- // Pagination中第一层结构为LocaleConsumer,如果用shallow不好使
 
- function getPagination(props) {
 
-     return mount(<Pagination {...props} />, { attachTo: document.getElementById('container') });
 
- }
 
- describe('Pagination', () => {
 
-     // 主要验证渲染的pageItem数量,以及最后一页的页码
 
-     it('Pagination total & pageSize', () => {
 
-     
 
-         let maxItemCount = 9;
 
-         const total30 = mount(<Pagination total={30} />);
 
-         const total70 = mount(<Pagination total={70} />);
 
-         const total200 = mount(<Pagination total={200} />);
 
-         const size50 = mount(<Pagination total={200} pageSize={50} />);
 
-         
 
-         function getPageChild(wrapper) {
 
-             return wrapper.find('ul').children();
 
-         }
 
-         expect(getPageChild(total30)).toHaveLength(5);
 
-         expect(getPageChild(total70)).toHaveLength(maxItemCount);
 
-         expect(getPageChild(total200)).toHaveLength(maxItemCount);
 
-         expect(getPageChild(size50)).toHaveLength(Math.ceil(200/50)+2);
 
-     });
 
-     it('Pagination with custom className & style', () => {
 
-         const wrapper = mount(<Pagination className='test' style={{color: 'red'}} />);
 
-         expect(wrapper.exists('.test')).toEqual(true);
 
-         // 此处写ul.test 是因为如果直接find (.test)会找到两个,第一个是react instance,第二个才是真正的dom组件
 
-         // 限定ul.test可以直接拿到真正的dom组件
 
-         expect(wrapper.find('ul.test')).toHaveStyle('color', 'red');
 
-     });
 
-     it('render mini pagination', () => {
 
-         const wrapper = mount(<Pagination size='small' total={90}></Pagination>);
 
-         expect(wrapper.exists(`.${BASE_CLASS_PREFIX}-page-small`)).toEqual(true);
 
-     });
 
-     it('Pagination showTotal & showSizeChanger', () => {
 
-         const wrapper = mount(<Pagination showTotal total={80} showSizeChanger/>);
 
-         expect(wrapper.exists(`.${BASE_CLASS_PREFIX}-page-total`)).toEqual(true);
 
-         expect(wrapper.exists(`.${BASE_CLASS_PREFIX}-page-switch`)).toEqual(true);
 
-     });
 
-     it('Pagination with defaultCurrentPage', () => {
 
-         const wrapper = mount(<Pagination total={80} showTotal defaultCurrentPage={3}></Pagination>);
 
-         expect(wrapper.state('currentPage')).toEqual(3);
 
-         expect(wrapper.find('.semi-page').children().at(4).text()).toEqual('3')
 
-     });
 
-     it('auto disabled prev/next btn when first/last page', () => {
 
-         const firstPage = mount(<Pagination total={30} />);
 
-         const lastPage = mount(<Pagination total={200} defaultCurrentPage={20} />);
 
-         const onlyOnePage = mount(<Pagination total={9} />);
 
-         let DISABLED_CLASS = `.${BASE_CLASS_PREFIX}-page-item-disabled`;
 
-         expect(firstPage.find('ul').children().first().exists(DISABLED_CLASS)).toEqual(true);
 
-         expect(firstPage.find('ul').children().last().exists(DISABLED_CLASS)).toEqual(false);
 
-         expect(lastPage.find('ul').children().first().exists(DISABLED_CLASS)).toEqual(false);
 
-         expect(lastPage.find('ul').children().last().exists(DISABLED_CLASS)).toEqual(true);
 
-         expect(onlyOnePage.find('ul').children().first().exists(DISABLED_CLASS)).toEqual(true);
 
-         expect(onlyOnePage.find('ul').children().last().exists(DISABLED_CLASS)).toEqual(true);
 
-     });
 
-     it('hideOnSingePage', () => {
 
-         let props = {
 
-             total: 10,
 
-             hideOnSingePage: true,
 
-         };
 
-         const pag = getPagination(props);
 
-         expect(pag.exists('.semi-age')).toEqual(false);
 
-     });
 
-     it('nextText & prevText', () => {
 
-         let props = {
 
-             total: 200,
 
-             nextText: 'next',
 
-             prevText: 'prev',
 
-         };
 
-         const pag = getPagination(props);
 
-         expect(pag.find('.semi-page-next').text()).toEqual('next');
 
-         expect(pag.find('.semi-page-prev').text()).toEqual('prev');
 
-     });
 
-     it('showTotal &  showSizeChanger', () => {
 
-         let props = {
 
-             total: 200,
 
-             showTotal: true,
 
-             showSizeChanger: true,
 
-         };
 
-         const pag = getPagination(props);
 
-         expect(pag.exists('.semi-page-total')).toEqual(true);
 
-         expect(pag.find('.semi-page-total').text()).toEqual('共 20 页')
 
-         expect(pag.exists('.semi-page-switch')).toEqual(true);
 
-     })
 
-     it('dynamic change pageSize', () => {
 
-         // let map = {
 
-         //     10: 40,
 
-         //     40: 100,
 
-         //     100: 20,
 
-         //     100: 10
 
-         // }
 
-         let props = {
 
-             total: 200,
 
-             showSizeChanger: true,
 
-             pageSize: 10
 
-         }
 
-         const pag = getPagination(props);
 
-         // pageSize 10 -> 40
 
-         pag.setProps({ pageSize: 40 });
 
-         pag.update();
 
-         expect(pag.state().pageSize).toEqual(40);
 
-         expect(pag.find('.semi-select-selection-text').children(0).text()).toEqual('40 条/页');
 
-         expect(pag.find('.semi-page-item').children().length).toEqual((200/40) + 2);
 
-         // pageSize 40 -> 100
 
-         pag.setProps({ pageSize: 100 });
 
-         pag.update();
 
-         expect(pag.state().pageSize).toEqual(100);
 
-         expect(pag.find('.semi-select-selection-text').children(0).text()).toEqual('100 条/页');
 
-         expect(pag.find('.semi-page-item').children().length).toEqual((200/100) + 2);
 
-         // pageSize 100 -> 20
 
-         pag.setProps({ pageSize: 20 });
 
-         pag.update();
 
-         expect(pag.state().pageSize).toEqual(20);
 
-         expect(pag.find('.semi-select-selection-text').children(0).text()).toEqual('20 条/页');
 
-         // show ..., always 9
 
-         expect(pag.find('.semi-page-item').children().length).toEqual(9);
 
-     });
 
-     it('onPageChange', () => {
 
-         let tagetPage = 7;
 
-         let onPageChange = value => {
 
-             // debugger
 
-             // console.log(value);
 
-         };
 
-         let spyOnPageChange = sinon.spy(onPageChange);
 
-         const pag = mount(<Pagination total={70} onPageChange={spyOnPageChange} />);
 
-         pag.find('li').at(7).simulate('click');
 
-         expect(spyOnPageChange.calledOnce).toBe(true);
 
-         expect(spyOnPageChange.calledWithMatch(tagetPage)).toBe(true);
 
-     });
 
-     // TODO select没有留出props控制是否自动打开,这块不太好测
 
-     it('pageSizeOpts', () => {
 
-         let props = {
 
-             pageSizeOpts: [10, 20, 30],
 
-             showSizeChanger: true,
 
-         };
 
-         const pag = getPagination(props);
 
-     });
 
-     // it('popoverPosition & popoverZIndex', () => {
 
-     //     let props = {
 
-     //         popoverPosition: 'right',
 
-     //         popoverZIndex: 888,
 
-     //         total: 200,
 
-     //     };
 
-     //     const pag = getPagination(props);
 
-     //     let rest = pag.find('.semi-page-item').children().at(5);
 
-         // rest.simulate('mouseEnter');
 
-     // });
 
-     // TODO 不太好测,事件不好模拟触发
 
-     // it('onPageSizeChange', async () => {
 
-     //     let onPageSizeChange = value => {};
 
-     //     let spyOnPageSizeChange = sinon.spy(onPageSizeChange);
 
-     //     let props = {
 
-     //         onPageSizeChange: spyOnPageSizeChange,
 
-     //         showSizeChanger: true,
 
-     //         total: 200,
 
-     //     }
 
-     //     const pag = getPagination(props);
 
-     //     const select = pag.find('.semi-select');
 
-     //     select.simulate('click');
 
-     //     // await sleep(200);
 
-     //     const optionList = document.querySelector('.semi-select-option-list');
 
-     //     done();
 
-     //     // pagination.find('li').at(7).simulate('click');
 
-     //     // expect(spyOnPageChange.calledOnce).toBe(true);
 
-     //     // expect(spyOnPageChange.calledWithMatch(tagetPage)).toBe(true);
 
-     // });
 
-     it('uncontrol mode - onChange', () => {
 
-         let tagetPage = 20;
 
-         let onChange = value => {};
 
-         let spyOnChange = sinon.spy(onChange);
 
-         let props = {
 
-             onChange: spyOnChange,
 
-             total: 200,
 
-         };
 
-         const pagination = getPagination(props);
 
-         pagination.find('.semi-page-item').at(7).simulate('click');
 
-         expect(spyOnChange.calledWithMatch(tagetPage)).toBe(true);
 
-     });
 
-     it('currentPage & onChange in controlled mode', () => {
 
-         let onChange = value => {};
 
-         let spyOnChange = sinon.spy(onChange);
 
-         let props = {
 
-             currentPage: 3,
 
-             total: 200,
 
-             onChange: spyOnChange
 
-         };
 
-         const pag = getPagination(props);
 
-         pag.find('.semi-page-item').at(7).simulate('click');
 
-         expect(spyOnChange.calledWithMatch(20)).toBe(true);
 
-         expect(pag.state().currentPage).toEqual(3);
 
-         pag.setProps({ currentPage: 4 });
 
-         expect(pag.state().currentPage).toEqual(4);
 
-         expect(pag.find('.semi-page-item-active').text()).toEqual("3");
 
-     });
 
-     it('showQuickJumper', () => {
 
-         let spyOnChange = sinon.spy(() => {});
 
-         let props = {
 
-             total: 200,
 
-             onChange: spyOnChange,
 
-             showQuickJumper: true,
 
-         };
 
-         let quickJumpPage = 5;
 
-         const pag = mount(<Pagination {...props} />);
 
-         const jumper = pag.find('.semi-page .semi-page-quickjump-input-number.semi-input-number input');
 
-         jumper.simulate('focus');
 
-         jumper.simulate('change', { target: { value: quickJumpPage }});
 
-         jumper.simulate('blur');
 
-         expect(spyOnChange.calledWithMatch(quickJumpPage)).toBe(true);
 
-         expect(pag.state().currentPage).toEqual(quickJumpPage);
 
-         jumper.simulate('focus');
 
-         jumper.simulate('change', { target: { value: props.total / 10 + 1 }});
 
-         jumper.simulate('blur');
 
-         expect(pag.state().currentPage).toEqual(props.total / 10);
 
-         jumper.simulate('focus');
 
-         jumper.simulate('change', { target: { value: NaN }});
 
-         jumper.simulate('keypress', { key: 'Enter' });
 
-         expect(pag.state().currentPage).toEqual(props.total / 10);
 
-         jumper.simulate('focus');
 
-         jumper.simulate('change', { target: { value: -1 }});
 
-         jumper.simulate('keypress', { key: 'Enter' });
 
-         expect(pag.state().currentPage).toEqual(1);
 
-         pag.unmount();
 
-     });
 
- })
 
 
  |