@@ -517,8 +517,9 @@ describe("webviewMessageHandler - message dialog preferences", () => {
517517 } )
518518
519519 describe ( "submitEditedMessage" , ( ) => {
520- it ( "should always show dialog for edit confirmation" , async ( ) => {
520+ it ( "should show dialog for edit confirmation on first edit in session " , async ( ) => {
521521 vi . mocked ( mockClineProvider . getCurrentCline ) . mockReturnValue ( { } as any ) // Mock current cline exists
522+ mockClineProvider . hasShownEditWarning = false // Reset the flag
522523
523524 await webviewMessageHandler ( mockClineProvider , {
524525 type : "submitEditedMessage" ,
@@ -531,6 +532,75 @@ describe("webviewMessageHandler - message dialog preferences", () => {
531532 messageTs : 123456789 ,
532533 text : "edited content" ,
533534 } )
535+ expect ( mockClineProvider . hasShownEditWarning ) . toBe ( true )
536+ } )
537+
538+ it ( "should not show dialog for subsequent edits in the same session" , async ( ) => {
539+ const editMessageTs = 1234567890000 // Message to edit
540+ const mockCline = {
541+ taskId : "test-task-id" ,
542+ apiConversationHistory : [
543+ { role : "user" , content : "Previous message" , ts : editMessageTs - 5000 } ,
544+ { role : "assistant" , content : "Response" , ts : editMessageTs - 4000 } ,
545+ { role : "user" , content : "Message to edit" , ts : editMessageTs } ,
546+ { role : "assistant" , content : "Later response" , ts : editMessageTs + 2000 } ,
547+ ] ,
548+ clineMessages : [
549+ { ts : editMessageTs - 5000 , type : "say" , say : "text" , text : "Much earlier message" } ,
550+ { ts : editMessageTs - 2000 , type : "say" , say : "text" , text : "Earlier message" } ,
551+ { ts : editMessageTs , type : "say" , say : "user_feedback" , text : "Original message to edit" } ,
552+ { ts : editMessageTs + 2000 , type : "say" , say : "text" , text : "Later message" } ,
553+ ] ,
554+ overwriteClineMessages : vi . fn ( ) . mockResolvedValue ( undefined ) ,
555+ overwriteApiConversationHistory : vi . fn ( ) . mockResolvedValue ( undefined ) ,
556+ handleWebviewAskResponse : vi . fn ( ) ,
557+ }
558+
559+ // Mock getCurrentCline to always return our mockCline
560+ vi . mocked ( mockClineProvider . getCurrentCline ) . mockReturnValue ( mockCline as any )
561+
562+ vi . mocked ( mockClineProvider . getTaskWithId ) . mockResolvedValue ( {
563+ historyItem : { id : "test-task-id" } as any ,
564+ taskDirPath : "/test/path" ,
565+ apiConversationHistoryFilePath : "/test/path/api.json" ,
566+ uiMessagesFilePath : "/test/path/ui.json" ,
567+ apiConversationHistory : [ ] ,
568+ } )
569+ vi . mocked ( mockClineProvider . initClineWithHistoryItem ) . mockResolvedValue ( { } as any )
570+
571+ mockClineProvider . hasShownEditWarning = true // Flag already set from previous edit
572+
573+ await webviewMessageHandler ( mockClineProvider , {
574+ type : "submitEditedMessage" ,
575+ value : editMessageTs ,
576+ editedMessageContent : "edited content" ,
577+ images : undefined ,
578+ } )
579+
580+ // Should not show dialog
581+ expect ( mockClineProvider . postMessageToWebview ) . not . toHaveBeenCalledWith ( {
582+ type : "showEditMessageDialog" ,
583+ messageTs : editMessageTs ,
584+ text : "edited content" ,
585+ } )
586+
587+ // Should have called overwrite methods to remove messages from the timestamp onwards
588+ // The cutoff is editMessageTs - 1000, so messages before that should remain
589+ expect ( mockCline . overwriteClineMessages ) . toHaveBeenCalledWith ( [
590+ { ts : editMessageTs - 5000 , type : "say" , say : "text" , text : "Much earlier message" } ,
591+ { ts : editMessageTs - 2000 , type : "say" , say : "text" , text : "Earlier message" } ,
592+ ] )
593+ expect ( mockCline . overwriteApiConversationHistory ) . toHaveBeenCalledWith ( [
594+ { role : "user" , content : "Previous message" , ts : editMessageTs - 5000 } ,
595+ { role : "assistant" , content : "Response" , ts : editMessageTs - 4000 } ,
596+ ] )
597+
598+ // Should have called handleWebviewAskResponse
599+ expect ( mockCline . handleWebviewAskResponse ) . toHaveBeenCalledWith (
600+ "messageResponse" ,
601+ "edited content" ,
602+ undefined ,
603+ )
534604 } )
535605 } )
536606} )
0 commit comments