/* 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: [ Slide 1, Slide 2, Slide 3, Slide 4, Slide 5 ], 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() }) })