/* eslint-disable max-lines-per-function */
import { fireEvent, render, screen } from "tests"
import Carousel from "./Carousel"
import { ComponentProps } from "."
describe("Carousel", () => {
const props: ComponentProps = {
children: [
,
,
,
,
],
onNext: jest.fn(),
onPrev: jest.fn(),
onTouchEnd: jest.fn(),
onTouchMove: jest.fn(),
onTouchStart: jest.fn(),
slidesToShow: 3,
translateX: 0
}
it("renders with default slides", () => {
render()
expect(screen.getByRole("button", { name: "Prev" })).toBeInTheDocument()
expect(screen.getByRole("button", { name: "Next" })).toBeInTheDocument()
})
it("renders with slides", () => {
render()
expect(screen.getByRole("img", { name: "Slide 1" })).toBeInTheDocument()
expect(screen.getByRole("img", { name: "Slide 2" })).toBeInTheDocument()
expect(screen.getByRole("img", { name: "Slide 3" })).toBeInTheDocument()
})
it("triggers next slide on click", () => {
render()
const nextButton = screen.getByRole("button", { name: "Next" })
fireEvent.click(nextButton)
expect(screen.getByRole("img", { name: "Slide 4" })).toBeInTheDocument()
})
it("triggers prev slide on click", () => {
render()
const nextButton = screen.getByRole("button", { name: "Next" })
fireEvent.click(nextButton)
const prevButton = screen.getByRole("button", { name: "Prev" })
fireEvent.click(prevButton)
expect(screen.getByRole("img", { name: "Slide 1" })).toBeInTheDocument()
})
it("renders with swipe gestures", () => {
render()
const carousel = screen.getByRole("region")
fireEvent.touchStart(carousel, { touches: [{ clientX: 100 }] })
fireEvent.touchMove(carousel, { touches: [{ clientX: 200 }] })
fireEvent.touchEnd(carousel)
expect(screen.getByRole("img", { name: "Slide 4" })).toBeInTheDocument()
})
})