11import { afterEach , beforeEach , describe , expect , it , vi } from "vitest" ;
2+ const renderState = vi . hoisted ( ( ) => ( {
3+ element : undefined as
4+ | { props ?: { onSelect ?: ( sessionId : string ) => Promise < void > } }
5+ | undefined ,
6+ } ) ) ;
27
38import * as sessionModule from "../session.js" ;
49
10+ import { chat } from "./chat.js" ;
511import { listSessionsCommand } from "./ls.js" ;
612
713// Mock the session module
@@ -17,15 +23,22 @@ vi.mock("../ui/SessionSelector.js", () => ({
1723
1824// Mock ink
1925vi . mock ( "ink" , ( ) => ( {
20- render : vi . fn ( ( ) => ( { unmount : vi . fn ( ) } ) ) ,
26+ render : vi . fn ( ( element ) => {
27+ renderState . element = element ;
28+ return { unmount : vi . fn ( ) } ;
29+ } ) ,
2130} ) ) ;
2231
2332// Mock react with createContext
2433vi . mock ( "react" , async ( importOriginal ) => {
2534 const actual : any = await importOriginal ( ) ;
2635 return {
2736 ...actual ,
28- createElement : vi . fn ( ) ,
37+ createElement : vi . fn ( ( type : any , props : any , ...children : any [ ] ) => ( {
38+ type,
39+ props,
40+ children,
41+ } ) ) ,
2942 createContext : vi . fn ( ( ) => ( { Provider : vi . fn ( ) , Consumer : vi . fn ( ) } ) ) ,
3043 } ;
3144} ) ;
@@ -42,9 +55,12 @@ vi.mock("./remote.js", () => ({
4255
4356describe ( "listSessionsCommand" , ( ) => {
4457 const mockListSessions = vi . mocked ( sessionModule . listSessions ) ;
58+ const mockLoadSessionById = vi . mocked ( sessionModule . loadSessionById ) ;
59+ const mockChat = vi . mocked ( chat ) ;
4560
4661 beforeEach ( ( ) => {
4762 vi . clearAllMocks ( ) ;
63+ renderState . element = undefined ;
4864 } ) ;
4965
5066 afterEach ( ( ) => {
@@ -152,4 +168,47 @@ describe("listSessionsCommand", () => {
152168
153169 consoleSpy . mockRestore ( ) ;
154170 } ) ;
171+
172+ it ( "should pass the selected session id to chat resume" , async ( ) => {
173+ const mockSessions = [
174+ {
175+ sessionId : "older-session" ,
176+ title : "Older session" ,
177+ dateCreated : "2023-01-01T09:00:00.000Z" ,
178+ workspaceDirectory : "/workspace" ,
179+ firstUserMessage : "Older message" ,
180+ isRemote : false ,
181+ } ,
182+ {
183+ sessionId : "newer-session" ,
184+ title : "Newer session" ,
185+ dateCreated : "2023-01-01T10:00:00.000Z" ,
186+ workspaceDirectory : "/workspace" ,
187+ firstUserMessage : "Newer message" ,
188+ isRemote : false ,
189+ } ,
190+ ] ;
191+ mockListSessions . mockResolvedValue ( mockSessions ) ;
192+ mockLoadSessionById . mockReturnValue ( {
193+ sessionId : "older-session" ,
194+ title : "Older session" ,
195+ workspaceDirectory : "/workspace" ,
196+ history : [ ] ,
197+ } as any ) ;
198+
199+ const commandPromise = listSessionsCommand ( { } ) ;
200+ await new Promise ( ( resolve ) => setImmediate ( resolve ) ) ;
201+
202+ const onSelect = renderState . element ?. props ?. onSelect ;
203+ expect ( onSelect ) . toBeDefined ( ) ;
204+ await onSelect ! ( "older-session" ) ;
205+ await commandPromise ;
206+
207+ expect ( mockLoadSessionById ) . toHaveBeenCalledWith ( "older-session" ) ;
208+ expect ( mockChat ) . toHaveBeenCalledWith ( undefined , {
209+ resume : true ,
210+ resumeSessionId : "older-session" ,
211+ headless : false ,
212+ } ) ;
213+ } ) ;
155214} ) ;
0 commit comments