@@ -363,6 +363,55 @@ describe("createConversation", () => {
363363 assertSpyCalls ( onExit , 1 ) ;
364364 assertSpyCallArg ( onExit , 0 , 0 , "convo" ) ;
365365 } ) ;
366+ it ( "should call onExit upon halt without wait" , async ( ) => {
367+ const onExit = spy ( ( ) => { } ) ;
368+ const mw = new Composer < TestContext > ( ) ;
369+ let i = 0 ;
370+ let j = 0 ;
371+ mw . use (
372+ conversations ( { onExit } ) ,
373+ createConversation ( async ( convo ) => {
374+ i ++ ;
375+ await convo . halt ( ) ;
376+ j ++ ;
377+ } , { id : "convo" } ) ,
378+ async ( ctx ) => {
379+ await ctx . conversation . enter ( "convo" ) ;
380+ } ,
381+ ) ;
382+ const up = { message : { chat : { id : 0 } } } ;
383+ await mw . middleware ( ) ( mkctx ( up ) , next ) ;
384+ await mw . middleware ( ) ( mkctx ( up ) , next ) ;
385+ assertEquals ( i , 2 ) ;
386+ assertEquals ( j , 0 ) ;
387+ assertSpyCalls ( onExit , 2 ) ; // enter, halt, enter, halt
388+ assertSpyCallArg ( onExit , 0 , 0 , "convo" ) ;
389+ } ) ;
390+ it ( "should call onExit upon halt after wait" , async ( ) => {
391+ const onExit = spy ( ( ) => { } ) ;
392+ const mw = new Composer < TestContext > ( ) ;
393+ let i = 0 ;
394+ let j = 0 ;
395+ mw . use (
396+ conversations ( { onExit } ) ,
397+ createConversation ( async ( convo ) => {
398+ i ++ ;
399+ await convo . wait ( ) ;
400+ await convo . halt ( ) ;
401+ j ++ ;
402+ } , { id : "convo" } ) ,
403+ async ( ctx ) => {
404+ await ctx . conversation . enter ( "convo" ) ;
405+ } ,
406+ ) ;
407+ const up = { message : { chat : { id : 0 } } } ;
408+ await mw . middleware ( ) ( mkctx ( up ) , next ) ;
409+ await mw . middleware ( ) ( mkctx ( up ) , next ) ;
410+ assertEquals ( i , 2 ) ;
411+ assertEquals ( j , 0 ) ;
412+ assertSpyCalls ( onExit , 1 ) ; // enter, wait, resume, halt
413+ assertSpyCallArg ( onExit , 0 , 0 , "convo" ) ;
414+ } ) ;
366415 it ( "should continue if default wait timeouts do not kick in" , async ( ) => {
367416 const onExit = spy ( ( ) => { } ) ;
368417 const mw = new Composer < TestContext > ( ) ;
0 commit comments