import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { Step2Variations } from "@/components/Exercises/screens/Add/Step2Variations"; import { useExercisesQuery } from "@/components/Exercises/queries"; import React from "react"; import { ExerciseSubmissionStateProvider } from "@/components/Exercises/screens/Add/state"; import { testExerciseBenchPress, testExerciseCrunches, testExerciseCurls } from "@/tests/exerciseTestdata"; import type { Mock } from 'vitest'; vi.mock('@/components/Exercises/queries'); const mockedUseExercisesQuery = useExercisesQuery as Mock; const mockOnContinue = vi.fn(); const queryClient = new QueryClient(); describe("Test the add exercise step 2 component", () => { beforeEach(() => { mockedUseExercisesQuery.mockImplementation(() => ({ isLoading: false, isSuccess: true, data: [ testExerciseBenchPress, testExerciseCurls, testExerciseCrunches ] })); }); afterEach(() => { vi.clearAllMocks(); }); test("Renders without crashing", () => { // Act render( ); // Assert expect(screen.getByText("exercises.whatVariationsExist")).toBeInTheDocument(); expect(screen.getByText("exercises.filterVariations")).toBeInTheDocument(); expect(screen.getByText("exercises.identicalExercisePleaseDiscard")).toBeInTheDocument(); expect(screen.getByText("Benchpress")).toBeInTheDocument(); expect(screen.getByText("Curls")).toBeInTheDocument(); expect(screen.getByText("Crunches")).toBeInTheDocument(); }); test("Correctly sets the variation ID", async () => { // Act render( ); const benchPress = screen.getByText("Benchpress"); await userEvent.click(benchPress); // Assert //... }); test("Correctly unsets the variation ID", async () => { // Arrange const user = userEvent.setup(); // Act render( ); const benchpress = screen.getByText("Benchpress"); await user.click(benchpress); await user.click(benchpress); // Assert }); test("Correctly sets the newVariationExerciseId ID", async () => { // Arrange const user = userEvent.setup(); // Act render( ); const crunches = screen.getByText("Crunches"); await user.click(crunches); // Assert }); test("Correctly unsets the newVariationExerciseId ID", async () => { // Arrange const user = userEvent.setup(); // Act render( ); const crunches = screen.getByText("Crunches"); await user.click(crunches); await user.click(crunches); // Assert }); test("can correctly filter the exercises", async () => { // Arrange const user = userEvent.setup(); // Act render( ); const input = screen.getByRole('textbox', { name: /name/i }); // Assert expect(screen.getByText("Benchpress")).toBeInTheDocument(); expect(screen.getByText("Curls")).toBeInTheDocument(); expect(screen.getByText("Crunches")).toBeInTheDocument(); await user.type(input, 'cru'); expect(screen.queryByText("Benchpress")).not.toBeInTheDocument(); expect(screen.queryByText("Curls")).not.toBeInTheDocument(); expect(screen.getByText("Crunches")).toBeInTheDocument(); await user.clear(input); await user.type(input, 'Bench'); expect(screen.getByText("Benchpress")).toBeInTheDocument(); expect(screen.queryByText("Curls")).not.toBeInTheDocument(); expect(screen.queryByText("Crunches")).not.toBeInTheDocument(); }); });