11import { write } from '@libs/API' ;
22import { WRITE_COMMANDS } from '@libs/API/types' ;
33import { createAgent } from '@userActions/Agent' ;
4+ import CONST from '@src/CONST' ;
45import ONYXKEYS from '@src/ONYXKEYS' ;
56import type { AnyOnyxUpdate } from '@src/types/onyx/Request' ;
67
@@ -83,36 +84,20 @@ describe('createAgent', () => {
8384 const accountID = getOptimisticAccountID ( optimisticData ) ;
8485 const promptUpdate = optimisticData . find ( ( u ) => u . key === `${ ONYXKEYS . COLLECTION . SHARED_NVP_AGENT_PROMPT } ${ accountID } ` ) ;
8586
86- expect ( promptUpdate ?. value ) . toEqual ( { prompt : 'My prompt' } ) ;
87- } ) ;
88-
89- it ( 'optimistic data sets form isLoading and clears errors' , ( ) => {
90- createAgent ( 'Bot' , 'My prompt' ) ;
91-
92- const { optimisticData} = getWriteOptions ( ) ;
93- const formUpdate = optimisticData . find ( ( u ) => u . key === ONYXKEYS . FORMS . ADD_AGENT_FORM ) ;
94-
95- expect ( formUpdate ?. value ) . toMatchObject ( { isLoading : true , errors : null } ) ;
96- } ) ;
97-
98- it ( 'success data clears form isLoading' , ( ) => {
99- createAgent ( 'Bot' , 'My prompt' ) ;
100-
101- const { successData} = getWriteOptions ( ) ;
102- const formUpdate = successData . find ( ( u ) => u . key === ONYXKEYS . FORMS . ADD_AGENT_FORM ) ;
103-
104- expect ( formUpdate ?. value ) . toMatchObject ( { isLoading : false } ) ;
87+ expect ( promptUpdate ?. value ) . toEqual ( {
88+ prompt : 'My prompt' ,
89+ pendingAction : CONST . RED_BRICK_ROAD_PENDING_ACTION . ADD ,
90+ } ) ;
10591 } ) ;
10692
107- it ( 'failure data sets form error and clears isLoading ' , ( ) => {
93+ it ( 'does not merge ADD_AGENT_FORM (navigation handles UX after submit) ' , ( ) => {
10894 createAgent ( 'Bot' , 'My prompt' ) ;
10995
110- const { failureData} = getWriteOptions ( ) ;
111- const formUpdate = failureData . find ( ( u ) => u . key === ONYXKEYS . FORMS . ADD_AGENT_FORM ) ;
112- const value = formUpdate ?. value as Record < string , unknown > | undefined ;
96+ const { optimisticData, successData, failureData} = getWriteOptions ( ) ;
11397
114- expect ( value ?. isLoading ) . toBe ( false ) ;
115- expect ( value ?. errors ) . toBeTruthy ( ) ;
98+ expect ( optimisticData . some ( ( u ) => u . key === ONYXKEYS . FORMS . ADD_AGENT_FORM ) ) . toBe ( false ) ;
99+ expect ( successData . some ( ( u ) => u . key === ONYXKEYS . FORMS . ADD_AGENT_FORM ) ) . toBe ( false ) ;
100+ expect ( failureData . some ( ( u ) => u . key === ONYXKEYS . FORMS . ADD_AGENT_FORM ) ) . toBe ( false ) ;
116101 } ) ;
117102
118103 it ( 'success data nulls out both optimistic entries' , ( ) => {
@@ -128,7 +113,7 @@ describe('createAgent', () => {
128113 expect ( promptRollback ?. value ) . toBeNull ( ) ;
129114 } ) ;
130115
131- it ( 'failure data nulls out both optimistic entries ' , ( ) => {
116+ it ( 'failure data preserves optimistic personal detail and merges errors onto the prompt entry ' , ( ) => {
132117 createAgent ( 'Bot' , 'My prompt' ) ;
133118
134119 const { optimisticData, failureData} = getWriteOptions ( ) ;
@@ -137,7 +122,15 @@ describe('createAgent', () => {
137122 const personalDetailRollback = failureData . find ( ( u ) => u . key === ONYXKEYS . PERSONAL_DETAILS_LIST ) ;
138123 const promptRollback = failureData . find ( ( u ) => u . key === `${ ONYXKEYS . COLLECTION . SHARED_NVP_AGENT_PROMPT } ${ accountID } ` ) ;
139124
140- expect ( ( personalDetailRollback ?. value as Record < string , unknown > ) [ accountID ] ) . toBeNull ( ) ;
141- expect ( promptRollback ?. value ) . toBeNull ( ) ;
125+ expect ( ( personalDetailRollback ?. value as Record < string , unknown > ) [ accountID ] ) . toMatchObject ( {
126+ accountID : Number ( accountID ) ,
127+ displayName : 'Bot' ,
128+ isOptimisticPersonalDetail : true ,
129+ } ) ;
130+ expect ( promptRollback ?. value ) . toMatchObject ( {
131+ prompt : 'My prompt' ,
132+ pendingAction : CONST . RED_BRICK_ROAD_PENDING_ACTION . ADD ,
133+ errors : expect . any ( Object ) ,
134+ } ) ;
142135 } ) ;
143136} ) ;
0 commit comments