73 lines
2.0 KiB
JavaScript
73 lines
2.0 KiB
JavaScript
|
|
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(
|
||
|
|
<NumberSelector reps={reps} setReps={setReps} />
|
||
|
|
);
|
||
|
|
|
||
|
|
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(<NumberSelector reps={repsValue} setReps={setRepsMock} />);
|
||
|
|
|
||
|
|
expect(getByText('6')).toBeTruthy();
|
||
|
|
|
||
|
|
fireEvent.press(getByText('-'));
|
||
|
|
rerender(<NumberSelector reps={repsValue} setReps={setRepsMock} />);
|
||
|
|
|
||
|
|
expect(getByText('5')).toBeTruthy();
|
||
|
|
});
|
||
|
|
});
|