Skip to content

Commit 2016506

Browse files
committed
feat: enhance createAgent tests with improved optimistic and failure data handling
1 parent 2261a10 commit 2016506

1 file changed

Lines changed: 21 additions & 28 deletions

File tree

tests/unit/AgentActionTest.ts

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {write} from '@libs/API';
22
import {WRITE_COMMANDS} from '@libs/API/types';
33
import {createAgent} from '@userActions/Agent';
4+
import CONST from '@src/CONST';
45
import ONYXKEYS from '@src/ONYXKEYS';
56
import 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

Comments
 (0)