main

mattermost/focalboard

Last updated at: 29/12/2023 09:50

addContentMenuItem.test.tsx

TLDR

This file is a test file for the AddContentMenuItem component. It contains test cases for rendering different types of menu items and testing their functionality.

Methods

There are no methods in this file.

Classes

There are no classes in this file.

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import React, {ReactElement, ReactNode} from 'react'
import {render, screen, waitFor} from '@testing-library/react'

import '@testing-library/jest-dom'

import {mocked} from 'jest-mock'

import userEvent from '@testing-library/user-event'

import mutator from '../mutator'

import {TestBlockFactory} from '../test/testBlockFactory'

import {wrapIntl} from '../testUtils'

import AddContentMenuItem from './addContentMenuItem'

import './content/textElement'
import './content/imageElement'
import './content/dividerElement'
import './content/checkboxElement'
import {CardDetailProvider} from './cardDetail/cardDetailContext'

const board = TestBlockFactory.createBoard()
const card = TestBlockFactory.createCard(board)
const wrap = (child: ReactNode): ReactElement => (
    wrapIntl(
        <CardDetailProvider card={card} >
            {child}
        </CardDetailProvider>,
    )
)

jest.mock('../mutator')
const mockedMutator = mocked(mutator, true)

describe('components/addContentMenuItem', () => {
    beforeEach(() => {
        jest.clearAllMocks()
    })
    test('return an image menu item', () => {
        const {container} = render(
            wrap(
                <AddContentMenuItem
                    type={'image'}
                    card={card}
                    cords={{x: 0}}
                />,
            ),
        )
        expect(container).toMatchSnapshot()
    })

    test('return a text menu item', async () => {
        const {container} = render(
            wrap(
                <AddContentMenuItem
                    type={'text'}
                    card={card}
                    cords={{x: 0}}
                />,
            ),
        )
        expect(container).toMatchSnapshot()
        const buttonElement = screen.getByRole('button', {name: 'text'})
        userEvent.click(buttonElement)
        await waitFor(() => expect(mockedMutator.insertBlock).toBeCalled())
    })

    test('return a checkbox menu item', async () => {
        const {container} = render(
            wrap(
                <AddContentMenuItem
                    type={'checkbox'}
                    card={card}
                    cords={{x: 0}}
                />,
            ),
        )
        expect(container).toMatchSnapshot()
        const buttonElement = screen.getByRole('button', {name: 'checkbox'})
        userEvent.click(buttonElement)
        await waitFor(() => expect(mockedMutator.insertBlock).toBeCalled())
    })

    test('return a divider menu item', async () => {
        const {container} = render(
            wrap(
                <AddContentMenuItem
                    type={'divider'}
                    card={card}
                    cords={{x: 0}}
                />,
            ),
        )
        expect(container).toMatchSnapshot()
        const buttonElement = screen.getByRole('button', {name: 'divider'})
        userEvent.click(buttonElement)
        await waitFor(() => expect(mockedMutator.insertBlock).toBeCalled())
    })

    test('return an error and empty element from unknown type', () => {
        const {container} = render(
            wrap(
                <AddContentMenuItem
                    type={'unknown'}
                    card={card}
                    cords={{x: 0}}
                />,
            ),
        )
        expect(container).toMatchSnapshot()
    })
})