// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import React from 'react' import {Provider as ReduxProvider} from 'react-redux' import {createMemoryHistory} from 'history' import {render, act} from '@testing-library/react' import userEvent from '@testing-library/user-event' import configureStore from 'redux-mock-store' import {mocked} from 'jest-mock' import {wrapIntl} from '../../testUtils' import TelemetryClient, {TelemetryCategory, TelemetryActions} from '../../telemetry/telemetryClient' import client from '../../octoClient' import GlobalHeaderSettingsMenu from './globalHeaderSettingsMenu' jest.mock('../../telemetry/telemetryClient') jest.mock('../../octoClient') const mockedTelemetry = mocked(TelemetryClient, true) const mockedOctoClient = mocked(client, true) describe('components/sidebar/GlobalHeaderSettingsMenu', () => { const mockStore = configureStore([]) const history = createMemoryHistory() let store = mockStore({}) beforeEach(() => { store = mockStore({ teams: { current: {id: 'team_id_1'}, }, boards: { current: 'board_id', boards: { board_id: {id: 'board_id'}, }, myBoardMemberships: { board_id: {userId: 'user_id_1', schemeAdmin: true}, }, }, users: { me: { id: 'user-id', }, }, }) }) test('settings menu closed should match snapshot', () => { const component = wrapIntl( , ) const {container} = render(component) expect(container).toMatchSnapshot() }) test('settings menu open should match snapshot', () => { const component = wrapIntl( , ) const {container} = render(component) userEvent.click(container.querySelector('.menu-entry') as Element) expect(container).toMatchSnapshot() }) test('languages menu open should match snapshot', () => { const component = wrapIntl( , ) const {container} = render(component) act(() => { userEvent.click(container.querySelector('.menu-entry') as Element) }) act(() => { userEvent.hover(container.querySelector('#lang') as Element) }) expect(container).toMatchSnapshot() }) test('imports menu open should match snapshot', () => { window.open = jest.fn() const component = wrapIntl( , ) const {container} = render(component) act(() => { userEvent.click(container.querySelector('.menu-entry') as Element) }) act(() => { userEvent.hover(container.querySelector('#import') as Element) }) expect(container).toMatchSnapshot() userEvent.click(container.querySelector('[aria-label="Asana"]') as Element) expect(mockedTelemetry.trackEvent).toBeCalledWith(TelemetryCategory, TelemetryActions.ImportAsana) }) test('Product Tour option restarts the tour', () => { const component = wrapIntl( , ) const {container} = render(component) act(() => { userEvent.click(container.querySelector('.menu-entry') as Element) }) act(() => { userEvent.click(container.querySelector('.product-tour') as Element) }) expect(mockedOctoClient.patchUserConfig).toBeCalledWith('user-id', { updatedFields: { onboardingTourStarted: '1', onboardingTourStep: '0', tourCategory: 'onboarding', }, }) }) })