@@ -20,8 +20,10 @@ const storedSessions: Record<string, Array<{ id: string; title?: string }>> = {}
2020const promoted : Array < { directory : string ; sessionID : string } > = [ ]
2121const sentShell : string [ ] = [ ]
2222const syncedDirectories : string [ ] = [ ]
23+ const promotedDrafts : Array < { draftID : string ; server : string ; sessionId : string } > = [ ]
2324
2425let params : { id ?: string } = { }
26+ let search : { draftId ?: string } = { }
2527let selected = "/repo/worktree-a"
2628let variant : string | undefined
2729
@@ -79,7 +81,7 @@ beforeAll(async () => {
7981 useNavigate : ( ) => ( ) => undefined ,
8082 useParams : ( ) => params ,
8183 useLocation : ( ) => ( { } ) ,
82- useSearchParams : ( ) => [ { } , ( ) => undefined ] ,
84+ useSearchParams : ( ) => [ search , ( ) => undefined ] ,
8385 } ) )
8486
8587 mock . module ( "@opencode-ai/sdk/v2/client" , ( ) => ( {
@@ -129,7 +131,10 @@ beforeAll(async () => {
129131
130132 mock . module ( "@/context/tabs" , ( ) => ( {
131133 useTabs : ( ) => ( {
132- promoteDraft : ( ) => undefined ,
134+ draft : ( ) => ( { server : "project-server" } ) ,
135+ promoteDraft : ( draftID : string , session : { server : string ; sessionId : string } ) => {
136+ promotedDrafts . push ( { draftID, ...session } )
137+ } ,
133138 } ) ,
134139 } ) )
135140
@@ -234,7 +239,9 @@ beforeEach(() => {
234239 optimistic . length = 0
235240 optimisticSeeded . length = 0
236241 promoted . length = 0
242+ promotedDrafts . length = 0
237243 params = { }
244+ search = { }
238245 sentShell . length = 0
239246 syncedDirectories . length = 0
240247 selected = "/repo/worktree-a"
@@ -309,6 +316,33 @@ describe("prompt submit worktree selection", () => {
309316 expect ( enabledAutoAccept ) . toEqual ( [ { sessionID : "session-1" , directory : "/repo/worktree-a" } ] )
310317 } )
311318
319+ test ( "promotes drafts using the selected project's server" , async ( ) => {
320+ search = { draftId : "draft-1" }
321+ const submit = createPromptSubmit ( {
322+ prompt,
323+ info : ( ) => undefined ,
324+ imageAttachments : ( ) => [ ] ,
325+ commentCount : ( ) => 0 ,
326+ autoAccept : ( ) => false ,
327+ mode : ( ) => "normal" ,
328+ working : ( ) => false ,
329+ editor : ( ) => undefined ,
330+ queueScroll : ( ) => undefined ,
331+ promptLength : ( value ) => value . reduce ( ( sum , part ) => sum + ( "content" in part ? part . content . length : 0 ) , 0 ) ,
332+ addToHistory : ( ) => undefined ,
333+ resetHistoryNavigation : ( ) => undefined ,
334+ setMode : ( ) => undefined ,
335+ setPopover : ( ) => undefined ,
336+ newSessionWorktree : ( ) => selected ,
337+ onNewSessionWorktreeReset : ( ) => undefined ,
338+ onSubmit : ( ) => undefined ,
339+ } )
340+
341+ await submit . handleSubmit ( { preventDefault : ( ) => undefined } as unknown as Event )
342+
343+ expect ( promotedDrafts ) . toEqual ( [ { draftID : "draft-1" , server : "project-server" , sessionId : "session-1" } ] )
344+ } )
345+
312346 test ( "includes the selected variant on optimistic prompts" , async ( ) => {
313347 params = { id : "session-1" }
314348 variant = "high"
0 commit comments