@@ -37,14 +37,29 @@ const defaultMockFiles = [
3737 } ,
3838] ;
3939
40- let mockStoreState : any = {
41- callFiles : defaultMockFiles ,
40+ // Create a single object that will be mutated - never reassign!
41+ const mockStoreState = {
42+ callFiles : defaultMockFiles as any ,
4243 isLoadingFiles : false ,
43- errorFiles : null ,
44+ errorFiles : null as string | null ,
4445 fetchCallFiles : mockFetchCallFiles ,
4546 clearFiles : mockClearFiles ,
4647} ;
4748
49+ // Helper function to update mock state without replacing the object
50+ const setMockStoreState = ( updates : Partial < typeof mockStoreState > ) => {
51+ Object . assign ( mockStoreState , updates ) ;
52+ } ;
53+
54+ // Reset mock state to defaults
55+ const resetMockStoreState = ( ) => {
56+ mockStoreState . callFiles = defaultMockFiles ;
57+ mockStoreState . isLoadingFiles = false ;
58+ mockStoreState . errorFiles = null ;
59+ mockStoreState . fetchCallFiles = mockFetchCallFiles ;
60+ mockStoreState . clearFiles = mockClearFiles ;
61+ } ;
62+
4863jest . mock ( '@/stores/calls/detail-store' , ( ) => ( {
4964 useCallDetailStore : ( ) => mockStoreState ,
5065} ) ) ;
@@ -301,13 +316,7 @@ describe('CallFilesModal', () => {
301316 beforeEach ( ( ) => {
302317 jest . clearAllMocks ( ) ;
303318 // Reset to default state
304- mockStoreState = {
305- callFiles : defaultMockFiles ,
306- isLoadingFiles : false ,
307- errorFiles : null ,
308- fetchCallFiles : mockFetchCallFiles ,
309- clearFiles : mockClearFiles ,
310- } ;
319+ resetMockStoreState ( ) ;
311320 } ) ;
312321
313322 it ( 'renders correctly when closed' , ( ) => {
@@ -421,13 +430,11 @@ describe('CallFilesModal', () => {
421430 describe ( 'Loading States' , ( ) => {
422431 beforeEach ( ( ) => {
423432 // Mock loading state
424- mockStoreState = {
433+ setMockStoreState ( {
425434 callFiles : null ,
426435 isLoadingFiles : true ,
427436 errorFiles : null ,
428- fetchCallFiles : mockFetchCallFiles ,
429- clearFiles : mockClearFiles ,
430- } ;
437+ } ) ;
431438 } ) ;
432439
433440 it ( 'displays loading spinner when fetching files' , ( ) => {
@@ -443,13 +450,11 @@ describe('CallFilesModal', () => {
443450 describe ( 'Error States' , ( ) => {
444451 beforeEach ( ( ) => {
445452 // Mock error state
446- mockStoreState = {
453+ setMockStoreState ( {
447454 callFiles : [ ] ,
448455 isLoadingFiles : false ,
449456 errorFiles : 'Network error occurred' ,
450- fetchCallFiles : mockFetchCallFiles ,
451- clearFiles : mockClearFiles ,
452- } ;
457+ } ) ;
453458 } ) ;
454459
455460 it ( 'displays error message when file fetch fails' , ( ) => {
@@ -476,13 +481,11 @@ describe('CallFilesModal', () => {
476481 describe ( 'Empty States' , ( ) => {
477482 beforeEach ( ( ) => {
478483 // Mock empty state
479- mockStoreState = {
484+ setMockStoreState ( {
480485 callFiles : [ ] ,
481486 isLoadingFiles : false ,
482487 errorFiles : null ,
483- fetchCallFiles : mockFetchCallFiles ,
484- clearFiles : mockClearFiles ,
485- } ;
488+ } ) ;
486489 } ) ;
487490
488491 it ( 'displays empty state when no files available' , ( ) => {
@@ -503,12 +506,11 @@ describe('CallFilesModal', () => {
503506
504507 beforeEach ( ( ) => {
505508 // Reset to default state with files
506- mockStoreState = {
509+ setMockStoreState ( {
507510 callFiles : defaultMockFiles ,
508511 isLoadingFiles : false ,
509512 errorFiles : null ,
510- fetchCallFiles : mockFetchCallFiles ,
511- } ;
513+ } ) ;
512514 } ) ;
513515
514516 it ( 'downloads and shares file when clicked' , async ( ) => {
@@ -591,13 +593,7 @@ describe('CallFilesModal', () => {
591593 describe ( 'File Format Utilities' , ( ) => {
592594 beforeEach ( ( ) => {
593595 // Reset to default state
594- mockStoreState = {
595- callFiles : defaultMockFiles ,
596- isLoadingFiles : false ,
597- errorFiles : null ,
598- fetchCallFiles : mockFetchCallFiles ,
599- clearFiles : mockClearFiles ,
600- } ;
596+ resetMockStoreState ( ) ;
601597 } ) ;
602598
603599 it ( 'formats file sizes correctly' , ( ) => {
@@ -625,13 +621,7 @@ describe('CallFilesModal', () => {
625621 beforeEach ( ( ) => {
626622 jest . clearAllMocks ( ) ;
627623 // Reset to default state
628- mockStoreState = {
629- callFiles : defaultMockFiles ,
630- isLoadingFiles : false ,
631- errorFiles : null ,
632- fetchCallFiles : mockFetchCallFiles ,
633- clearFiles : mockClearFiles ,
634- } ;
624+ resetMockStoreState ( ) ;
635625 } ) ;
636626
637627 it ( 'should track analytics event when modal is opened' , ( ) => {
@@ -653,10 +643,9 @@ describe('CallFilesModal', () => {
653643 } ) ;
654644
655645 it ( 'should track analytics event with loading state' , ( ) => {
656- mockStoreState = {
657- ...mockStoreState ,
646+ setMockStoreState ( {
658647 isLoadingFiles : true ,
659- } ;
648+ } ) ;
660649
661650 render ( < CallFilesModal { ...defaultProps } isOpen = { true } callId = "test-call-456" /> ) ;
662651
@@ -670,10 +659,9 @@ describe('CallFilesModal', () => {
670659 } ) ;
671660
672661 it ( 'should track analytics event with error state' , ( ) => {
673- mockStoreState = {
674- ...mockStoreState ,
662+ setMockStoreState ( {
675663 errorFiles : 'Failed to load files' ,
676- } ;
664+ } ) ;
677665
678666 render ( < CallFilesModal { ...defaultProps } isOpen = { true } callId = "test-call-error" /> ) ;
679667
@@ -687,10 +675,9 @@ describe('CallFilesModal', () => {
687675 } ) ;
688676
689677 it ( 'should track analytics event with no files' , ( ) => {
690- mockStoreState = {
691- ...mockStoreState ,
678+ setMockStoreState ( {
692679 callFiles : [ ] ,
693- } ;
680+ } ) ;
694681
695682 render ( < CallFilesModal { ...defaultProps } isOpen = { true } callId = "test-call-no-files" /> ) ;
696683
0 commit comments