import { QueryClientProvider } from "@tanstack/react-query";
import { render, screen, waitFor } from '@testing-library/react';
import { RoutineDetail } from "@/components/Routines/screens/Detail/RoutineDetail";
import React from "react";
import { MemoryRouter, Route, Routes } from "react-router-dom";
import { getLanguages } from "@/components/Exercises/api/language";
import { getRoutine } from "@/components/Routines/api/routine";
import { testLanguages } from "@/tests/exerciseTestdata";
import { getTestQueryClient } from "@/tests/queryClient";
import { testPrivateTemplate1, testRoutine1 } from "@/tests/workoutRoutinesTestData";
import type { Mock } from 'vitest';
vi.mock("@/components/Exercises/api/language");
vi.mock("@/components/Routines/api/routine");
describe("Smoke tests the RoutineDetail component", () => {
beforeEach(() => {
(getRoutine as Mock).mockResolvedValue(testRoutine1);
(getLanguages as Mock).mockResolvedValue(testLanguages);
});
test('renders the detail page', async () => {
// Act
render(
} />
);
// Assert
await waitFor(() => {
expect(getRoutine).toHaveBeenCalledWith(101);
expect(getLanguages).toHaveBeenCalledTimes(1);
});
await waitFor(() => {
expect(screen.getByText('Test routine 1')).toBeInTheDocument();
});
expect(screen.queryByText('routines.template')).not.toBeInTheDocument();
expect(screen.getByText('Full body routine')).toBeInTheDocument();
expect(screen.getByText('Every day is leg day 🦵🏻')).toBeInTheDocument();
expect(screen.getByText('Squats')).toBeInTheDocument();
expect(screen.getByText('4 Sets, 5 x 20 @ 2Rir')).toBeInTheDocument();
});
test('renders chip for templates', async () => {
(getRoutine as Mock).mockResolvedValue(testPrivateTemplate1);
// Act
render(
} />
);
// Assert
await waitFor(() => {
expect(getRoutine).toHaveBeenCalled();
});
await waitFor(() => {
expect(screen.getByText('routines.template')).toBeInTheDocument();
});
});
});