From 5ed05253e942442bdbf9b183eb1648d1a2679752 Mon Sep 17 00:00:00 2001 From: Daniel B Date: Wed, 1 Oct 2025 13:27:13 +0200 Subject: [PATCH] implement stepper tests --- __tests__/components/stepper/stepper.test.tsx | 95 ++++++++++++++++++- 1 file changed, 90 insertions(+), 5 deletions(-) diff --git a/__tests__/components/stepper/stepper.test.tsx b/__tests__/components/stepper/stepper.test.tsx index 9a9c705..5864a25 100644 --- a/__tests__/components/stepper/stepper.test.tsx +++ b/__tests__/components/stepper/stepper.test.tsx @@ -1,6 +1,91 @@ -// TODO: Implement your tests here -describe("Stepper", () => { - it("TODO", () => { - expect(true).toBe(false); - }); +import React from "react"; +import { render, screen, fireEvent } from "@testing-library/react"; +import "@testing-library/jest-dom"; +import Stepper from "../../../components/stepper/stepper"; +import { steps } from "../../../components/stepper/steps"; + +describe("Stepper Component", () => { + const mockOnStepClick = jest.fn(); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("renders all steps correctly", () => { + render(); + + steps.forEach((step) => { + expect(screen.getByText(step.label)).toBeInTheDocument(); + expect(screen.getByText(step.id.toString())).toBeInTheDocument(); + }); + }); + + it("renders connector lines between steps", () => { + const { container } = render( + + ); + + const connectors = container.querySelectorAll(".h-1, .lg\\:h-1\\.5"); + expect(connectors).toHaveLength(steps.length - 1); + }); + + it("styles completed connector lines with blue color", () => { + const { container } = render( + + ); + + const connectors = container.querySelectorAll(".h-1, .lg\\:h-1\\.5"); + expect(connectors[0]).toHaveClass("bg-blue-500"); + expect(connectors[1]).toHaveClass("bg-blue-500"); + }); + + it("styles upcoming connector lines with gray color", () => { + const { container } = render( + + ); + + const connectors = container.querySelectorAll(".h-1, .lg\\:h-1\\.5"); + expect(connectors[1]).toHaveClass("bg-gray-200"); + }); + + it("applies correct text colors to labels", () => { + render(); + + const step1Label = screen.getByText("Service"); + const step2Label = screen.getByText("Termin"); + const step3Label = screen.getByText("Fahrzeug"); + + expect(step1Label).toHaveClass("text-gray-700"); + expect(step2Label).toHaveClass("text-gray-700"); + expect(step3Label).toHaveClass("text-gray-500"); + }); + + it("renders correct number of steps", () => { + const { container } = render( + + ); + const stepButtons = container.querySelectorAll( + 'button[aria-label^="Step"]' + ); + expect(stepButtons).toHaveLength(steps.length); + }); + + it("updates when currentStep prop changes", () => { + const { rerender } = render( + + ); + + let step1Button = screen.getByLabelText("Step 1: Service"); + expect(step1Button).toHaveClass("bg-blue-500"); + + rerender(); + + step1Button = screen.getByLabelText("Step 1: Service"); + const step2Button = screen.getByLabelText("Step 2: Termin"); + const step3Button = screen.getByLabelText("Step 3: Fahrzeug"); + + expect(step1Button).toHaveClass("bg-blue-500"); + expect(step2Button).toHaveClass("bg-blue-500"); + expect(step3Button).toHaveClass("bg-blue-500"); + }); });