import { EditExerciseMuscle } from "@/components/Exercises/forms/Muscle";
import { useEditExerciseQuery, useMusclesQuery } from "@/components/Exercises/queries";
import { testMuscles } from "@/tests/exerciseTestdata";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import React from "react";
import type { Mock } from "vitest";
vi.mock("@/components/Exercises/queries");
describe("Test the widget to live edit the muscles", () => {
let editMutateMock: Mock;
beforeEach(() => {
editMutateMock = vi.fn();
(useMusclesQuery as Mock).mockImplementation(() => ({ isSuccess: true, data: testMuscles }));
(useEditExerciseQuery as Mock).mockImplementation(() => ({ mutateAsync: editMutateMock }));
});
test('Clicking on a muscle immediately fires the request', async () => {
// Arrange
const user = userEvent.setup();
// Act
render(
);
// Assert
expect(await screen.findByText(/biggus/i)).toBeInTheDocument();
expect(await screen.findByText(/dacttilaris/i)).toBeInTheDocument();
await user.click(screen.getByRole('combobox', { name: /exercises\.muscles/i }));
const shoulders = await screen.findByText(/shoulders/i);
await user.click(shoulders);
expect(editMutateMock).toHaveBeenCalledWith({
id: 100,
data: { "muscles": [1, 2, 3] },
});
});
test('Correctly sets secondary muscles', async () => {
// Arrange
const user = userEvent.setup();
// Act
render(
);
// Assert
expect(await screen.findByText(/biggus/i)).toBeInTheDocument();
expect(await screen.findByText(/dacttilaris/i)).toBeInTheDocument();
await user.click(screen.getByRole('combobox', { name: /exercises\.secondarymuscles/i }));
const shoulders = await screen.findByText(/shoulders/i);
await user.click(shoulders);
expect(editMutateMock).toHaveBeenCalledWith({
id: 1234,
data: { muscles_secondary: [1, 2, 3] },
});
});
});