@@ -554,11 +554,19 @@ describe("Workflow Integration Tests", () => {
554554 tools : "owner/mcp1, another/mcp2:specific_tool" ,
555555 } ;
556556
557- mockLoadPackageFromHub . mockResolvedValue ( workflowWithTools ) ;
558- mockLoadPackagesFromHub . mockResolvedValue ( [
559- { name : "mcp1" } ,
560- { name : "mcp2" } ,
561- ] ) ;
557+ // Clear the default mock and setup specific mocks
558+ mockLoadPackageFromHub . mockReset ( ) ;
559+ // First call loads the workflow file
560+ mockLoadPackageFromHub . mockResolvedValueOnce ( workflowWithTools ) ;
561+ // Second call loads the workflow model
562+ mockLoadPackageFromHub . mockResolvedValueOnce ( {
563+ name : "gpt-4-workflow" ,
564+ provider : "openai" ,
565+ } ) ;
566+ // Third call loads mcp1
567+ mockLoadPackageFromHub . mockResolvedValueOnce ( { name : "mcp1" } ) ;
568+ // Fourth call loads mcp2
569+ mockLoadPackageFromHub . mockResolvedValueOnce ( { name : "mcp2" } ) ;
562570
563571 await workflowService . initialize ( "owner/workflow" ) ;
564572
@@ -573,6 +581,7 @@ describe("Workflow Integration Tests", () => {
573581 ) ;
574582
575583 expect ( enhancedConfig . mcpServers ) . toHaveLength ( 3 ) ;
584+ // MCPs are prepended in the order they are loaded
576585 expect ( enhancedConfig . mcpServers ?. [ 0 ] ) . toEqual ( { name : "mcp1" } ) ;
577586 expect ( enhancedConfig . mcpServers ?. [ 1 ] ) . toEqual ( { name : "mcp2" } ) ;
578587 expect ( enhancedConfig . mcpServers ?. [ 2 ] ) . toEqual ( { name : "existing-mcp" } ) ;
@@ -584,7 +593,8 @@ describe("Workflow Integration Tests", () => {
584593 tools : undefined ,
585594 } ;
586595
587- mockLoadPackageFromHub . mockResolvedValue ( workflowWithoutTools ) ;
596+ mockLoadPackageFromHub . mockReset ( ) ;
597+ mockLoadPackageFromHub . mockResolvedValueOnce ( workflowWithoutTools ) ;
588598 await workflowService . initialize ( "owner/workflow" ) ;
589599
590600 const baseConfig = {
@@ -607,13 +617,22 @@ describe("Workflow Integration Tests", () => {
607617 tools : "owner/mcp1, owner/mcp1:tool1, owner/mcp1:tool2" ,
608618 } ;
609619
610- mockLoadPackageFromHub . mockResolvedValue ( workflowWithDuplicateTools ) ;
611- mockLoadPackagesFromHub . mockResolvedValue ( [ { name : "mcp1" } ] ) ;
620+ // Clear the default mock and setup specific mocks
621+ mockLoadPackageFromHub . mockReset ( ) ;
622+ // First call loads the workflow file
623+ mockLoadPackageFromHub . mockResolvedValueOnce ( workflowWithDuplicateTools ) ;
624+ // Second call loads the workflow model
625+ mockLoadPackageFromHub . mockResolvedValueOnce ( {
626+ name : "gpt-4-workflow" ,
627+ provider : "openai" ,
628+ } ) ;
629+ // Third call: The parseWorkflowTools will extract only unique MCP servers, so only one loadPackageFromHub call
630+ mockLoadPackageFromHub . mockResolvedValueOnce ( { name : "mcp1" } ) ;
612631
613632 await workflowService . initialize ( "owner/workflow" ) ;
614633
615634 const baseConfig = {
616- mcpServers : [ { name : "mcp1 " } ] , // Already exists
635+ mcpServers : [ { name : "existing-mcp " } ] , // Changed to avoid confusion
617636 } ;
618637
619638 const enhancedConfig = await configEnhancer . enhanceConfig (
@@ -622,10 +641,10 @@ describe("Workflow Integration Tests", () => {
622641 workflowService . getState ( ) ,
623642 ) ;
624643
625- // Should not deduplicate since we simplified the logic
644+ // parseWorkflowTools deduplicates, so we only get mcp1 once
626645 expect ( enhancedConfig . mcpServers ) . toHaveLength ( 2 ) ;
627646 expect ( enhancedConfig . mcpServers ?. [ 0 ] ) . toEqual ( { name : "mcp1" } ) ;
628- expect ( enhancedConfig . mcpServers ?. [ 1 ] ) . toEqual ( { name : "mcp1 " } ) ;
647+ expect ( enhancedConfig . mcpServers ?. [ 1 ] ) . toEqual ( { name : "existing-mcp " } ) ;
629648 } ) ;
630649 } ) ;
631650} ) ;
0 commit comments