// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors
// SPDX-License-Identifier: Apache-2.0
import {
CloudFormationClient,
DescribeStackResourcesCommand,
DescribeStacksCommand,
ListStacksCommand,
} from '@aws-sdk/client-cloudformation';
import { mockClient } from 'aws-sdk-client-mock';
import { main } from '../index';
describe('list command', () => {
beforeAll(() => {
const cfMock = mockClient(CloudFormationClient);
cfMock.on(ListStacksCommand).resolves({
StackSummaries: [
{
StackId: '123',
StackName: 'medplum-dev',
StackStatus: 'CREATE_COMPLETE',
CreationTime: new Date(),
},
{
StackId: '144',
StackName: 'medplum-in-progress',
StackStatus: 'UPDATE_IN_PROGRESS',
CreationTime: new Date(),
},
{
StackId: '456',
StackName: 'deleted-stack',
StackStatus: 'DELETE_COMPLETE',
CreationTime: new Date(),
},
{
StackId: '789',
StackName: 'no-details-stack',
StackStatus: 'CREATE_COMPLETE',
CreationTime: new Date(),
},
],
});
cfMock.on(DescribeStacksCommand, { StackName: 'medplum-dev' }).resolves({
Stacks: [
{
StackId: '123',
StackName: 'medplum-dev',
StackStatus: 'CREATE_COMPLETE',
CreationTime: new Date(),
Tags: [
{
Key: 'medplum:environment',
Value: 'dev',
},
],
},
],
});
cfMock.on(DescribeStackResourcesCommand).resolves({
StackResources: [
{
ResourceType: 'AWS::ECS::Cluster',
ResourceStatus: 'CREATE_COMPLETE',
LogicalResourceId: 'MedplumEcsCluster',
PhysicalResourceId: 'medplum-dev-MedplumEcsCluster-123',
Timestamp: new Date(),
},
{
ResourceType: 'AWS::ECS::Service',
ResourceStatus: 'CREATE_COMPLETE',
LogicalResourceId: 'MedplumEcsService',
PhysicalResourceId: 'medplum-dev-MedplumEcsService-123',
Timestamp: new Date(),
},
{
ResourceType: 'AWS::S3::Bucket',
ResourceStatus: 'CREATE_COMPLETE',
LogicalResourceId: 'FrontEndAppBucket',
PhysicalResourceId: 'app.test.medplum.com',
Timestamp: new Date(),
},
{
ResourceType: 'AWS::S3::Bucket',
ResourceStatus: 'CREATE_COMPLETE',
LogicalResourceId: 'StorageStorageBucket',
PhysicalResourceId: 'storage.test.medplum.com',
Timestamp: new Date(),
},
{
ResourceType: 'AWS::EC2::SecurityGroup',
ResourceStatus: 'CREATE_COMPLETE',
LogicalResourceId: 'SecurityGroup',
PhysicalResourceId: 'sg-123',
Timestamp: new Date(),
},
{
ResourceType: 'AWS::CloudFront::Distribution',
ResourceStatus: 'CREATE_COMPLETE',
LogicalResourceId: 'FrontEndAppDistribution',
PhysicalResourceId: '123',
Timestamp: new Date(),
},
],
});
});
test('List command', async () => {
console.log = jest.fn();
await main(['node', 'index.js', 'aws', 'list']);
expect(console.log).toHaveBeenCalledWith('Stack ID: 123');
});
});