@@ -7,6 +7,7 @@ import ONYXKEYS from '@src/ONYXKEYS';
7
7
import type { Policy as PolicyType , Report , ReportAction , ReportActions } from '@src/types/onyx' ;
8
8
import type { Participant } from '@src/types/onyx/Report' ;
9
9
import createRandomPolicy from '../utils/collections/policies' ;
10
+ import createRandomReport from '../utils/collections/reports' ;
10
11
import * as TestHelper from '../utils/TestHelper' ;
11
12
import type { MockFetch } from '../utils/TestHelper' ;
12
13
import waitForBatchedUpdates from '../utils/waitForBatchedUpdates' ;
@@ -25,8 +26,10 @@ describe('actions/Policy', () => {
25
26
} ) ;
26
27
} ) ;
27
28
29
+ let mockFetch : MockFetch ;
28
30
beforeEach ( ( ) => {
29
31
global . fetch = TestHelper . getGlobalFetchMock ( ) ;
32
+ mockFetch = fetch as MockFetch ;
30
33
return Onyx . clear ( ) . then ( waitForBatchedUpdates ) ;
31
34
} ) ;
32
35
@@ -222,4 +225,69 @@ describe('actions/Policy', () => {
222
225
expect ( policy ?. autoReportingFrequency ) . toBe ( autoReportingFrequency ) ;
223
226
} ) ;
224
227
} ) ;
228
+
229
+ describe ( 'deleteWorkspace' , ( ) => {
230
+ it ( 'should apply failure data when deleteWorkspace fails' , async ( ) => {
231
+ // Given a policy
232
+ const fakePolicy = createRandomPolicy ( 0 ) ;
233
+ const fakeReport = {
234
+ ...createRandomReport ( 0 ) ,
235
+ stateNum : CONST . REPORT . STATE_NUM . OPEN ,
236
+ statusNum : CONST . REPORT . STATUS_NUM . OPEN ,
237
+ chatType : CONST . REPORT . CHAT_TYPE . POLICY_EXPENSE_CHAT ,
238
+ policyName : fakePolicy . name ,
239
+ } ;
240
+ const fakeReimbursementAccount = { errors : { } } ;
241
+ await Onyx . merge ( `${ ONYXKEYS . COLLECTION . POLICY } ${ fakePolicy . id } ` , fakePolicy ) ;
242
+ await Onyx . merge ( `${ ONYXKEYS . COLLECTION . REPORT } ${ fakeReport . reportID } ` , fakeReport ) ;
243
+ await Onyx . merge ( ONYXKEYS . REIMBURSEMENT_ACCOUNT , fakeReimbursementAccount ) ;
244
+
245
+ // When deleting a workspace fails
246
+ mockFetch ?. fail ?.( ) ;
247
+ Policy . deleteWorkspace ( fakePolicy . id , fakePolicy . name ) ;
248
+
249
+ await waitForBatchedUpdates ( ) ;
250
+
251
+ // Then it should apply the correct failure data
252
+ await new Promise < void > ( ( resolve ) => {
253
+ const connection = Onyx . connect ( {
254
+ key : `${ ONYXKEYS . COLLECTION . POLICY } ${ fakePolicy . id } ` ,
255
+ callback : ( policy ) => {
256
+ Onyx . disconnect ( connection ) ;
257
+ expect ( policy ?. pendingAction ) . toBeUndefined ( ) ;
258
+ expect ( policy ?. avatarURL ) . toBe ( fakePolicy . avatarURL ) ;
259
+ resolve ( ) ;
260
+ } ,
261
+ } ) ;
262
+ } ) ;
263
+
264
+ // Unarchive the report
265
+ await new Promise < void > ( ( resolve ) => {
266
+ const connection = Onyx . connect ( {
267
+ key : `${ ONYXKEYS . COLLECTION . REPORT } ${ fakeReport . reportID } ` ,
268
+ callback : ( report ) => {
269
+ Onyx . disconnect ( connection ) ;
270
+ expect ( report ?. stateNum ) . toBe ( fakeReport . stateNum ) ;
271
+ expect ( report ?. statusNum ) . toBe ( fakeReport . statusNum ) ;
272
+ expect ( report ?. policyName ) . toBe ( fakeReport . policyName ) ;
273
+ expect ( report ?. oldPolicyName ) . toBe ( fakePolicy . name ) ;
274
+ expect ( report ?. private_isArchived ) . toBeUndefined ( ) ;
275
+ resolve ( ) ;
276
+ } ,
277
+ } ) ;
278
+ } ) ;
279
+
280
+ // Restore the reimbursement account errors
281
+ await new Promise < void > ( ( resolve ) => {
282
+ const connection = Onyx . connect ( {
283
+ key : ONYXKEYS . REIMBURSEMENT_ACCOUNT ,
284
+ callback : ( reimbursementAccount ) => {
285
+ Onyx . disconnect ( connection ) ;
286
+ expect ( reimbursementAccount ?. errors ) . not . toBeUndefined ( ) ;
287
+ resolve ( ) ;
288
+ } ,
289
+ } ) ;
290
+ } ) ;
291
+ } ) ;
292
+ } ) ;
225
293
} ) ;
0 commit comments