From 773ece19a01ce0329c88270dab205976b5a24e99 Mon Sep 17 00:00:00 2001 From: Niloofar Sadeghi <93518187+niloofar-deriv@users.noreply.github.com> Date: Mon, 9 Jan 2023 15:15:19 +0330 Subject: [PATCH] Niloofar Sadeghi / Refactor tests in the network-status.spec.tsx file (#7230) * test: writting test for network-status component * refactor: improve namings * refactor: improve tests * build: remove extra packages from core Co-authored-by: Niloofar Sadeghi --- .../src/components/popover/popover.tsx | 1 + .../Footer/__tests__/network-status.spec.tsx | 90 +++++++++---------- .../Layout/Footer/network-status.jsx | 3 +- 3 files changed, 44 insertions(+), 50 deletions(-) diff --git a/packages/components/src/components/popover/popover.tsx b/packages/components/src/components/popover/popover.tsx index b175ec643413..eab1a0a1737a 100644 --- a/packages/components/src/components/popover/popover.tsx +++ b/packages/components/src/components/popover/popover.tsx @@ -61,6 +61,7 @@ const Popover = ({ ref={hover_ref as RefObject} className={classNames({ 'dc-popover__wrapper': relative_render })} onClick={onClick} + data-testid='dt_popover_wrapper' > {relative_render && (
diff --git a/packages/core/src/App/Components/Layout/Footer/__tests__/network-status.spec.tsx b/packages/core/src/App/Components/Layout/Footer/__tests__/network-status.spec.tsx index d10b18e9a637..c1bfcf1984f2 100644 --- a/packages/core/src/App/Components/Layout/Footer/__tests__/network-status.spec.tsx +++ b/packages/core/src/App/Components/Layout/Footer/__tests__/network-status.spec.tsx @@ -1,56 +1,48 @@ -// TODO refactor old tests in this component import React from 'react'; -import { Popover } from '@deriv/components'; -import { NetworkStatus } from '../network-status.jsx'; +import userEvent from '@testing-library/user-event'; import { render, screen } from '@testing-library/react'; +import { NetworkStatus } from '../network-status.jsx'; + +const MockNetworkStatus = ({ is_mobile = true }) => ( + +); + +describe('network-status component', () => { + it('should has "network-status__wrapper--is-mobile" class when the "is_mobile" property is true', () => { + render(); + const div_element = screen.getByTestId('dt_network_status'); + expect(div_element).toHaveClass('network-status__wrapper--is-mobile'); + }); -const status = { - class: 'online', - tooltip: 'Online', -}; + it('should has correct class based on class passed in the "status" property', () => { + const { rerender } = render(); + expect(screen.getByTestId('dt_network_status_element')).toHaveClass('network-status__circle--offline'); -describe('NetworkStatus Component', () => { - it('should has "network-status__wrapper--is-mobile" class when the "is_mobile" is true', () => { - render(); - const divElement = screen.getByTestId('dt_network_status_id'); - expect(divElement).toHaveClass('network-status__wrapper--is-mobile'); + rerender(); + expect(screen.getByTestId('dt_network_status_element')).toHaveClass('network-status__circle--online'); + + rerender(); + expect(screen.getByTestId('dt_network_status_element')).toHaveClass('network-status__circle--blinker'); + }); + + it('should contain "Popover" with default message when "status.tooltip" is empty', () => { + render(); + const popover_wrapper = screen.getByTestId('dt_popover_wrapper'); + userEvent.hover(popover_wrapper); + const network_status = screen.getByText(/connecting to server/i); + expect(network_status).toBeInTheDocument(); }); - // it('should render one component', () => { - // const wrapper = shallow(); - // expect(wrapper).toHaveLength(1); - // }); - // it('should have correct class based on class passed in status', () => { - // const wrapper = shallow(); - // expect(wrapper.find('.network-status__circle--online').exists()).toBe(true); - // wrapper.setProps({ status: { class: 'offline' } }); - // expect(wrapper.find('.network-status__circle--offline').exists()).toBe(true); - // wrapper.setProps({ status: { class: 'blinker' } }); - // expect(wrapper.find('.network-status__circle--blinker').exists()).toBe(true); - // }); - // it('should contain Tooltip message passed in status', () => { - // const wrapper = shallow(); - // expect( - // wrapper.contains( - // - //
- // - // ) - // ).toBe(true); - // }); - // it('should contain Popover with default message and div with only default class if status does not contain them', () => { - // status = {}; - // const wrapper = shallow(); - // expect( - // wrapper.contains( - // - //
- // - // ) - // ).toBe(true); - // }); + it('should contain "Tooltip" message passed in the status property', () => { + const status = { + class: 'online', + tooltip: 'Online', + }; + + render(); + const popover_wrapper = screen.getByTestId('dt_popover_wrapper'); + userEvent.hover(popover_wrapper); + const network_status = screen.getByText(/online/i); + expect(network_status).toBeInTheDocument(); + }); }); diff --git a/packages/core/src/App/Components/Layout/Footer/network-status.jsx b/packages/core/src/App/Components/Layout/Footer/network-status.jsx index 369286c5dc53..9d6f844288b7 100644 --- a/packages/core/src/App/Components/Layout/Footer/network-status.jsx +++ b/packages/core/src/App/Components/Layout/Footer/network-status.jsx @@ -8,6 +8,7 @@ import { connect } from 'Stores/connect'; const NetworkStatus = ({ is_mobile, status }) => { const network_status_element = (
{ ); return (
{is_mobile ? ( network_status_element