Skip to content

Commit 4667e82

Browse files
author
Akila Tennakoon
committed
tests and lint
1 parent c558f4b commit 4667e82

File tree

5 files changed

+74
-12
lines changed

5 files changed

+74
-12
lines changed

src/cfnEnvironments/CfnEnvironmentRequestType.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export type DeploymentConfig = {
1616
includeNestedStacks?: boolean;
1717
importExistingResources?: boolean;
1818
onStackFailure?: OnStackFailure;
19-
deploymentMode?: DeploymentMode
19+
deploymentMode?: DeploymentMode;
2020
};
2121

2222
export type ParsedCfnEnvironmentFile = {

src/services/CfnService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ import {
5858
ChangeSetType,
5959
} from '@aws-sdk/client-cloudformation';
6060
import { WaiterConfiguration, WaiterResult } from '@smithy/util-waiter';
61+
import { DeploymentMode } from '../stacks/actions/StackActionRequestType';
6162
import { Count } from '../telemetry/TelemetryDecorator';
6263
import { AwsClient } from './AwsClient';
63-
import { DeploymentMode } from '../stacks/actions/StackActionRequestType';
6464

6565
export class CfnService {
6666
public constructor(private readonly awsClient: AwsClient) {}

src/services/CfnServiceV2.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@ import {
1111
ResourceChangeDetail,
1212
ChangeSetType,
1313
} from '@aws-sdk/client-cloudformation';
14+
import { DeploymentMode } from '../stacks/actions/StackActionRequestType';
1415
import { Measure } from '../telemetry/TelemetryDecorator';
1516
import { CFN_CLIENT_PATH } from '../utils/ClientUtil';
1617
import { DynamicModuleLoader } from '../utils/DynamicModuleLoader';
1718
import { CfnService } from './CfnService';
18-
import { DeploymentMode } from '../stacks/actions/StackActionRequestType';
19-
import { LoggerFactory } from '../telemetry/LoggerFactory';
2019

2120
export type ResourceTargetDefinitionV2 = ResourceTargetDefinition & {
2221
BeforeValueFrom?: string;

src/stacks/actions/StackActionOperations.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,19 @@ function logCleanupError(error: unknown, workflowId: string, changeSetName: stri
4343

4444
export function computeEligibleDeploymentMode(
4545
changeSetType: ChangeSetType,
46-
deploymentMode?: DeploymentMode | undefined,
47-
resourcesToImport?: ResourceToImport[] | undefined,
48-
includeNestedStacks?: boolean | undefined,
49-
onStackFailure?: OnStackFailure | undefined,
46+
deploymentMode?: DeploymentMode,
47+
importExistingResources?: boolean,
48+
resourcesToImport?: ResourceToImport[],
49+
includeNestedStacks?: boolean,
50+
onStackFailure?: OnStackFailure,
5051
): DeploymentMode | undefined {
5152
if (!deploymentMode) {
5253
return undefined;
5354
}
5455

5556
if (deploymentMode === DeploymentMode.REVERT_DRIFT) {
5657
// import is not supported
57-
if (resourcesToImport && resourcesToImport.length > 0) {
58+
if (importExistingResources || (resourcesToImport && resourcesToImport.length > 0)) {
5859
return undefined;
5960
}
6061

@@ -68,8 +69,8 @@ export function computeEligibleDeploymentMode(
6869
return undefined;
6970
}
7071

71-
// rollback/delete is not supported
72-
if (onStackFailure === OnStackFailure.DO_NOTHING) {
72+
// only ROLLBACK is supported
73+
if (onStackFailure && onStackFailure !== OnStackFailure.ROLLBACK) {
7374
return undefined;
7475
}
7576
}
@@ -118,6 +119,7 @@ export async function processChangeSet(
118119
const deploymentMode = computeEligibleDeploymentMode(
119120
changeSetType,
120121
params.deploymentMode,
122+
params.importExistingResources,
121123
params.resourcesToImport,
122124
params.includeNestedStacks,
123125
params.onStackFailure,

tst/unit/stackActions/StackActionWorkflowOperations.test.ts

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Change, ChangeSetType, StackStatus } from '@aws-sdk/client-cloudformation';
1+
import { Change, ChangeSetType, StackStatus, OnStackFailure } from '@aws-sdk/client-cloudformation';
22
import { WaiterState } from '@smithy/util-waiter';
33
import { DateTime } from 'luxon';
44
import { stubInterface } from 'ts-sinon';
@@ -18,12 +18,14 @@ import {
1818
parseValidationEvents,
1919
publishValidationDiagnostics,
2020
isStackInReview,
21+
computeEligibleDeploymentMode,
2122
} from '../../../src/stacks/actions/StackActionOperations';
2223
import {
2324
CreateValidationParams,
2425
StackActionPhase,
2526
StackActionState,
2627
ValidationDetail,
28+
DeploymentMode,
2729
} from '../../../src/stacks/actions/StackActionRequestType';
2830
import { StackActionWorkflowState } from '../../../src/stacks/actions/StackActionWorkflowType';
2931
import { ExtensionName } from '../../../src/utils/ExtensionConfig';
@@ -578,4 +580,63 @@ describe('StackActionWorkflowOperations', () => {
578580
expect(result).toBe(true);
579581
});
580582
});
583+
584+
describe('computeEligibleDeploymentMode', () => {
585+
it('should return undefined when deploymentMode is not provided', () => {
586+
const result = computeEligibleDeploymentMode(ChangeSetType.UPDATE, undefined);
587+
expect(result).toBeUndefined();
588+
});
589+
590+
it('should return deploymentMode when all conditions are met for REVERT_DRIFT', () => {
591+
const result = computeEligibleDeploymentMode(
592+
ChangeSetType.UPDATE,
593+
DeploymentMode.REVERT_DRIFT,
594+
false,
595+
undefined,
596+
false,
597+
OnStackFailure.ROLLBACK,
598+
);
599+
expect(result).toBe(DeploymentMode.REVERT_DRIFT);
600+
});
601+
602+
it('should return undefined when changeSetType is CREATE', () => {
603+
const result = computeEligibleDeploymentMode(ChangeSetType.CREATE, DeploymentMode.REVERT_DRIFT);
604+
expect(result).toBeUndefined();
605+
});
606+
607+
it('should return undefined when importExistingResources is true', () => {
608+
const result = computeEligibleDeploymentMode(ChangeSetType.UPDATE, DeploymentMode.REVERT_DRIFT, true);
609+
expect(result).toBeUndefined();
610+
});
611+
612+
it('should return undefined when resourcesToImport has items', () => {
613+
const result = computeEligibleDeploymentMode(ChangeSetType.UPDATE, DeploymentMode.REVERT_DRIFT, false, [
614+
{ LogicalResourceId: 'test', ResourceType: 'AWS::S3::Bucket', ResourceIdentifier: {} },
615+
]);
616+
expect(result).toBeUndefined();
617+
});
618+
619+
it('should return undefined when includeNestedStacks is true', () => {
620+
const result = computeEligibleDeploymentMode(
621+
ChangeSetType.UPDATE,
622+
DeploymentMode.REVERT_DRIFT,
623+
false,
624+
undefined,
625+
true,
626+
);
627+
expect(result).toBeUndefined();
628+
});
629+
630+
it('should return undefined when onStackFailure is DO_NOTHING', () => {
631+
const result = computeEligibleDeploymentMode(
632+
ChangeSetType.UPDATE,
633+
DeploymentMode.REVERT_DRIFT,
634+
false,
635+
undefined,
636+
false,
637+
OnStackFailure.DO_NOTHING,
638+
);
639+
expect(result).toBeUndefined();
640+
});
641+
});
581642
});

0 commit comments

Comments
 (0)