/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import { fireEvent, render, waitFor } from '@testing-library/react'; import { configure } from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; import React from 'react'; import ReactDOM from 'react-dom'; import { act } from 'react-dom/test-utils'; import { RouteComponentProps } from 'react-router-dom'; import { MOCK_DATA } from '../../../../test/mocks/mockData'; import { coreServicesMock, notificationServiceMock, } from '../../../../test/mocks/serviceMock'; import { CoreServicesContext } from '../../../components/coreServices'; import { ServicesContext } from '../../../services'; import { ChannelDetails } from '../components/details/ChannelDetails'; describe(' spec', () => { configure({ adapter: new Adapter() }); it('renders the component', () => { const props = { match: { params: { id: 'test' } } }; const utils = render( )} /> ); expect(utils.container.firstChild).toMatchSnapshot(); }); it('renders a specific channel', async () => { const props = { match: { params: { id: 'test' } } }; const notificationServiceMock = jest.fn() as any; notificationServiceMock.notificationService = { getChannel: async (id: string) => { return MOCK_DATA.chime; }, }; let container = document.createElement('div'); act(() => { ReactDOM.render( )} /> , container ); }); await waitFor(() => { expect(container).toMatchSnapshot(); }); }); it('handles a non-existing channel', async () => { const props = { match: { params: { id: 'test' } } }; const notificationServiceMock = jest.fn() as any; notificationServiceMock.notificationService = { getChannel: async (id: string) => { throw "non existing channel" }, }; let container = document.createElement('div'); act(() => { ReactDOM.render( )} /> , container ); }); await waitFor(() => { expect(container).toMatchSnapshot(); }); }); it('clicks mute button with channel', async () => { const props = { match: { params: { id: 'test' } } }; const notificationServiceMock = jest.fn() as any; notificationServiceMock.notificationService = { getChannel: async (id: string) => { return MOCK_DATA.chime; }, updateConfig: jest.fn(), }; const utils = render( )} /> ); await waitFor(() => { utils.getByTestId('channel-details-mute-button').click(); }); }); it('clicks unmute button with channel', async () => { const props = { match: { params: { id: 'test' } } }; const notificationServiceMock = jest.fn() as any; const updateConfig = jest.fn(async () => Promise.resolve()); notificationServiceMock.notificationService = { getChannel: async (id: string) => { return MOCK_DATA.slack; }, updateConfig, }; const utils = render( )} /> ); await waitFor(() => { utils.getByTestId('channel-details-mute-button').click(); }); }); });