import React from 'react' import { render, fireEvent, getByText } from '@testing-library/react' import '@testing-library/jest-dom' import { CCarousel, CCarouselCaption, CCarouselItem } from '../index' test('loads and displays CCarousel component', async () => { const { container } = render( Item-1 Caption-1 Item-2 Caption-2 Item-3 Caption-3 ) const carousel = document.querySelector('.carousel') expect(carousel).toHaveClass('slide') if (carousel === null) { expect(true).toBe(false) } else { expect(carousel.children[0]).toHaveClass('carousel-indicators') expect(carousel.children[1]).toHaveClass('carousel-inner') } let caption = getByText(container, 'Caption-1') expect(caption).toHaveClass('carousel-caption') caption = getByText(container, 'Caption-2') expect(caption).toHaveClass('carousel-caption') caption = getByText(container, 'Caption-3') expect(caption).toHaveClass('carousel-caption') let item = getByText(container, 'Item-1') expect(item).toHaveClass('carousel-item') item = getByText(container, 'Item-2') expect(item).toHaveClass('carousel-item') item = getByText(container, 'Item-3') expect(item).toHaveClass('carousel-item') let button = document.querySelector('.carousel-control-next') if (button === null) { expect(true).toBe(false) } else { expect(button.firstChild).toHaveClass('carousel-control-next-icon') } button = document.querySelector('.carousel-control-prev') if (button === null) { expect(true).toBe(false) } else { expect(button.firstChild).toHaveClass('carousel-control-prev-icon') } expect(container).toMatchSnapshot() }) test('CCarousel click on indicator', async () => { const { container } = render( Item-1 Caption-1 Item-2 Caption-2 Item-3 Caption-3 ) const item1 = getByText(container, 'Item-1') const item2 = getByText(container, 'Item-2') expect(item1).toHaveClass('active') expect(item1).toHaveClass('carousel-item') expect(item2).not.toHaveClass('active') expect(item2).toHaveClass('carousel-item') // click const ci = document.querySelector('.carousel-indicators') ci && fireEvent.click(ci.children[1]) fireEvent.transitionEnd(item1) fireEvent.transitionEnd(item2) expect(item1).not.toHaveClass('active') expect(item2).toHaveClass('active') // goback-click ci && fireEvent.click(ci.children[0]) fireEvent.transitionEnd(item1) fireEvent.transitionEnd(item2) expect(item1).toHaveClass('active') expect(item2).not.toHaveClass('active') }) test('CCarousel click on button', async () => { jest.useFakeTimers() const { container } = render( Item-1 Caption-1 Item-2 Caption-2 Item-3 Caption-3 ) const item1 = getByText(container, 'Item-1') const item2 = getByText(container, 'Item-2') expect(item1).toHaveClass('active') expect(item1).toHaveClass('carousel-item') expect(item2).not.toHaveClass('active') expect(item2).toHaveClass('carousel-item') // click const buttonNext = document.querySelector('.carousel-control-next') buttonNext && fireEvent.click(buttonNext) fireEvent.transitionEnd(item1) fireEvent.transitionEnd(item2) expect(item1).not.toHaveClass('active') expect(item2).toHaveClass('active') // goback-click const buttonPrev = document.querySelector('.carousel-control-prev') buttonPrev && fireEvent.click(buttonPrev) fireEvent.transitionEnd(item1) fireEvent.transitionEnd(item2) expect(item1).toHaveClass('active') expect(item2).not.toHaveClass('active') })