main

mattermost/focalboard

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

boardSelectorItem.test.tsx

TLDR

This file contains the unit tests for the BoardSelectorItem component. It tests the rendering and the behavior of the component in different scenarios.

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 from 'react'
import {render, screen} from '@testing-library/react'

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

import {createBoard} from '../../../../webapp/src/blocks/board'
import {wrapIntl} from '../../../../webapp/src/testUtils'

import BoardSelectorItem from './boardSelectorItem'

describe('components/boardSelectorItem', () => {
    it('renders board without title', async () => {
        const board = createBoard()
        board.title = ""

        const {container} = render(wrapIntl(
            <BoardSelectorItem
                item={board}
                currentChannel={board.channelId || ''}
                linkBoard={jest.fn()}
                unlinkBoard={jest.fn()}
            />,
        ))
        expect(container).toMatchSnapshot()
    })

    it('renders linked board', async () => {
        const board = createBoard()
        board.title = "Test title"

        const {container} = render(wrapIntl(
            <BoardSelectorItem
                item={board}
                currentChannel={board.channelId || ''}
                linkBoard={jest.fn()}
                unlinkBoard={jest.fn()}
            />,
        ))
        expect(container).toMatchSnapshot()
    })

    it('renders not linked board', async () => {
        const board = createBoard()
        board.title = "Test title"

        const {container} = render(wrapIntl(
            <BoardSelectorItem
                item={board}
                currentChannel={'other-channel'}
                linkBoard={jest.fn()}
                unlinkBoard={jest.fn()}
            />,
        ))
        expect(container).toMatchSnapshot()
    })

    it('call handler on link', async () => {
        const board = createBoard()

        const linkBoard = jest.fn()
        const unlinkBoard = jest.fn()

        render(wrapIntl(
            <BoardSelectorItem
                item={board}
                currentChannel={'other-channel'}
                linkBoard={linkBoard}
                unlinkBoard={unlinkBoard}
            />,
        ))

        const buttonElement = screen.getByRole('button')
        await userEvent.click(buttonElement)
        expect(linkBoard).toBeCalledWith(board)
        expect(unlinkBoard).not.toBeCalled()
    })

    it('call handler on unlink', async () => {
        const board = createBoard()

        const linkBoard = jest.fn()
        const unlinkBoard = jest.fn()

        render(wrapIntl(
            <BoardSelectorItem
                item={board}
                currentChannel={board.channelId || ''}
                linkBoard={linkBoard}
                unlinkBoard={unlinkBoard}
            />,
        ))

        const buttonElement = screen.getByRole('button')
        await userEvent.click(buttonElement)
        expect(unlinkBoard).toBeCalledWith(board)
        expect(linkBoard).not.toBeCalled()
    })
})