@@ -25,32 +25,28 @@ jest.mock('react-native', () => ({
2525} ) ) ;
2626
2727// ── expo-notifications mock ───────────────────────────────────────────────────
28- const mockSchedule = jest . fn ( ( ) => Promise . resolve ( 'notif-id' ) ) ;
29- const mockGetScheduled = jest . fn ( ( ) => Promise . resolve ( [ ] ) ) ;
30- const mockCancel = jest . fn ( ( ) => Promise . resolve ( ) ) ;
31- const mockGetPermissions = jest . fn ( ( ) =>
32- Promise . resolve ( { status : Notifications . PermissionStatus . GRANTED } )
33- ) ;
34- const mockRequestPermissions = jest . fn ( ( ) =>
35- Promise . resolve ( { status : Notifications . PermissionStatus . GRANTED } )
36- ) ;
37- const mockSetHandler = jest . fn ( ) ;
38- const mockSetChannel = jest . fn ( ( ) => Promise . resolve ( ) ) ;
39-
4028jest . mock ( 'expo-notifications' , ( ) => ( {
4129 PermissionStatus : { GRANTED : 'granted' , DENIED : 'denied' , UNDETERMINED : 'undetermined' } ,
4230 AndroidImportance : { HIGH : 4 } ,
4331 AndroidNotificationVisibility : { PUBLIC : 1 } ,
4432 SchedulableTriggerInputTypes : { DATE : 'date' } ,
45- setNotificationHandler : ( ... args : unknown [ ] ) => mockSetHandler ( ... args ) ,
46- setNotificationChannelAsync : ( ... args : unknown [ ] ) => mockSetChannel ( ... args ) ,
47- getPermissionsAsync : ( ) => mockGetPermissions ( ) ,
48- requestPermissionsAsync : ( ) => mockRequestPermissions ( ) ,
49- scheduleNotificationAsync : ( ... args : unknown [ ] ) => mockSchedule ( ... args ) ,
50- getAllScheduledNotificationsAsync : ( ) => mockGetScheduled ( ) ,
51- cancelScheduledNotificationAsync : ( ... args : unknown [ ] ) => mockCancel ( ... args ) ,
33+ setNotificationHandler : jest . fn ( ) ,
34+ setNotificationChannelAsync : jest . fn ( ( ) => Promise . resolve ( ) ) ,
35+ getPermissionsAsync : jest . fn ( ( ) => Promise . resolve ( { status : 'granted' } ) ) ,
36+ requestPermissionsAsync : jest . fn ( ( ) => Promise . resolve ( { status : 'granted' } ) ) ,
37+ scheduleNotificationAsync : jest . fn ( ( ) => Promise . resolve ( 'notif-id' ) ) ,
38+ getAllScheduledNotificationsAsync : jest . fn ( ( ) => Promise . resolve ( [ ] ) ) ,
39+ cancelScheduledNotificationAsync : jest . fn ( ( ) => Promise . resolve ( ) ) ,
5240} ) ) ;
5341
42+ const mockSchedule = Notifications . scheduleNotificationAsync as jest . Mock ;
43+ const mockGetScheduled = Notifications . getAllScheduledNotificationsAsync as jest . Mock ;
44+ const mockCancel = Notifications . cancelScheduledNotificationAsync as jest . Mock ;
45+ const mockGetPermissions = Notifications . getPermissionsAsync as jest . Mock ;
46+ const mockRequestPermissions = Notifications . requestPermissionsAsync as jest . Mock ;
47+ const mockSetHandler = Notifications . setNotificationHandler as jest . Mock ;
48+ const mockSetChannel = Notifications . setNotificationChannelAsync as jest . Mock ;
49+
5450beforeEach ( ( ) => {
5551 mockSchedule . mockClear ( ) ;
5652 mockGetScheduled . mockClear ( ) ;
@@ -77,7 +73,7 @@ describe('notification delivery integration', () => {
7773 await presentChargeSuccessNotification ( sub ) ;
7874
7975 expect ( mockSchedule ) . toHaveBeenCalledTimes ( 1 ) ;
80- const [ payload ] = mockSchedule . mock . calls [ 0 ] as [
76+ const [ payload ] = mockSchedule . mock . calls [ 0 ] as unknown as [
8177 { content : { title : string ; data : { type : string } } ; trigger : null } ,
8278 ] ;
8379 expect ( payload . content . title ) . toContain ( 'Linear' ) ;
@@ -90,7 +86,7 @@ describe('notification delivery integration', () => {
9086 await presentChargeFailedNotification ( sub ) ;
9187
9288 expect ( mockSchedule ) . toHaveBeenCalledTimes ( 1 ) ;
93- const [ payload ] = mockSchedule . mock . calls [ 0 ] as [
89+ const [ payload ] = mockSchedule . mock . calls [ 0 ] as unknown as [
9490 { content : { title : string ; data : { type : string } } ; trigger : null } ,
9591 ] ;
9692 expect ( payload . content . title ) . toContain ( 'Figma' ) ;
@@ -102,15 +98,15 @@ describe('notification delivery integration', () => {
10298 const sub = makeSubscription ( ) ;
10399 await presentChargeFailedNotification ( sub , 'Insufficient balance' ) ;
104100
105- const [ payload ] = mockSchedule . mock . calls [ 0 ] as [ { content : { body : string } } ] ;
101+ const [ payload ] = mockSchedule . mock . calls [ 0 ] as unknown as [ { content : { body : string } } ] ;
106102 expect ( payload . content . body ) . toBe ( 'Insufficient balance' ) ;
107103 } ) ;
108104
109105 it ( 'presentTransactionQueueNotification schedules with correct type' , async ( ) => {
110106 await presentTransactionQueueNotification ( 'Queue update' , 'Your transaction was processed' ) ;
111107
112108 expect ( mockSchedule ) . toHaveBeenCalledTimes ( 1 ) ;
113- const [ payload ] = mockSchedule . mock . calls [ 0 ] as [
109+ const [ payload ] = mockSchedule . mock . calls [ 0 ] as unknown as [
114110 { content : { title : string ; body : string ; data : { type : string } } } ,
115111 ] ;
116112 expect ( payload . content . title ) . toBe ( 'Queue update' ) ;
@@ -128,7 +124,7 @@ describe('notification delivery integration', () => {
128124 } ,
129125 trigger : null ,
130126 } ;
131- mockGetScheduled . mockResolvedValueOnce ( [ existingNotif ] ) ;
127+ mockGetScheduled . mockResolvedValueOnce ( [ existingNotif ] as never ) ;
132128
133129 const sub = makeSubscription ( {
134130 nextBillingDate : new Date ( Date . now ( ) + 48 * 60 * 60 * 1000 ) , // 2 days from now
@@ -142,7 +138,7 @@ describe('notification delivery integration', () => {
142138 } ) ;
143139
144140 it ( 'syncRenewalReminders does not schedule for inactive subscriptions' , async ( ) => {
145- mockGetScheduled . mockResolvedValueOnce ( [ ] ) ;
141+ mockGetScheduled . mockResolvedValueOnce ( [ ] as unknown as never ) ;
146142
147143 const sub = makeSubscription ( { isActive : false , notificationsEnabled : true } ) ;
148144 await syncRenewalReminders ( [ sub ] ) ;
@@ -151,7 +147,7 @@ describe('notification delivery integration', () => {
151147 } ) ;
152148
153149 it ( 'syncRenewalReminders does not schedule when notificationsEnabled is false' , async ( ) => {
154- mockGetScheduled . mockResolvedValueOnce ( [ ] ) ;
150+ mockGetScheduled . mockResolvedValueOnce ( [ ] as unknown as never ) ;
155151
156152 const sub = makeSubscription ( {
157153 isActive : true ,
@@ -164,7 +160,7 @@ describe('notification delivery integration', () => {
164160 } ) ;
165161
166162 it ( 'syncRenewalReminders schedules a reminder for an active sub with future billing date' , async ( ) => {
167- mockGetScheduled . mockResolvedValueOnce ( [ ] ) ;
163+ mockGetScheduled . mockResolvedValueOnce ( [ ] as unknown as never ) ;
168164
169165 const sub = makeSubscription ( {
170166 isActive : true ,
@@ -176,7 +172,9 @@ describe('notification delivery integration', () => {
176172 await syncRenewalReminders ( [ sub ] ) ;
177173
178174 expect ( mockSchedule ) . toHaveBeenCalledTimes ( 1 ) ;
179- const [ payload ] = mockSchedule . mock . calls [ 0 ] as [ { content : { data : { type : string } } } ] ;
175+ const [ payload ] = mockSchedule . mock . calls [ 0 ] as unknown as [
176+ { content : { data : { type : string } } } ,
177+ ] ;
180178 expect ( payload . content . data . type ) . toBe ( NOTIFICATION_DATA_TYPE . RENEWAL_REMINDER ) ;
181179 } ) ;
182180
0 commit comments