@@ -11,6 +11,7 @@ import {describe, it} from 'node:test';
1111import {
1212 installExtension ,
1313 uninstallExtension ,
14+ listExtensions ,
1415} from '../../src/tools/extensions.js' ;
1516import { withMcpContext } from '../utils.js' ;
1617
@@ -71,4 +72,36 @@ describe('extension', () => {
7172 ) ;
7273 } ) ;
7374 } ) ;
75+ it ( 'lists installed extensions' , async ( ) => {
76+ await withMcpContext ( async ( response , context ) => {
77+ await installExtension . handler (
78+ { params : { path : EXTENSION_PATH } } ,
79+ response ,
80+ context ,
81+ ) ;
82+
83+ await listExtensions . handler ( { params : { } } , response , context ) ;
84+
85+ const listResponseLine = response . responseLines [ 1 ] ;
86+ assert . ok ( listResponseLine , 'Response should not be empty' ) ;
87+ const extensions = JSON . parse ( listResponseLine ) ;
88+ assert . strictEqual ( extensions . length , 1 ) ;
89+ assert . strictEqual ( extensions [ 0 ] . Name , 'Test Extension' ) ;
90+ assert . strictEqual ( extensions [ 0 ] . Version , '1.0' ) ;
91+ assert . strictEqual ( extensions [ 0 ] . Enabled , 'Yes' ) ;
92+
93+ const extensionId = extensions [ 0 ] . ID ;
94+ await uninstallExtension . handler (
95+ { params : { id : extensionId } } ,
96+ response ,
97+ context ,
98+ ) ;
99+
100+ response . resetResponseLineForTesting ( ) ;
101+ await listExtensions . handler ( { params : { } } , response , context ) ;
102+
103+ const emptyListResponse = response . responseLines [ 0 ] ;
104+ assert . strictEqual ( emptyListResponse , 'No extensions installed.' ) ;
105+ } ) ;
106+ } ) ;
74107} ) ;
0 commit comments