@@ -222,79 +222,77 @@ describe('TranslationContext', () => {
222222 expect ( context . tDateTimeParser ) . not . toBe ( i18nInstance . tDateTimeParser ) ;
223223 expect ( context . tDateTimeParser ) . toBe ( newI18nInstance . tDateTimeParser ) ;
224224 } ) ;
225+ } ) ;
226+
227+ it ( 'makes sure DBSyncManager listeners are cleaned up after Chat remount' , async ( ) => {
228+ const chatClientWithUser = await getTestClientWithUser ( { id : 'testID' } ) ;
229+ jest . spyOn ( DBSyncManager , 'init' ) ;
230+
231+ // initial mount and render
232+ const { rerender } = render ( < Chat client = { chatClientWithUser } enableOfflineSupport key = { 1 } /> ) ;
233+
234+ // the unsubscribe fn changes during init(), so we keep a reference to the spy
235+ const unsubscribeSpy = jest . spyOn ( DBSyncManager . connectionChangedListener , 'unsubscribe' ) ;
236+ const listenersAfterInitialMount = chatClientWithUser . listeners [ 'connection.changed' ] ;
225237
226- it ( 'makes sure DBSyncManager listeners are cleaned up after Chat remount' , async ( ) => {
227- const chatClientWithUser = await getTestClientWithUser ( { id : 'testID' } ) ;
228- jest . spyOn ( DBSyncManager , 'init' ) ;
238+ // remount
239+ rerender ( < Chat client = { chatClientWithUser } enableOfflineSupport key = { 2 } /> ) ;
229240
230- // initial mount and render
231- const { rerender } = render (
232- < Chat client = { chatClientWithUser } enableOfflineSupport key = { 1 } /> ,
241+ await waitFor ( ( ) => {
242+ expect ( DBSyncManager . init ) . toHaveBeenCalledTimes ( 2 ) ;
243+ expect ( unsubscribeSpy ) . toHaveBeenCalledTimes ( 2 ) ;
244+ expect ( chatClientWithUser . listeners [ 'connection.changed' ] . length ) . toBe (
245+ listenersAfterInitialMount . length ,
233246 ) ;
247+ } ) ;
248+ } ) ;
234249
235- // the unsubscribe fn changes during init(), so we keep a reference to the spy
236- const unsubscribeSpy = jest . spyOn ( DBSyncManager . connectionChangedListener , 'unsubscribe' ) ;
237- const listenersAfterInitialMount = chatClientWithUser . listeners [ 'connection.changed' ] ;
250+ it ( 'makes sure DBSyncManager listeners are cleaned up if the user changes' , async ( ) => {
251+ const chatClientWithUser = await getTestClientWithUser ( { id : 'testID1' } ) ;
252+ jest . spyOn ( DBSyncManager , 'init' ) ;
238253
239- // remount
240- rerender ( < Chat client = { chatClientWithUser } enableOfflineSupport key = { 2 } /> ) ;
254+ // initial render
255+ const { rerender } = render ( < Chat client = { chatClientWithUser } enableOfflineSupport /> ) ;
241256
242- await waitFor ( ( ) => {
243- expect ( DBSyncManager . init ) . toHaveBeenCalledTimes ( 2 ) ;
244- expect ( unsubscribeSpy ) . toHaveBeenCalledTimes ( 2 ) ;
245- expect ( chatClientWithUser . listeners [ 'connection.changed' ] . length ) . toBe (
246- listenersAfterInitialMount . length ,
247- ) ;
248- } ) ;
257+ // the unsubscribe fn changes during init(), so we keep a reference to the spy
258+ const unsubscribeSpy = jest . spyOn ( DBSyncManager . connectionChangedListener , 'unsubscribe' ) ;
259+ await act ( async ( ) => {
260+ await setUser ( chatClientWithUser , { id : 'testID2' } ) ;
249261 } ) ;
262+ const listenersAfterInitialMount = chatClientWithUser . listeners [ 'connection.changed' ] ;
250263
251- it ( 'makes sure DBSyncManager listeners are cleaned up if the user changes' , async ( ) => {
252- const chatClientWithUser = await getTestClientWithUser ( { id : 'testID1' } ) ;
253- jest . spyOn ( DBSyncManager , 'init' ) ;
254-
255- // initial render
256- const { rerender } = render ( < Chat client = { chatClientWithUser } enableOfflineSupport /> ) ;
257-
258- // the unsubscribe fn changes during init(), so we keep a reference to the spy
259- const unsubscribeSpy = jest . spyOn ( DBSyncManager . connectionChangedListener , 'unsubscribe' ) ;
260- await act ( async ( ) => {
261- await setUser ( chatClientWithUser , { id : 'testID2' } ) ;
262- } ) ;
263- const listenersAfterInitialMount = chatClientWithUser . listeners [ 'connection.changed' ] ;
264-
265- // rerender with different user ID
266- rerender ( < Chat client = { chatClientWithUser } enableOfflineSupport /> ) ;
267-
268- await waitFor ( ( ) => {
269- expect ( DBSyncManager . init ) . toHaveBeenCalledTimes ( 2 ) ;
270- expect ( unsubscribeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
271- expect ( chatClientWithUser . listeners [ 'connection.changed' ] . length ) . toBe (
272- listenersAfterInitialMount . length ,
273- ) ;
274- } ) ;
264+ // rerender with different user ID
265+ rerender ( < Chat client = { chatClientWithUser } enableOfflineSupport /> ) ;
266+
267+ await waitFor ( ( ) => {
268+ expect ( DBSyncManager . init ) . toHaveBeenCalledTimes ( 2 ) ;
269+ expect ( unsubscribeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
270+ expect ( chatClientWithUser . listeners [ 'connection.changed' ] . length ) . toBe (
271+ listenersAfterInitialMount . length ,
272+ ) ;
275273 } ) ;
274+ } ) ;
276275
277- it ( 'makes sure DBSyncManager state stays intact during normal rerenders' , async ( ) => {
278- const chatClientWithUser = await getTestClientWithUser ( { id : 'testID' } ) ;
279- jest . spyOn ( DBSyncManager , 'init' ) ;
276+ it ( 'makes sure DBSyncManager state stays intact during normal rerenders' , async ( ) => {
277+ const chatClientWithUser = await getTestClientWithUser ( { id : 'testID' } ) ;
278+ jest . spyOn ( DBSyncManager , 'init' ) ;
280279
281- // initial render
282- const { rerender } = render ( < Chat client = { chatClientWithUser } enableOfflineSupport /> ) ;
280+ // initial render
281+ const { rerender } = render ( < Chat client = { chatClientWithUser } enableOfflineSupport /> ) ;
283282
284- // the unsubscribe fn changes during init(), so we keep a reference to the spy
285- const unsubscribeSpy = jest . spyOn ( DBSyncManager . connectionChangedListener , 'unsubscribe' ) ;
286- const listenersAfterInitialMount = chatClientWithUser . listeners [ 'connection.changed' ] ;
283+ // the unsubscribe fn changes during init(), so we keep a reference to the spy
284+ const unsubscribeSpy = jest . spyOn ( DBSyncManager . connectionChangedListener , 'unsubscribe' ) ;
285+ const listenersAfterInitialMount = chatClientWithUser . listeners [ 'connection.changed' ] ;
287286
288- // rerender
289- rerender ( < Chat client = { chatClientWithUser } enableOfflineSupport /> ) ;
287+ // rerender
288+ rerender ( < Chat client = { chatClientWithUser } enableOfflineSupport /> ) ;
290289
291- await waitFor ( ( ) => {
292- expect ( DBSyncManager . init ) . toHaveBeenCalledTimes ( 1 ) ;
293- expect ( unsubscribeSpy ) . toHaveBeenCalledTimes ( 0 ) ;
294- expect ( chatClientWithUser . listeners [ 'connection.changed' ] . length ) . toBe (
295- listenersAfterInitialMount . length ,
296- ) ;
297- } ) ;
290+ await waitFor ( ( ) => {
291+ expect ( DBSyncManager . init ) . toHaveBeenCalledTimes ( 1 ) ;
292+ expect ( unsubscribeSpy ) . toHaveBeenCalledTimes ( 0 ) ;
293+ expect ( chatClientWithUser . listeners [ 'connection.changed' ] . length ) . toBe (
294+ listenersAfterInitialMount . length ,
295+ ) ;
298296 } ) ;
299297 } ) ;
300298} ) ;
0 commit comments