From 512bfbfe77128b8936b1caec30fb08048b4a24f0 Mon Sep 17 00:00:00 2001 From: Johannes Klein <17345891+jtklein@users.noreply.github.com> Date: Tue, 7 Jul 2026 15:23:46 +0200 Subject: [PATCH] Create SelectFieldInput.test.js --- .../AddToProjects/SelectFieldInput.test.js | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 tests/unit/components/AddToProjects/SelectFieldInput.test.js diff --git a/tests/unit/components/AddToProjects/SelectFieldInput.test.js b/tests/unit/components/AddToProjects/SelectFieldInput.test.js new file mode 100644 index 000000000..7b441d536 --- /dev/null +++ b/tests/unit/components/AddToProjects/SelectFieldInput.test.js @@ -0,0 +1,66 @@ +import { screen, userEvent } from "@testing-library/react-native"; +import SelectFieldInput from "components/AddToProjects/FieldInputs/SelectFieldInput"; +import useObservationFieldValue from "components/AddToProjects/hooks/useObservationFieldValue"; +import React from "react"; +import { Pressable as MockPressable } from "react-native"; +import factory from "tests/factory"; +import { renderComponent } from "tests/helpers/render"; + +jest.mock( "components/AddToProjects/hooks/useObservationFieldValue" ); + +jest.mock( "components/SharedComponents/Sheets/PickerSheet", () => function ( { confirm } ) { + return ( + confirm( "Red" )} + /> + ); +} ); + +const actor = userEvent.setup( ); +const mockSetValue = jest.fn( ); + +beforeEach( ( ) => { + mockSetValue.mockClear( ); + useObservationFieldValue.mockImplementation( () => ( { + value: "", + setValue: mockSetValue, + } ) ); +} ); + +const mockOF = factory( "LocalObservationField" ); + +describe( "SelectFieldInput", ( ) => { + it( "reads the OFV value from the hook for the given obsFieldId", ( ) => { + renderComponent( ); + + expect( useObservationFieldValue ).toHaveBeenCalledWith( mockOF.id ); + } ); + + it( "shows placeholder when no value is selected", ( ) => { + renderComponent( ); + + expect( screen.getByText( "Select a response" ) ).toBeVisible( ); + } ); + + it( "displays the selected value from the hook", ( ) => { + useObservationFieldValue.mockImplementation( () => ( { + value: "Red", + setValue: mockSetValue, + } ) ); + + renderComponent( ); + + expect( screen.getByText( "Red" ) ).toBeVisible( ); + } ); + + it( "calls setValue with the confirmed selection", async ( ) => { + renderComponent( ); + + await actor.press( screen.getByText( "Select a response" ) ); + await actor.press( screen.getByTestId( "mock-picker-confirm" ) ); + + expect( mockSetValue ).toHaveBeenCalledWith( "Red" ); + } ); +} );