1- import { Capability , StackSummary , StackStatus } from '@aws-sdk/client-cloudformation' ;
1+ import { Capability , StackSummary , StackStatus , StackResourceSummary } from '@aws-sdk/client-cloudformation' ;
22import { StubbedInstance } from 'ts-sinon' ;
33import { describe , it , expect , vi , beforeEach } from 'vitest' ;
44import { CancellationToken , ResponseError , ErrorCodes } from 'vscode-languageserver' ;
@@ -15,6 +15,7 @@ import {
1515 getValidationStatusHandler ,
1616 getDeploymentStatusHandler ,
1717 listStacksHandler ,
18+ listStackResourcesHandler ,
1819 describeValidationStatusHandler ,
1920 describeDeploymentStatusHandler ,
2021 getTemplateResourcesHandler ,
@@ -31,7 +32,12 @@ import {
3132 StackActionPhase ,
3233 StackActionState ,
3334} from '../../../src/stacks/actions/StackActionRequestType' ;
34- import { ListStacksParams , ListStacksResult } from '../../../src/stacks/StackRequestType' ;
35+ import {
36+ ListStacksParams ,
37+ ListStacksResult ,
38+ ListStackResourcesParams ,
39+ ListStackResourcesResult ,
40+ } from '../../../src/stacks/StackRequestType' ;
3541import {
3642 createMockComponents ,
3743 createMockSyntaxTreeManager ,
@@ -453,6 +459,50 @@ describe('StackActionHandler', () => {
453459 } ) ;
454460 } ) ;
455461
462+ describe ( 'listStackResourcesHandler' , ( ) => {
463+ it ( 'should return resources on success' , async ( ) => {
464+ const mockResources : StackResourceSummary [ ] = [
465+ {
466+ LogicalResourceId : 'MyBucket' ,
467+ ResourceType : 'AWS::S3::Bucket' ,
468+ ResourceStatus : 'CREATE_COMPLETE' ,
469+ } as StackResourceSummary ,
470+ ] ;
471+
472+ mockComponents . cfnService . listStackResources . resolves ( {
473+ StackResourceSummaries : mockResources ,
474+ $metadata : { } ,
475+ } ) ;
476+
477+ const handler = listStackResourcesHandler ( mockComponents ) ;
478+ const params : ListStackResourcesParams = { stackName : 'test-stack' } ;
479+ const result = ( await handler ( params , { } as any ) ) as ListStackResourcesResult ;
480+
481+ expect ( result . resources ) . toEqual ( mockResources ) ;
482+ expect ( mockComponents . cfnService . listStackResources . calledWith ( { StackName : 'test-stack' } ) ) . toBe ( true ) ;
483+ } ) ;
484+
485+ it ( 'should return empty array on error' , async ( ) => {
486+ mockComponents . cfnService . listStackResources . rejects ( new Error ( 'API Error' ) ) ;
487+
488+ const handler = listStackResourcesHandler ( mockComponents ) ;
489+ const params : ListStackResourcesParams = { stackName : 'test-stack' } ;
490+ const result = ( await handler ( params , { } as any ) ) as ListStackResourcesResult ;
491+
492+ expect ( result . resources ) . toEqual ( [ ] ) ;
493+ } ) ;
494+
495+ it ( 'should handle undefined StackResourceSummaries' , async ( ) => {
496+ mockComponents . cfnService . listStackResources . resolves ( { StackResourceSummaries : undefined , $metadata : { } } ) ;
497+
498+ const handler = listStackResourcesHandler ( mockComponents ) ;
499+ const params : ListStackResourcesParams = { stackName : 'test-stack' } ;
500+ const result = ( await handler ( params , { } as any ) ) as ListStackResourcesResult ;
501+
502+ expect ( result . resources ) . toEqual ( [ ] ) ;
503+ } ) ;
504+ } ) ;
505+
456506 describe ( 'getTemplateResourcesHandler' , ( ) => {
457507 it ( 'returns empty array when no syntax tree found' , ( ) => {
458508 const templateUri : TemplateUri = 'test://template.yaml' ;
0 commit comments