From 2dd07809fc0a2a45c1c8649146daef8a7fc3eb48 Mon Sep 17 00:00:00 2001 From: Johannes Klein <17345891+jtklein@users.noreply.github.com> Date: Fri, 11 Sep 2026 23:07:49 +0200 Subject: [PATCH] Unit test to check that POs and OFVs end up in Zustand store --- .../AddToProjects/AddToProjects.test.js | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/tests/unit/components/AddToProjects/AddToProjects.test.js b/tests/unit/components/AddToProjects/AddToProjects.test.js index 283207ca4..7e7352149 100644 --- a/tests/unit/components/AddToProjects/AddToProjects.test.js +++ b/tests/unit/components/AddToProjects/AddToProjects.test.js @@ -1,4 +1,5 @@ import { + fireEvent, screen, userEvent, waitFor, within, } from "@testing-library/react-native"; import AddToProjects from "components/AddToProjects/AddToProjects"; @@ -336,6 +337,43 @@ describe( "AddToProjects", ( ) => { expect( mockGoBack ).not.toHaveBeenCalled( ); } ); + it( "persists PO and required OFV to Zustand on SAVE after selecting a value", async ( ) => { + const requiredObsField = mockProjects[1].projectObservationFields[0].obsField; + const requiredObsFieldId = requiredObsField.id; + const selectedValue = requiredObsField.allowedValues[1]; + + renderAddToProjects( ); + + await actor.press( screen.getByText( mockProjects[1].title ) ); + // Project 0 is already selected in beforeEach, so two pickers are visible + const [, projectOneSelectResponse] = screen.getAllByText( "Select a response" ); + await actor.press( projectOneSelectResponse ); + + const picker = await screen.findByTestId( "ReactNativePicker" ); + fireEvent( picker, "onValueChange", selectedValue ); + fireEvent.press( screen.getByText( "CONFIRM" ) ); + + await actor.press( screen.getByTestId( "AddToProjects.saveButton" ) ); + + expect( + useStore.getState( ).currentObservation?.projectObservations?.map( po => po.projectId ), + ).toEqual( [ + mockProjects[0].id, + mockProjects[1].id, + ] ); + expect( useStore.getState( ).currentObservation?.observationFieldValues ).toEqual( + expect.arrayContaining( [ + expect.objectContaining( { + obsFieldId: requiredObsFieldId, + value: selectedValue, + } ), + ] ), + ); + expect( useStore.getState( ).unsavedChanges ).toBe( true ); + expect( mockGoBack ).toHaveBeenCalled( ); + expect( screen.queryByTestId( "MissingInfoSheet" ) ).toBeNull( ); + } ); + it( "keeps editing when Missing info sheet is dismissed", async ( ) => { renderAddToProjects( );