import { EditExerciseEquipment } from "@/components/Exercises/forms/Equipment";
import { useEditExerciseQuery, useEquipmentQuery } from "@/components/Exercises/queries";
import { useProfileQuery } from "@/components/User";
import { testEquipment } from "@/tests/exerciseTestdata";
import { testProfileDataVerified } from "@/tests/userTestdata";
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/User/queries/profile");
vi.mock("@/components/Exercises/queries");
describe("Test the edit widget to live edit the equipment", () => {
let editMutateMock: Mock;
beforeEach(() => {
editMutateMock = vi.fn();
(useEquipmentQuery as Mock).mockImplementation(() => (
{ isSuccess: true, data: testEquipment }
));
(useProfileQuery as Mock).mockImplementation(() => (
{ isSuccess: true, data: testProfileDataVerified }
));
(useEditExerciseQuery as Mock).mockImplementation(() => ({ mutateAsync: editMutateMock }));
});
test('Clicking on the equipment immediately fires the request', async () => {
// Arrange
const user = userEvent.setup();
// Act
render(
);
// Assert
const barbell = await screen.findByText(/Barbell/i);
expect(barbell).toBeInTheDocument();
const dumbbell = await screen.findByText(/Dumbbell/i);
expect(dumbbell).toBeInTheDocument();
const textbox = screen.getByRole('combobox', {
name: /equipment/i
});
await user.click(textbox);
const rocks = await screen.findByText(/rocks/i);
await user.click(rocks);
expect(editMutateMock).toHaveBeenCalledWith({
id: 100,
data: { equipment: [1, 2, 42], license_author: "admin" },
});
});
test('Clicking on an existing equipment, removes it', async () => {
// Arrange
const user = userEvent.setup();
// Act
render(
);
// Assert
const textbox = screen.getByRole('combobox', {
name: /equipment/i
});
await user.click(textbox);
const rocks = screen.getByRole('option', { name: /dumbbell/i });
await user.click(rocks);
expect(editMutateMock).toHaveBeenCalledWith({
id: 100,
data: { equipment: [1], license_author: "admin" },
});
});
});