@@ -487,6 +487,14 @@ function createMockConflictService() {
487487 } as any ;
488488}
489489
490+ function createMockRebaseSuggestionService ( ) {
491+ return {
492+ listSuggestions : vi . fn ( ) . mockResolvedValue ( [ ] ) ,
493+ dismiss : vi . fn ( ) . mockResolvedValue ( undefined ) ,
494+ defer : vi . fn ( ) . mockResolvedValue ( undefined ) ,
495+ } as any ;
496+ }
497+
490498function createMockWorkerAgentService ( ) {
491499 return {
492500 listAgents : vi . fn ( ) . mockReturnValue ( [ ] ) ,
@@ -610,6 +618,7 @@ describe("createSyncRemoteCommandService", () => {
610618 let linearSyncService : ReturnType < typeof createMockLinearSyncService > ;
611619 let linearCredentialService : ReturnType < typeof createMockLinearCredentialService > ;
612620 let conflictService : ReturnType < typeof createMockConflictService > ;
621+ let rebaseSuggestionService : ReturnType < typeof createMockRebaseSuggestionService > ;
613622 let processService : ReturnType < typeof createMockProcessService > ;
614623 let issueInventoryService : ReturnType < typeof createMockIssueInventoryService > ;
615624 let queueLandingService : ReturnType < typeof createMockQueueLandingService > ;
@@ -631,6 +640,7 @@ describe("createSyncRemoteCommandService", () => {
631640 linearSyncService = createMockLinearSyncService ( ) ;
632641 linearCredentialService = createMockLinearCredentialService ( ) ;
633642 conflictService = createMockConflictService ( ) ;
643+ rebaseSuggestionService = createMockRebaseSuggestionService ( ) ;
634644 processService = createMockProcessService ( ) ;
635645 issueInventoryService = createMockIssueInventoryService ( ) ;
636646 queueLandingService = createMockQueueLandingService ( ) ;
@@ -652,6 +662,7 @@ describe("createSyncRemoteCommandService", () => {
652662 getLinearIssueTracker : ( ) => linearIssueTracker ,
653663 getLinearSyncService : ( ) => linearSyncService ,
654664 conflictService,
665+ rebaseSuggestionService,
655666 processService,
656667 logger : createLogger ( ) as any ,
657668 } ) ;
@@ -3172,36 +3183,29 @@ describe("createSyncRemoteCommandService", () => {
31723183 } ) ) ) . rejects . toThrow ( "lanes.rebasePush requires laneIds." ) ;
31733184 } ) ;
31743185
3175- it ( "lanes.dismissRebaseSuggestion routes to conflictService even without a rebaseSuggestionService " , async ( ) => {
3186+ it ( "lanes.dismissRebaseSuggestion hides the banner without dismissing the rebase need " , async ( ) => {
31763187 const result = await service . execute ( makePayload ( "lanes.dismissRebaseSuggestion" , {
31773188 laneId : "lane-1" ,
31783189 } ) ) ;
3179- expect ( conflictService . dismissRebase ) . toHaveBeenCalledWith ( "lane-1" ) ;
3190+ expect ( rebaseSuggestionService . dismiss ) . toHaveBeenCalledWith ( { laneId : "lane-1" } ) ;
3191+ expect ( conflictService . dismissRebase ) . not . toHaveBeenCalled ( ) ;
31803192 expect ( result ) . toEqual ( { ok : true } ) ;
31813193 } ) ;
31823194
3183- it ( "lanes.deferRebaseSuggestion clamps minutes and forwards an ISO timestamp to conflictService" , async ( ) => {
3184- vi . useFakeTimers ( ) ;
3185- try {
3186- vi . setSystemTime ( new Date ( "2026-04-15T22:00:00.000Z" ) ) ;
3187- await service . execute ( makePayload ( "lanes.deferRebaseSuggestion" , {
3188- laneId : "lane-1" ,
3189- minutes : 1 ,
3190- } ) ) ;
3191- expect ( conflictService . deferRebase ) . toHaveBeenCalledWith (
3192- "lane-1" ,
3193- "2026-04-15T22:05:00.000Z" ,
3194- ) ;
3195- conflictService . deferRebase . mockClear ( ) ;
3196- await service . execute ( makePayload ( "lanes.deferRebaseSuggestion" , {
3197- laneId : "lane-1" ,
3198- minutes : 60 * 24 * 30 ,
3199- } ) ) ;
3200- const [ , until ] = conflictService . deferRebase . mock . calls . at ( - 1 ) ?? [ ] ;
3201- expect ( until ) . toBe ( new Date ( Date . parse ( "2026-04-15T22:00:00.000Z" ) + 7 * 24 * 60 * 60_000 ) . toISOString ( ) ) ;
3202- } finally {
3203- vi . useRealTimers ( ) ;
3204- }
3195+ it ( "lanes.deferRebaseSuggestion clamps minutes and snoozes the banner without deferring the rebase need" , async ( ) => {
3196+ await service . execute ( makePayload ( "lanes.deferRebaseSuggestion" , {
3197+ laneId : "lane-1" ,
3198+ minutes : 1 ,
3199+ } ) ) ;
3200+ expect ( rebaseSuggestionService . defer ) . toHaveBeenCalledWith ( { laneId : "lane-1" , minutes : 5 } ) ;
3201+ expect ( conflictService . deferRebase ) . not . toHaveBeenCalled ( ) ;
3202+
3203+ await service . execute ( makePayload ( "lanes.deferRebaseSuggestion" , {
3204+ laneId : "lane-1" ,
3205+ minutes : 60 * 24 * 30 ,
3206+ } ) ) ;
3207+ expect ( rebaseSuggestionService . defer ) . toHaveBeenLastCalledWith ( { laneId : "lane-1" , minutes : 7 * 24 * 60 } ) ;
3208+ expect ( conflictService . deferRebase ) . not . toHaveBeenCalled ( ) ;
32053209 } ) ;
32063210 } ) ;
32073211
0 commit comments