/** * External dependencies */ import { render, screen } from '@testing-library/react'; /** * Internal dependencies */ import { ActivityPanel } from '../'; jest.mock( '@woocommerce/data', () => ( { ...jest.requireActual( '@woocommerce/data' ), useUserPreferences: () => ( { updateUserPreferences: () => {}, } ), } ) ); // We aren't testing the component here. jest.mock( '../display-options', () => ( { DisplayOptions: jest.fn().mockReturnValue( '[DisplayOptions]' ), } ) ); jest.mock( '../highlight-tooltip', () => ( { HighlightTooltip: jest.fn().mockReturnValue( '[HighlightTooltip]' ), } ) ); describe( 'Activity Panel', () => { it( 'should render inbox tab on embedded pages', () => { render( ); expect( screen.getByText( 'Inbox' ) ).toBeDefined(); } ); it( 'should render inbox tab if not on home screen', () => { render( ( { location: { pathname: '/customers', }, } ) } query={ {} } /> ); expect( screen.getByText( 'Inbox' ) ).toBeDefined(); } ); it( 'should not render inbox tab on home screen', () => { render( ); expect( screen.queryByText( 'Inbox' ) ).toBeNull(); } ); it( 'should not render help tab if not on home screen', () => { render( ( { location: { pathname: '/customers', }, } ) } query={ {} } /> ); expect( screen.queryByText( 'Help' ) ).toBeNull(); } ); it( 'should render help tab if on home screen', () => { render( ( { location: { pathname: '/', }, } ) } query={ {} } /> ); expect( screen.getByText( 'Help' ) ).toBeDefined(); } ); it( 'should render help tab before options load', async () => { render( ); const tabs = await screen.findAllByRole( 'tab' ); // Expect that the only tab is "Help". expect( tabs ).toHaveLength( 1 ); expect( screen.getByText( 'Help' ) ).toBeDefined(); } ); it( 'should not render help tab when not on main route', () => { render( ( { location: { pathname: '/customers', }, } ) } query={ { task: 'products', path: '/customers', } } /> ); // Expect that "Help" tab is absent. expect( screen.queryByText( 'Help' ) ).toBeNull(); } ); it( 'should render display options if on home screen', () => { render( ( { location: { pathname: '/', }, } ) } query={ {} } /> ); expect( screen.getByText( '[DisplayOptions]' ) ).toBeDefined(); } ); it( 'should only render the store setup link when TaskList is not complete', () => { const { queryByText, rerender } = render( ); expect( queryByText( 'Store Setup' ) ).toBeDefined(); rerender( ); expect( queryByText( 'Store Setup' ) ).toBeNull(); } ); it( 'should not render the store setup link when on the home screen and TaskList is not complete', () => { const { queryByText } = render( ( { location: { pathname: '/', }, } ) } query={ { task: '', } } /> ); expect( queryByText( 'Store Setup' ) ).toBeNull(); } ); it( 'should render the store setup link when on embedded pages and TaskList is not complete', () => { const { getByText } = render( ); expect( getByText( 'Store Setup' ) ).toBeInTheDocument(); } ); describe( 'help panel tooltip', () => { it( 'should render highlight tooltip when task count is at-least 2, task is not completed, and tooltip not shown yet', () => { const { getByText } = render( ); expect( getByText( '[HighlightTooltip]' ) ).toBeInTheDocument(); } ); it( 'should not render highlight tooltip when task is not visited more then once', () => { render( ); expect( screen.queryByText( '[HighlightTooltip]' ) ).toBeNull(); render( ); expect( screen.queryByText( '[HighlightTooltip]' ) ).toBeNull(); } ); it( 'should not render highlight tooltip when task is visited twice, but completed already', () => { const { queryByText } = render( ); expect( queryByText( '[HighlightTooltip]' ) ).toBeNull(); } ); it( 'should not render highlight tooltip when task is visited twice, not completed, but already shown', () => { const { queryByText } = render( ); expect( queryByText( '[HighlightTooltip]' ) ).toBeNull(); } ); } ); } );