@@ -8,11 +8,15 @@ const mockedTools = vi.hoisted(() => {
88 const launchBrowserWithOptions = vi . fn ( ) ;
99 const navigateCb = vi . fn ( ) ;
1010 const clickCb = vi . fn ( ) ;
11+ const snapshotCb = vi . fn ( ) ;
12+ const runCodeCb = vi . fn ( ) ;
1113
1214 return {
1315 launchBrowserWithOptions,
1416 navigateCb,
1517 clickCb,
18+ snapshotCb,
19+ runCodeCb,
1620 } ;
1721} ) ;
1822
@@ -33,16 +37,34 @@ vi.mock("@testplane/tools", () => {
3337 autoLaunchBrowser : true ,
3438 name : "navigate" ,
3539 description : "navigate" ,
40+ supportedTransports : [ "launch-browser" ] ,
3641 schema : { } ,
3742 cb : mockedTools . navigateCb ,
3843 } ,
3944 {
4045 kind : ToolKind . Action ,
4146 name : "click" ,
4247 description : "click" ,
48+ supportedTransports : [ "launch-browser" ] ,
4349 schema : { } ,
4450 cb : mockedTools . clickCb ,
4551 } ,
52+ {
53+ kind : ToolKind . Action ,
54+ name : "snapshot" ,
55+ description : "snapshot" ,
56+ supportedTransports : [ "launch-browser" , "attach-repl" ] ,
57+ schema : { } ,
58+ cb : mockedTools . snapshotCb ,
59+ } ,
60+ {
61+ kind : ToolKind . Action ,
62+ name : "run-code" ,
63+ description : "run-code" ,
64+ supportedTransports : [ "launch-browser" , "attach-repl" ] ,
65+ schema : { } ,
66+ cb : mockedTools . runCodeCb ,
67+ } ,
4668 ] ,
4769 } ;
4870} ) ;
@@ -79,6 +101,8 @@ describe("daemon/RequestHandler", () => {
79101 mockedTools . launchBrowserWithOptions . mockResolvedValue ( browser ) ;
80102 mockedTools . navigateCb . mockResolvedValue ( { content : [ { type : "text" , text : "ok" } ] , isError : false } ) ;
81103 mockedTools . clickCb . mockResolvedValue ( { content : [ { type : "text" , text : "ok" } ] , isError : false } ) ;
104+ mockedTools . snapshotCb . mockResolvedValue ( { content : [ { type : "text" , text : "ok" } ] , isError : false } ) ;
105+ mockedTools . runCodeCb . mockResolvedValue ( { content : [ { type : "text" , text : "ok" } ] , isError : false } ) ;
82106 } ) ;
83107
84108 it ( "does not auto-launch browser for action tools that require an existing session" , async ( ) => {
@@ -106,4 +130,49 @@ describe("daemon/RequestHandler", () => {
106130 expect ( response . isError ) . toBe ( false ) ;
107131 }
108132 } ) ;
133+
134+ it ( "returns a clear error for unsupported action tools in REPL sessions" , async ( ) => {
135+ const state = sessions . getOrCreate ( "default" ) ;
136+ state . browser = browser ;
137+ state . transport = "attach-repl" ;
138+
139+ const response = await handler . handleRequest ( createRequest ( "click" ) , sessions ) ;
140+
141+ expect ( mockedTools . clickCb ) . not . toHaveBeenCalled ( ) ;
142+ expect ( response . kind ) . toBe ( "result" ) ;
143+ if ( response . kind === "result" ) {
144+ expect ( response . isError ) . toBe ( true ) ;
145+ expect ( response . content [ 0 ] . text ) . toBe (
146+ "Tool 'click' is not yet supported with REPL sessions. Currently supported in REPL mode: snapshot, run-code." ,
147+ ) ;
148+ }
149+ } ) ;
150+
151+ it ( "allows snapshot in REPL sessions" , async ( ) => {
152+ const state = sessions . getOrCreate ( "default" ) ;
153+ state . browser = browser ;
154+ state . transport = "attach-repl" ;
155+
156+ const response = await handler . handleRequest ( createRequest ( "snapshot" ) , sessions ) ;
157+
158+ expect ( mockedTools . snapshotCb ) . toHaveBeenCalledWith ( { } , browser ) ;
159+ expect ( response . kind ) . toBe ( "result" ) ;
160+ if ( response . kind === "result" ) {
161+ expect ( response . isError ) . toBe ( false ) ;
162+ }
163+ } ) ;
164+
165+ it ( "allows run-code in REPL sessions" , async ( ) => {
166+ const state = sessions . getOrCreate ( "default" ) ;
167+ state . browser = browser ;
168+ state . transport = "attach-repl" ;
169+
170+ const response = await handler . handleRequest ( createRequest ( "run-code" ) , sessions ) ;
171+
172+ expect ( mockedTools . runCodeCb ) . toHaveBeenCalledWith ( { } , browser ) ;
173+ expect ( response . kind ) . toBe ( "result" ) ;
174+ if ( response . kind === "result" ) {
175+ expect ( response . isError ) . toBe ( false ) ;
176+ }
177+ } ) ;
109178} ) ;
0 commit comments