11import type { Tool } from "@modelcontextprotocol/sdk/types.js" ;
22import { beforeEach , describe , expect , it , vi } from "vitest" ;
33import type { ToolExecutor } from "../executor/executor-types" ;
4+ import { initRegistryFactory , resetRegistryFactory } from "../registry/registry-factory" ;
45import type { PackageRepository } from "./package-repository" ;
56import { PackageSO } from "./package-so" ;
67import type { MCPServerPackageConfig } from "./package-types" ;
@@ -10,13 +11,19 @@ describe("PackageSO", () => {
1011 let mockExecutor : ToolExecutor ;
1112
1213 beforeEach ( ( ) => {
14+ // Reset factory before each test
15+ resetRegistryFactory ( ) ;
16+
1317 // Mock PackageRepository
1418 mockRepository = {
1519 getPackageConfig : vi . fn ( ) ,
1620 getAllPackages : vi . fn ( ) ,
1721 exists : vi . fn ( ) ,
1822 } as unknown as PackageRepository ;
1923
24+ // Initialize Registry Factory with mock repository
25+ initRegistryFactory ( mockRepository ) ;
26+
2027 // Mock ToolExecutor
2128 mockExecutor = {
2229 listTools : vi . fn ( ) ,
@@ -41,6 +48,7 @@ describe("PackageSO", () => {
4148 validated : true ,
4249 } ;
4350
51+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
4452 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
4553 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( {
4654 [ packageName ] : mockPackageInfo ,
@@ -55,6 +63,7 @@ describe("PackageSO", () => {
5563 expect ( packageSO . description ) . toBe ( "A server for filesystem operations" ) ;
5664 expect ( packageSO . category ) . toBe ( "filesystem" ) ;
5765 expect ( packageSO . validated ) . toBe ( true ) ;
66+ expect ( mockRepository . exists ) . toHaveBeenCalledWith ( packageName ) ;
5867 expect ( mockRepository . getPackageConfig ) . toHaveBeenCalledWith ( packageName ) ;
5968 expect ( mockRepository . getAllPackages ) . toHaveBeenCalled ( ) ;
6069 } ) ;
@@ -70,6 +79,7 @@ describe("PackageSO", () => {
7079 description : "A new package" ,
7180 } ;
7281
82+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
7383 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
7484 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( { } ) ;
7585
@@ -94,6 +104,7 @@ describe("PackageSO", () => {
94104 description : null ,
95105 } as unknown as MCPServerPackageConfig ;
96106
107+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
97108 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
98109 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( { } ) ;
99110
@@ -140,6 +151,7 @@ describe("PackageSO", () => {
140151 } ,
141152 ] ;
142153
154+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
143155 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
144156 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( { } ) ;
145157 vi . spyOn ( mockExecutor , "listTools" ) . mockResolvedValue ( mockTools ) ;
@@ -168,6 +180,7 @@ describe("PackageSO", () => {
168180 } ;
169181 const errorMessage = "Failed to list tools" ;
170182
183+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
171184 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
172185 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( { } ) ;
173186 vi . spyOn ( mockExecutor , "listTools" ) . mockRejectedValue ( new Error ( errorMessage ) ) ;
@@ -196,6 +209,7 @@ describe("PackageSO", () => {
196209 description : "Test description" ,
197210 } ;
198211
212+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
199213 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
200214 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( { } ) ;
201215 vi . spyOn ( mockExecutor , "executeTool" ) . mockResolvedValue ( mockResult ) ;
@@ -231,6 +245,7 @@ describe("PackageSO", () => {
231245 description : "Test description" ,
232246 } ;
233247
248+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
234249 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
235250 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( { } ) ;
236251 vi . spyOn ( mockExecutor , "executeTool" ) . mockResolvedValue ( mockResult ) ;
@@ -265,6 +280,7 @@ describe("PackageSO", () => {
265280 description : "Test description" ,
266281 } ;
267282
283+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
268284 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
269285 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( { } ) ;
270286 vi . spyOn ( mockExecutor , "executeTool" ) . mockRejectedValue ( new Error ( errorMessage ) ) ;
@@ -303,6 +319,7 @@ describe("PackageSO", () => {
303319 } ,
304320 ] ;
305321
322+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
306323 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
307324 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( {
308325 [ packageName ] : mockPackageInfo ,
@@ -316,11 +333,11 @@ describe("PackageSO", () => {
316333
317334 // Assert
318335 expect ( detail ) . toEqual ( {
336+ type : "mcp-server" ,
337+ runtime : "node" ,
319338 name : "Test Package" ,
320339 packageName : "@test/package" ,
321340 description : "A test package for demonstration" ,
322- category : "testing" ,
323- validated : true ,
324341 tools : mockTools ,
325342 } ) ;
326343 } ) ;
@@ -336,6 +353,7 @@ describe("PackageSO", () => {
336353 description : "Test description" ,
337354 } ;
338355
356+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
339357 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
340358 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( { } ) ;
341359 vi . spyOn ( mockExecutor , "listTools" ) . mockRejectedValue ( new Error ( "Failed to get tools" ) ) ;
@@ -371,6 +389,7 @@ describe("PackageSO", () => {
371389 } ;
372390 const mockTools : Tool [ ] = [ ] ;
373391
392+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
374393 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
375394 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( { } ) ;
376395 vi . spyOn ( mockExecutor , "listTools" ) . mockResolvedValue ( mockTools ) ;
@@ -382,12 +401,12 @@ describe("PackageSO", () => {
382401
383402 // Assert
384403 expect ( detail ) . toEqual ( {
404+ type : "mcp-server" ,
405+ runtime : "node" ,
385406 name : "Minimal Package" ,
386407 packageName : "@test/minimal-package" ,
387408 description : "A minimal package" ,
388- category : undefined ,
389- validated : undefined ,
390- tools : mockTools ,
409+ tools : [ ] ,
391410 } ) ;
392411 } ) ;
393412 } ) ;
@@ -409,6 +428,7 @@ describe("PackageSO", () => {
409428 validated : false ,
410429 } ;
411430
431+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
412432 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
413433 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( {
414434 [ packageName ] : mockPackageInfo ,
@@ -437,6 +457,7 @@ describe("PackageSO", () => {
437457 description : "Test description" ,
438458 } ;
439459
460+ vi . spyOn ( mockRepository , "exists" ) . mockReturnValue ( true ) ;
440461 vi . spyOn ( mockRepository , "getPackageConfig" ) . mockReturnValue ( mockConfig ) ;
441462 vi . spyOn ( mockRepository , "getAllPackages" ) . mockReturnValue ( { } ) ;
442463
0 commit comments