11import { afterEach , beforeEach , describe , expect , it , vi } from "vitest" ;
2+ const renderState = vi . hoisted ( ( ) => ( {
3+ element : undefined as { props ?: { onSelect ?: ( sessionId : string ) => Promise < void > } } | undefined ,
4+ } ) ) ;
25
36import * as sessionModule from "../session.js" ;
47
8+ import { chat } from "./chat.js" ;
59import { listSessionsCommand } from "./ls.js" ;
610
711// Mock the session module
@@ -17,15 +21,22 @@ vi.mock("../ui/SessionSelector.js", () => ({
1721
1822// Mock ink
1923vi . mock ( "ink" , ( ) => ( {
20- render : vi . fn ( ( ) => ( { unmount : vi . fn ( ) } ) ) ,
24+ render : vi . fn ( ( element ) => {
25+ renderState . element = element ;
26+ return { unmount : vi . fn ( ) } ;
27+ } ) ,
2128} ) ) ;
2229
2330// Mock react with createContext
2431vi . mock ( "react" , async ( importOriginal ) => {
2532 const actual : any = await importOriginal ( ) ;
2633 return {
2734 ...actual ,
28- createElement : vi . fn ( ) ,
35+ createElement : vi . fn ( ( type : any , props : any , ...children : any [ ] ) => ( {
36+ type,
37+ props,
38+ children,
39+ } ) ) ,
2940 createContext : vi . fn ( ( ) => ( { Provider : vi . fn ( ) , Consumer : vi . fn ( ) } ) ) ,
3041 } ;
3142} ) ;
@@ -42,9 +53,13 @@ vi.mock("./remote.js", () => ({
4253
4354describe ( "listSessionsCommand" , ( ) => {
4455 const mockListSessions = vi . mocked ( sessionModule . listSessions ) ;
56+ const mockLoadSessionById = vi . mocked ( sessionModule . loadSessionById ) ;
57+ const mockChat = vi . mocked ( chat ) ;
58+
4559
4660 beforeEach ( ( ) => {
4761 vi . clearAllMocks ( ) ;
62+ renderState . element = undefined ;
4863 } ) ;
4964
5065 afterEach ( ( ) => {
@@ -152,4 +167,47 @@ describe("listSessionsCommand", () => {
152167
153168 consoleSpy . mockRestore ( ) ;
154169 } ) ;
170+
171+ it ( "should pass the selected session id to chat resume" , async ( ) => {
172+ const mockSessions = [
173+ {
174+ sessionId : "older-session" ,
175+ title : "Older session" ,
176+ dateCreated : "2023-01-01T09:00:00.000Z" ,
177+ workspaceDirectory : "/workspace" ,
178+ firstUserMessage : "Older message" ,
179+ isRemote : false ,
180+ } ,
181+ {
182+ sessionId : "newer-session" ,
183+ title : "Newer session" ,
184+ dateCreated : "2023-01-01T10:00:00.000Z" ,
185+ workspaceDirectory : "/workspace" ,
186+ firstUserMessage : "Newer message" ,
187+ isRemote : false ,
188+ } ,
189+ ] ;
190+ mockListSessions . mockResolvedValue ( mockSessions ) ;
191+ mockLoadSessionById . mockReturnValue ( {
192+ sessionId : "older-session" ,
193+ title : "Older session" ,
194+ workspaceDirectory : "/workspace" ,
195+ history : [ ] ,
196+ } as any ) ;
197+
198+ const commandPromise = listSessionsCommand ( { } ) ;
199+ await new Promise ( ( resolve ) => setImmediate ( resolve ) ) ;
200+
201+ const onSelect = renderState . element ?. props ?. onSelect ;
202+ expect ( onSelect ) . toBeDefined ( ) ;
203+ await onSelect ! ( "older-session" ) ;
204+ await commandPromise ;
205+
206+ expect ( mockLoadSessionById ) . toHaveBeenCalledWith ( "older-session" ) ;
207+ expect ( mockChat ) . toHaveBeenCalledWith ( undefined , {
208+ resume : true ,
209+ resumeSessionId : "older-session" ,
210+ headless : false ,
211+ } ) ;
212+ } ) ;
155213} ) ;
0 commit comments