From 600cb696c4bafef87903f73a9c15e650b5b12c29 Mon Sep 17 00:00:00 2001 From: Ilya Oleshko Date: Fri, 10 Jan 2020 12:30:10 +0300 Subject: [PATCH] Web: Components: ComboBox: Fixed tests --- .../src/components/combobox/combobox.test.js | 126 ++++++++++++------ 1 file changed, 84 insertions(+), 42 deletions(-) diff --git a/web/ASC.Web.Components/src/components/combobox/combobox.test.js b/web/ASC.Web.Components/src/components/combobox/combobox.test.js index a5908b885d..60570f5dfa 100644 --- a/web/ASC.Web.Components/src/components/combobox/combobox.test.js +++ b/web/ASC.Web.Components/src/components/combobox/combobox.test.js @@ -32,7 +32,8 @@ const baseProps = { selectedOption: { key: 0, icon: 'CatalogFolderIcon', - label: "Select" + label: "Select", + default: true }, options: baseOptions, opened: false, @@ -41,6 +42,17 @@ const baseProps = { scaled: true }; +const toggleDisplayProps = { + options: [], + selectedOption: { + key: 0, + label: "Selected option" + }, + scaled: false, + size: "content", + displayType: "toggle" +}; + describe('', () => { it('rendered without error', () => { const wrapper = mount( @@ -76,6 +88,13 @@ describe('', () => { expect(wrapper.prop('opened')).toEqual(true); }); + it('opened without borders', () => { + const wrapper = mount(); + + expect(wrapper.prop('opened')).toEqual(true); + expect(wrapper.prop('noBorder')).toEqual(true); + }); + it('with DropDown max height', () => { const wrapper = mount(); @@ -188,26 +207,6 @@ describe('', () => { expect(wrapper.state('isOpen')).toBe(false); }); - //TODO: Remove or re-write duplicate test - /* it('causes function comboBoxClick() with opened prop', () => { - const wrapper = mount(); - const instance = wrapper.instance(); - - instance.comboBoxClick(new Event('click')); - - expect(wrapper.state('isOpen')).toBe(false); - }); - - //TODO: Remove or re-write duplicate test - it('causes function comboBoxClick()', () => { - const wrapper = mount(); - const instance = wrapper.instance(); - - instance.comboBoxClick(new Event('click')); - - expect(wrapper.state('isOpen')).toBe(false); - }); */ - it('causes function handleClick() with simulate', () => { const wrapper = mount(); @@ -224,38 +223,35 @@ describe('', () => { expect(wrapper.state('isOpen')).toBe(true); }); - it('componentDidUpdate() state lifecycle test', () => { + it('componentDidUpdate() lifecycle test', () => { const wrapper = shallow(); const instance = wrapper.instance(); + const newSelected = { key: 1, label: "Select" }; - wrapper.setState({ isOpen: false }); + jest.spyOn(instance, 'setIsOpen'); - instance.componentDidUpdate(wrapper.props(), wrapper.state()); + wrapper.setProps({ + opened: true + }); - expect(wrapper.state()).toBe(wrapper.state()); - }); + expect(wrapper.props().opened).toBe(true); - it('componentDidUpdate() props lifecycle test', () => { - const wrapper = shallow(); - const instance = wrapper.instance(); + wrapper.setProps({ + opened: false + }); + + expect(wrapper.props().opened).toBe(false); instance.componentDidUpdate({ opened: true, - selectedOption: { - key: 1, - label: "Select" - } - }, wrapper.state()); + selectedOption: newSelected + }, { + isOpen: true + }); - expect(wrapper.props()).toBe(wrapper.props()); - }); + instance.forceUpdate(); //Need for manual re-render, enzyme issue - it('componentWillUnmount() lifecycle test', () => { - const wrapper = mount(); - const componentWillUnmount = jest.spyOn(wrapper.instance(), 'componentWillUnmount'); - - wrapper.unmount(); - expect(componentWillUnmount).toHaveBeenCalled(); + expect(instance.setIsOpen).toHaveBeenCalled(); }); it('accepts id', () => { @@ -281,4 +277,50 @@ describe('', () => { expect(wrapper.getDOMNode().style).toHaveProperty('color', 'red'); }); + + it('render like toggle displayType', () => { + const onToggleClick = jest.fn(); + const wrapper = mount( + + ); + + expect(wrapper.prop('displayType')).toEqual('toggle'); + }); + + it('click on toggle', () => { + const onToggleClick = jest.fn(); + const wrapper = mount( + + ); + + jest.spyOn(wrapper.instance(), 'setIsOpen'); + + wrapper.simulate('click'); + + expect(onToggleClick).toHaveBeenCalled(); + expect(wrapper.instance().setIsOpen).toHaveBeenCalled(); + }); + + it('click outside', () => { + const onToggleClick = jest.fn(); + const wrapper = mount(); + const instance = wrapper.instance(); + + jest.spyOn(instance, 'setIsOpen'); + jest.spyOn(instance, 'handleClickOutside'); + + instance.handleClickOutside(); //TODO: rework with simulation + + expect(wrapper.state('isOpen')).toBe(false); + expect(wrapper.prop('opened')).toBe(true); + expect(instance.handleClickOutside).toHaveBeenCalled(); + expect(onToggleClick).toHaveBeenCalled(); + expect(instance.setIsOpen).toHaveBeenCalled(); + }); });