@@ -131,3 +131,78 @@ describe('createExternalGatewayTarget', () => {
131131 expect ( target . outboundAuth ) . toEqual ( { type : 'API_KEY' , credentialName : 'my-cred' } ) ;
132132 } ) ;
133133} ) ;
134+
135+ import { createGatewayFromWizard , getUnassignedTargets } from '../create-mcp.js' ;
136+ import type { AddGatewayConfig } from '../../../tui/screens/mcp/types.js' ;
137+
138+ describe ( 'getUnassignedTargets' , ( ) => {
139+ afterEach ( ( ) => vi . clearAllMocks ( ) ) ;
140+
141+ it ( 'returns unassigned targets from mcp spec' , async ( ) => {
142+ mockConfigExists . mockReturnValue ( true ) ;
143+ mockReadMcpSpec . mockResolvedValue ( {
144+ agentCoreGateways : [ ] ,
145+ unassignedTargets : [ { name : 't1' } , { name : 't2' } ] ,
146+ } ) ;
147+
148+ const result = await getUnassignedTargets ( ) ;
149+ expect ( result ) . toHaveLength ( 2 ) ;
150+ expect ( result [ 0 ] ! . name ) . toBe ( 't1' ) ;
151+ } ) ;
152+
153+ it ( 'returns empty array when no mcp config exists' , async ( ) => {
154+ mockConfigExists . mockReturnValue ( false ) ;
155+ expect ( await getUnassignedTargets ( ) ) . toEqual ( [ ] ) ;
156+ } ) ;
157+
158+ it ( 'returns empty array when unassignedTargets field is missing' , async ( ) => {
159+ mockConfigExists . mockReturnValue ( true ) ;
160+ mockReadMcpSpec . mockResolvedValue ( { agentCoreGateways : [ ] } ) ;
161+ expect ( await getUnassignedTargets ( ) ) . toEqual ( [ ] ) ;
162+ } ) ;
163+ } ) ;
164+
165+ describe ( 'createGatewayFromWizard with selectedTargets' , ( ) => {
166+ afterEach ( ( ) => vi . clearAllMocks ( ) ) ;
167+
168+ function makeGatewayConfig ( overrides : Partial < AddGatewayConfig > = { } ) : AddGatewayConfig {
169+ return {
170+ name : 'new-gateway' ,
171+ authorizerType : 'AWS_IAM' ,
172+ ...overrides ,
173+ } as AddGatewayConfig ;
174+ }
175+
176+ it ( 'moves selected targets to new gateway and removes from unassigned' , async ( ) => {
177+ mockConfigExists . mockReturnValue ( true ) ;
178+ mockReadMcpSpec . mockResolvedValue ( {
179+ agentCoreGateways : [ ] ,
180+ unassignedTargets : [
181+ { name : 'target-a' , targetType : 'mcpServer' } ,
182+ { name : 'target-b' , targetType : 'mcpServer' } ,
183+ { name : 'target-c' , targetType : 'mcpServer' } ,
184+ ] ,
185+ } ) ;
186+
187+ await createGatewayFromWizard ( makeGatewayConfig ( { selectedTargets : [ 'target-a' , 'target-c' ] } ) ) ;
188+
189+ const written = mockWriteMcpSpec . mock . calls [ 0 ] ! [ 0 ] ;
190+ const gateway = written . agentCoreGateways . find ( ( g : { name : string } ) => g . name === 'new-gateway' ) ;
191+ expect ( gateway . targets ) . toHaveLength ( 2 ) ;
192+ expect ( gateway . targets [ 0 ] ! . name ) . toBe ( 'target-a' ) ;
193+ expect ( gateway . targets [ 1 ] ! . name ) . toBe ( 'target-c' ) ;
194+ expect ( written . unassignedTargets ) . toHaveLength ( 1 ) ;
195+ expect ( written . unassignedTargets [ 0 ] ! . name ) . toBe ( 'target-b' ) ;
196+ } ) ;
197+
198+ it ( 'creates gateway with empty targets when no selectedTargets' , async ( ) => {
199+ mockConfigExists . mockReturnValue ( true ) ;
200+ mockReadMcpSpec . mockResolvedValue ( { agentCoreGateways : [ ] } ) ;
201+
202+ await createGatewayFromWizard ( makeGatewayConfig ( ) ) ;
203+
204+ const written = mockWriteMcpSpec . mock . calls [ 0 ] ! [ 0 ] ;
205+ const gateway = written . agentCoreGateways . find ( ( g : { name : string } ) => g . name === 'new-gateway' ) ;
206+ expect ( gateway . targets ) . toHaveLength ( 0 ) ;
207+ } ) ;
208+ } ) ;
0 commit comments