import React from 'react'; import { fireEvent } from '@testing-library/react-native'; import { render } from '@/components/testUtils'; import NumberSelector from '@/components/shared/NumberSelector'; const renderComponent = ({ reps = 5, setReps = jest.fn() } = {}) => { const base = render( ); return base; }; describe('[Component] NumberSelect', () => { test('renders correctly', () => { const component = renderComponent(); expect(component).toMatchSnapshot(); }); test('renders the correct initial reps value', () => { const { getByText } = renderComponent() expect(getByText('5')).toBeTruthy(); }); test('increments reps when "+" is pressed', () => { const setRepsMock = jest.fn(); const { getByText } = renderComponent({ setReps: setRepsMock }); fireEvent.press(getByText('+')); expect(setRepsMock).toHaveBeenCalledWith(6); }); test('decrements reps when "-" is pressed', () => { const setRepsMock = jest.fn(); const { getByText } = renderComponent({ setReps: setRepsMock }); fireEvent.press(getByText('-')); expect(setRepsMock).toHaveBeenCalledWith(4); }); test('does not decrement reps below 0', () => { const setRepsMock = jest.fn(); const { getByText } = renderComponent({ reps: 0, setReps: setRepsMock }); fireEvent.press(getByText('-')); expect(setRepsMock).not.toHaveBeenCalled(); }); test('displays the reps correctly after increment and decrement', () => { let repsValue = 5; const setRepsMock = jest.fn((newReps) => { repsValue = newReps; }); const { getByText, rerender } = renderComponent({ reps: repsValue, setReps: setRepsMock }); fireEvent.press(getByText('+')); rerender(); expect(getByText('6')).toBeTruthy(); fireEvent.press(getByText('-')); rerender(); expect(getByText('5')).toBeTruthy(); }); });