import { mount } from '@vue/test-utils'; import Badge from '../index'; import mountTest from '../../../tests/shared/mountTest'; import { asyncExpect } from '../../../tests/utils'; describe('Badge', () => { it('badge dot not scaling count > 9', () => { const badge = mount({ render() { return <Badge count={10} dot />; }, }); expect(badge.findAll('.ant-card-multiple-words').length).toBe(0); }); it('badge should support float number', () => { let wrapper = mount({ render() { return <Badge count={3.5} />; }, }); expect(wrapper.text()).toMatchSnapshot(); wrapper = mount({ render() { return <Badge count={3.5} />; }, }); expect(wrapper.html()).toMatchSnapshot(); }); it('badge dot not showing count == 0', () => { const badge = mount({ render() { return <Badge count={0} dot />; }, }); expect(badge.findAll('.ant-badge-dot').length).toBe(0); }); it('should have an overriden title attribute', () => { const badge = mount({ render() { return <Badge count={10} title="Custom title" />; }, }); expect(badge.find('.ant-scroll-number').element.attributes.getNamedItem('title').value).toEqual( 'Custom title', ); }); // https://github.com/ant-design/ant-design/issues/10626 // it('should be composable with Tooltip', async () => { // const wrapper = mount({ // render () { // return <Tooltip ref='tooltip' title='Fix the error'> // <Badge status='error' /> // </Tooltip> // }, // }, { sync: false }) // await asyncExpect(() => { // wrapper.find({ name: 'ABadge' }).trigger('mouseenter') // }, 0) // expect(wrapper.vm.$refs.tooltip.sVisible).toBe(true) // }) it('should render when count is changed', async () => { const wrapper = mount(Badge, { props: { count: 9, }, sync: false, }); await asyncExpect(() => { wrapper.setProps({ count: 10 }); }, 100); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); wrapper.setProps({ count: 11 }); }, 100); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); wrapper.setProps({ count: 11 }); }, 100); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); wrapper.setProps({ count: 10 }); }, 100); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); wrapper.setProps({ count: 9 }); }, 100); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); }, 100); }); it('should be compatible with borderColor style', () => { const wrapper = mount({ render() { return ( <Badge count={4} style={{ backgroundColor: '#fff', color: '#999', borderColor: '#d9d9d9' }} /> ); }, }); expect(wrapper.html()).toMatchSnapshot(); }); // https://github.com/ant-design/ant-design/issues/13694 it('should support offset when count is a VueNode', () => { const wrapper = mount({ render() { return ( <Badge count={<span class="custom" style={{ color: '#f5222d' }} />} offset={[10, 20]}> <a href="#" class="head-example"> head </a> </Badge> ); }, }); expect(wrapper.html()).toMatchSnapshot(); }); // https://github.com/ant-design/ant-design/issues/15799 it('render correct with negative number', () => { const wrapper = mount({ render() { return ( <div> <Badge count="-10" /> <Badge count={-10} /> </div> ); }, }); expect(wrapper.html()).toMatchSnapshot(); }); it('text works with vnode', () => { const wrapper = mount({ render() { return <Badge status="success" text={<span>hello</span>} />; }, }); expect(wrapper.html()).toMatchSnapshot(); }); }); describe('Ribbon', () => { mountTest(Badge.Ribbon); describe('placement', () => { it('works with `start` & `end` placement', () => { const wrapperStart = mount({ render() { return ( <Badge.Ribbon placement="start"> <div /> </Badge.Ribbon> ); }, }); expect(wrapperStart.findAll('.ant-ribbon-placement-start').length).toEqual(1); const wrapperEnd = mount({ render() { return ( <Badge.Ribbon placement="end"> <div /> </Badge.Ribbon> ); }, }); expect(wrapperEnd.findAll('.ant-ribbon-placement-end').length).toEqual(1); }); }); describe('color', () => { it('works with preset color', () => { const wrapper = mount({ render() { return ( <Badge.Ribbon color="green"> <div /> </Badge.Ribbon> ); }, }); expect(wrapper.findAll('.ant-ribbon-color-green').length).toEqual(1); }); }); describe('text', () => { it('works with string', () => { const wrapper = mount({ render() { return ( <Badge.Ribbon text="cool"> <div /> </Badge.Ribbon> ); }, }); expect(wrapper.find('.ant-ribbon').text()).toEqual('cool'); }); it('works with element', () => { const wrapper = mount({ render() { return ( <Badge.Ribbon text={<span class="cool" />}> <div /> </Badge.Ribbon> ); }, }); expect(wrapper.findAll('.cool').length).toEqual(1); }); }); });