Skip to content

Commit 6f6be66

Browse files
committed
refactor(import): extract shared CDK import pipeline to eliminate duplication
The three import handlers (import-runtime, import-memory, actions) all repeated the same CDK build/synth/bootstrap/publish/phase1/phase2/state-update pipeline (~120 lines each). Extract this into executeCdkImportPipeline() in a new import-pipeline.ts module. Also add resolveImportContext() and failResult() helpers to import-utils.ts for shared setup and error handling. Net effect: -335 lines, zero behavior change, all 260 tests pass. Constraint: Must not change any observable behavior — pure structural refactor Rejected: Full strategy-pattern abstraction | over-engineering for 2 concrete cases Confidence: high Scope-risk: moderate Not-tested: actions.ts YAML import path with real AWS (infra limitation)
1 parent 7a1b407 commit 6f6be66

6 files changed

Lines changed: 542 additions & 728 deletions

File tree

src/cli/commands/import/__tests__/import-runtime-handler.test.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,37 @@ import { afterEach, describe, expect, it, vi } from 'vitest';
1616

1717
const mockResolveProjectContext = vi.fn();
1818
const mockResolveImportTarget = vi.fn();
19+
const mockResolveImportContext = vi.fn();
1920
const mockUpdateDeployedState = vi.fn();
2021
const mockCopyAgentSource = vi.fn();
2122
const mockToStackName = vi.fn();
2223

2324
const mockParseAndValidateArn = vi.fn();
2425
const mockFindResourceInDeployedState = vi.fn();
26+
const mockFailResult = vi.fn((...args: unknown[]) => ({
27+
success: false,
28+
error: args[1] as string,
29+
resourceType: args[2] as string,
30+
resourceName: args[3] as string,
31+
logPath: 'test.log',
32+
}));
2533

2634
vi.mock('../import-utils', () => ({
2735
resolveProjectContext: (...args: unknown[]) => mockResolveProjectContext(...args),
2836
resolveImportTarget: (...args: unknown[]) => mockResolveImportTarget(...args),
37+
resolveImportContext: (...args: unknown[]) => mockResolveImportContext(...args),
2938
updateDeployedState: (...args: unknown[]) => mockUpdateDeployedState(...args),
3039
copyAgentSource: (...args: unknown[]) => mockCopyAgentSource(...args),
3140
toStackName: (...args: unknown[]) => mockToStackName(...args),
3241
parseAndValidateArn: (...args: unknown[]) => mockParseAndValidateArn(...args),
3342
findResourceInDeployedState: (...args: unknown[]) => mockFindResourceInDeployedState(...args),
43+
failResult: (...args: unknown[]) => mockFailResult(...args),
44+
}));
45+
46+
const mockExecuteCdkImportPipeline = vi.fn();
47+
48+
vi.mock('../import-pipeline', () => ({
49+
executeCdkImportPipeline: (...args: unknown[]) => mockExecuteCdkImportPipeline(...args),
3450
}));
3551

3652
const mockGetAgentRuntimeDetail = vi.fn();
@@ -110,6 +126,14 @@ const mockConfigIO = {
110126
writeDeployedState: vi.fn().mockResolvedValue(undefined),
111127
};
112128

129+
const mockLogger = {
130+
startStep: vi.fn(),
131+
endStep: vi.fn(),
132+
log: vi.fn(),
133+
finalize: vi.fn(),
134+
getRelativeLogPath: vi.fn().mockReturnValue('test.log'),
135+
};
136+
113137
function setupDefaultMocks() {
114138
mockResolveProjectContext.mockResolvedValue({
115139
configIO: mockConfigIO,
@@ -123,6 +147,21 @@ function setupDefaultMocks() {
123147
account: '123456789012',
124148
});
125149

150+
mockResolveImportContext.mockResolvedValue({
151+
ctx: {
152+
configIO: mockConfigIO,
153+
projectRoot: '/tmp/testproj',
154+
projectName: 'testproj',
155+
},
156+
target: {
157+
name: 'default',
158+
region: 'us-east-1',
159+
account: '123456789012',
160+
},
161+
logger: mockLogger,
162+
onProgress: vi.fn(),
163+
});
164+
126165
mockParseAndValidateArn.mockReturnValue({
127166
region: 'us-east-1',
128167
account: '123',
@@ -133,6 +172,8 @@ function setupDefaultMocks() {
133172
mockFindResourceInDeployedState.mockResolvedValue(undefined);
134173

135174
mockConfigIO.readProjectSpec.mockResolvedValue({ ...defaultProjectSpec, runtimes: [] });
175+
176+
mockExecuteCdkImportPipeline.mockResolvedValue({ success: true });
136177
}
137178

138179
afterEach(() => vi.clearAllMocks());

0 commit comments

Comments
 (0)