diff --git a/tests/unit/components/AddToProjects/NumericFieldInput.test.js b/tests/unit/components/AddToProjects/NumericFieldInput.test.js new file mode 100644 index 000000000..a3cd19493 --- /dev/null +++ b/tests/unit/components/AddToProjects/NumericFieldInput.test.js @@ -0,0 +1,40 @@ +import { screen, userEvent } from "@testing-library/react-native"; +import NumericFieldInput from "components/AddToProjects/FieldInputs/NumericFieldInput"; +import useObservationFieldValue from "components/AddToProjects/hooks/useObservationFieldValue"; +import React from "react"; +import { renderComponent } from "tests/helpers/render"; + +jest.mock( "components/AddToProjects/hooks/useObservationFieldValue" ); + +const actor = userEvent.setup( ); +const mockSetValue = jest.fn( ); + +beforeEach( ( ) => { + mockSetValue.mockClear( ); + useObservationFieldValue.mockImplementation( () => ( { + value: "", + setValue: mockSetValue, + } ) ); +} ); + +describe( "NumericFieldInput", ( ) => { + it( "reads the OFV value from the hook for the given obsFieldId", ( ) => { + renderComponent( ); + + expect( useObservationFieldValue ).toHaveBeenCalledWith( 100 ); + } ); + + it( "renders with placeholder", ( ) => { + renderComponent( ); + + expect( screen.getByPlaceholderText( "Enter a number" ) ).toBeVisible( ); + } ); + + it( "calls setValue with the typed number", async ( ) => { + renderComponent( ); + + await actor.type( screen.getByPlaceholderText( "Enter a number" ), "3" ); + + expect( mockSetValue ).toHaveBeenCalledWith( "3" ); + } ); +} );