import { BaseConfig, OPERATION_REPLACE } from '@/components/Routines/models/BaseConfig';
import { SlotBaseConfigValueField } from '@/components/Routines/widgets/forms/BaseConfigForm';
import { testQueryClient } from "@/tests/queryClient";
import { QueryClientProvider } from "@tanstack/react-query";
import { render, screen, waitFor } from '@testing-library/react';
import userEvent from "@testing-library/user-event";
import React from 'react';
vi.mock('@/core/lib/consts', () => {
return {
DEBOUNCE_ROUTINE_FORMS: '5'
};
});
vi.mock('@/components/Routines/queries', () => ({
useEditWeightConfigQuery: vi.fn(() => ({ mutate: editMutation })),
useAddWeightConfigQuery: vi.fn(() => ({ mutate: addMutation })),
useDeleteWeightConfigQuery: vi.fn(() => ({ mutate: deleteMutation })),
useEditMaxWeightConfigQuery: vi.fn(() => ({ mutate: editMutation })),
useAddMaxWeightConfigQuery: vi.fn(() => ({ mutate: addMutation })),
useDeleteMaxWeightConfigQuery: vi.fn(() => ({ mutate: deleteMutation })),
useEditRepsConfigQuery: vi.fn(() => ({ mutate: editMutation })),
useAddRepsConfigQuery: vi.fn(() => ({ mutate: addMutation })),
useDeleteRepsConfigQuery: vi.fn(() => ({ mutate: deleteMutation })),
useEditMaxRepsConfigQuery: vi.fn(() => ({ mutate: editMutation })),
useAddMaxRepsConfigQuery: vi.fn(() => ({ mutate: addMutation })),
useDeleteMaxRepsConfigQuery: vi.fn(() => ({ mutate: deleteMutation })),
useEditNrOfSetsConfigQuery: vi.fn(() => ({ mutate: editMutation })),
useAddNrOfSetsConfigQuery: vi.fn(() => ({ mutate: addMutation })),
useDeleteNrOfSetsConfigQuery: vi.fn(() => ({ mutate: deleteMutation })),
useEditMaxNrOfSetsConfigQuery: vi.fn(() => ({ mutate: editMutation })),
useAddMaxNrOfSetsConfigQuery: vi.fn(() => ({ mutate: addMutation })),
useDeleteMaxNrOfSetsConfigQuery: vi.fn(() => ({ mutate: deleteMutation })),
useEditRestConfigQuery: vi.fn(() => ({ mutate: editMutation })),
useAddRestConfigQuery: vi.fn(() => ({ mutate: addMutation })),
useDeleteRestConfigQuery: vi.fn(() => ({ mutate: deleteMutation })),
useEditMaxRestConfigQuery: vi.fn(() => ({ mutate: editMutation })),
useAddMaxRestConfigQuery: vi.fn(() => ({ mutate: addMutation })),
useDeleteMaxRestConfigQuery: vi.fn(() => ({ mutate: deleteMutation })),
useEditRiRConfigQuery: vi.fn(() => ({ mutate: editMutation })),
useAddRiRConfigQuery: vi.fn(() => ({ mutate: addMutation })),
useDeleteRiRConfigQuery: vi.fn(() => ({ mutate: deleteMutation })),
useEditMaxRiRConfigQuery: vi.fn(() => ({ mutate: editMutation })),
useAddMaxRiRConfigQuery: vi.fn(() => ({ mutate: addMutation })),
useDeleteMaxRiRConfigQuery: vi.fn(() => ({ mutate: deleteMutation })),
}));
const editMutation = vi.fn();
const addMutation = vi.fn();
const deleteMutation = vi.fn();
describe('EntryDetailsField Component', () => {
const routineId = 1;
const slotEntryId = 2;
beforeEach(() => {
vi.clearAllMocks();
});
afterEach(() => {
vi.restoreAllMocks();
});
const testConfigTypes = ['weight', 'max-weight', 'reps', 'max-reps', 'sets', 'rest', 'max-rest', 'rir'] as const;
testConfigTypes.forEach((type) => {
describe(`for type ${type}`, () => {
test('calls editQuery.mutate with correct data when entry exists', async () => {
const mockConfig = new BaseConfig({
id: 123,
slotEntryId: 10,
iteration: 1,
value: 5,
operation: '+',
step: 'abs',
repeat: false,
requirements: null,
});
const user = userEvent.setup();
render(
);
await user.type(screen.getByTestId(`${type}-field`), '2');
await waitFor(() => expect(editMutation).toHaveBeenCalledTimes(1));
expect(addMutation).toHaveBeenCalledTimes(0);
expect(editMutation).toHaveBeenCalledWith({
id: mockConfig.id,
slot_entry: slotEntryId,
value: 52,
});
expect(deleteMutation).toHaveBeenCalledTimes(0);
});
test('calls addQuery.mutate with correct data when creating a new entry', async () => {
const user = userEvent.setup();
render(
);
await user.type(screen.getByTestId(`${type}-field`), '8');
await waitFor(() => expect(addMutation).toHaveBeenCalledTimes(1));
expect(addMutation).toHaveBeenCalledWith({
slot_entry: 2,
value: 8,
iteration: 1,
operation: OPERATION_REPLACE,
step: 'abs',
requirements: null,
});
expect(editMutation).toHaveBeenCalledTimes(0);
expect(deleteMutation).toHaveBeenCalledTimes(0);
});
test('calls deleteQuery.mutate when value is deleted', async () => {
const user = userEvent.setup();
const mockConfig = new BaseConfig({
id: 123,
slotEntryId: 10,
iteration: 1,
value: 5,
operation: '+',
step: 'abs',
repeat: false,
requirements: null,
});
render(
);
await user.clear(screen.getByTestId(`${type}-field`));
await waitFor(() => expect(deleteMutation).toHaveBeenCalledTimes(1));
expect(addMutation).toHaveBeenCalledTimes(0);
expect(editMutation).toHaveBeenCalledTimes(0);
expect(deleteMutation).toHaveBeenCalledWith(mockConfig.id);
});
});
});
});