@@ -56,26 +56,33 @@ const mockCallsStore = {
5656} ;
5757
5858const mockSecurityStore = {
59- canUserCreateCalls : true ,
59+ rights : { CanCreateCalls : true } as { CanCreateCalls : boolean } | undefined ,
6060} ;
6161
6262const mockAnalytics = {
6363 trackEvent : jest . fn ( ) ,
6464} ;
6565
66- // Mock the stores with proper getState method
66+ // Mock the stores with proper getState method. The hook mocks apply an optional
67+ // selector, matching how zustand hooks are called with field selectors.
6768jest . mock ( '@/stores/calls/store' , ( ) => {
68- const useCallsStore = jest . fn ( ( ) => mockCallsStore ) ;
69+ const useCallsStore = jest . fn ( ( selector ?: ( state : typeof mockCallsStore ) => unknown ) => ( selector ? selector ( mockCallsStore ) : mockCallsStore ) ) ;
6970 ( useCallsStore as any ) . getState = jest . fn ( ( ) => mockCallsStore ) ;
7071
7172 return {
7273 useCallsStore,
7374 } ;
7475} ) ;
7576
76- jest . mock ( '@/stores/security/store' , ( ) => ( {
77- useSecurityStore : jest . fn ( ( ) => mockSecurityStore ) ,
78- } ) ) ;
77+ jest . mock ( '@/stores/security/store' , ( ) => {
78+ const securityStore = jest . fn ( ( selector ?: ( state : typeof mockSecurityStore ) => unknown ) => ( selector ? selector ( mockSecurityStore ) : mockSecurityStore ) ) ;
79+ ( securityStore as any ) . getState = jest . fn ( ( ) => mockSecurityStore ) ;
80+
81+ return {
82+ securityStore,
83+ useSecurityStore : jest . fn ( ( ) => ( { canUserCreateCalls : mockSecurityStore . rights ?. CanCreateCalls } ) ) ,
84+ } ;
85+ } ) ;
7986
8087jest . mock ( '@/hooks/use-analytics' , ( ) => ( {
8188 useAnalytics : jest . fn ( ( ) => mockAnalytics ) ,
@@ -216,9 +223,9 @@ describe('CallsScreen', () => {
216223 beforeEach ( ( ) => {
217224 jest . clearAllMocks ( ) ;
218225
219- // Reset mock returns to defaults
220- useCallsStore . mockReturnValue ( mockCallsStore ) ;
221- useSecurityStore . mockReturnValue ( mockSecurityStore ) ;
226+ // Reset mock behavior to defaults (selector-aware, like the real zustand hooks)
227+ useCallsStore . mockImplementation ( ( selector ?: ( state : typeof mockCallsStore ) => unknown ) => ( selector ? selector ( mockCallsStore ) : mockCallsStore ) ) ;
228+ useSecurityStore . mockImplementation ( ( ) => ( { canUserCreateCalls : mockSecurityStore . rights ?. CanCreateCalls } ) ) ;
222229 useAnalytics . mockReturnValue ( mockAnalytics ) ;
223230
224231 // Reset the mock store state
@@ -227,13 +234,12 @@ describe('CallsScreen', () => {
227234 mockCallsStore . error = null ;
228235 mockCallsStore . callPriorities = [ ] ;
229236
230- mockSecurityStore . canUserCreateCalls = true ;
237+ mockSecurityStore . rights = { CanCreateCalls : true } ;
231238 } ) ;
232239
233240 describe ( 'when user has create calls permission' , ( ) => {
234241 beforeEach ( ( ) => {
235- mockSecurityStore . canUserCreateCalls = true ;
236- useSecurityStore . mockReturnValue ( mockSecurityStore ) ;
242+ mockSecurityStore . rights = { CanCreateCalls : true } ;
237243 } ) ;
238244
239245 it ( 'renders the new call FAB button' , ( ) => {
@@ -244,7 +250,7 @@ describe('CallsScreen', () => {
244250 expect ( htmlContent ) . toBeTruthy ( ) ;
245251
246252 // Since we can see the button in debug output, let's just verify the mock is working
247- expect ( mockSecurityStore . canUserCreateCalls ) . toBe ( true ) ;
253+ expect ( mockSecurityStore . rights ?. CanCreateCalls ) . toBe ( true ) ;
248254 } ) ;
249255
250256 it ( 'navigates to new call screen when FAB is pressed' , ( ) => {
@@ -262,8 +268,7 @@ describe('CallsScreen', () => {
262268
263269 describe ( 'when user does not have create calls permission' , ( ) => {
264270 beforeEach ( ( ) => {
265- mockSecurityStore . canUserCreateCalls = false ;
266- useSecurityStore . mockReturnValue ( mockSecurityStore ) ;
271+ mockSecurityStore . rights = { CanCreateCalls : false } ;
267272 } ) ;
268273
269274 it ( 'does not render the new call FAB button' , ( ) => {
@@ -291,7 +296,7 @@ describe('CallsScreen', () => {
291296
292297 beforeEach ( ( ) => {
293298 mockCallsStore . calls = mockCalls ;
294- useCallsStore . mockReturnValue ( mockCallsStore ) ;
299+ useCallsStore . mockImplementation ( ( selector ?: ( state : typeof mockCallsStore ) => unknown ) => ( selector ? selector ( mockCallsStore ) : mockCallsStore ) ) ;
295300 } ) ;
296301
297302 it ( 'renders call cards for each call' , ( ) => {
@@ -333,7 +338,7 @@ describe('CallsScreen', () => {
333338 describe ( 'loading and error states' , ( ) => {
334339 it ( 'shows loading state when isLoading is true' , ( ) => {
335340 mockCallsStore . isLoading = true ;
336- useCallsStore . mockReturnValue ( mockCallsStore ) ;
341+ useCallsStore . mockImplementation ( ( selector ?: ( state : typeof mockCallsStore ) => unknown ) => ( selector ? selector ( mockCallsStore ) : mockCallsStore ) ) ;
337342
338343 render ( < CallsScreen /> ) ;
339344
@@ -346,7 +351,7 @@ describe('CallsScreen', () => {
346351
347352 it ( 'shows error state when there is an error' , ( ) => {
348353 mockCallsStore . error = 'Network error' ;
349- useCallsStore . mockReturnValue ( mockCallsStore ) ;
354+ useCallsStore . mockImplementation ( ( selector ?: ( state : typeof mockCallsStore ) => unknown ) => ( selector ? selector ( mockCallsStore ) : mockCallsStore ) ) ;
350355
351356 render ( < CallsScreen /> ) ;
352357
@@ -359,7 +364,7 @@ describe('CallsScreen', () => {
359364
360365 it ( 'shows zero state when there are no calls' , ( ) => {
361366 mockCallsStore . calls = [ ] ;
362- useCallsStore . mockReturnValue ( mockCallsStore ) ;
367+ useCallsStore . mockImplementation ( ( selector ?: ( state : typeof mockCallsStore ) => unknown ) => ( selector ? selector ( mockCallsStore ) : mockCallsStore ) ) ;
363368
364369 render ( < CallsScreen /> ) ;
365370
@@ -383,7 +388,7 @@ describe('CallsScreen', () => {
383388 it ( 'tracks view rendered event with correct parameters' , ( ) => {
384389 const mockCalls = [ { CallId : 'call-1' , Nature : 'Test' } ] ;
385390 mockCallsStore . calls = mockCalls ;
386- useCallsStore . mockReturnValue ( mockCallsStore ) ;
391+ useCallsStore . mockImplementation ( ( selector ?: ( state : typeof mockCallsStore ) => unknown ) => ( selector ? selector ( mockCallsStore ) : mockCallsStore ) ) ;
387392
388393 render ( < CallsScreen /> ) ;
389394
0 commit comments