@sembix/cli 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +7 -0
- package/README.md +161 -8
- package/dist/__tests__/config-schema.test.js +1 -1
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +75 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/integration/configure.test.d.ts +2 -0
- package/dist/__tests__/integration/configure.test.d.ts.map +1 -0
- package/dist/__tests__/integration/configure.test.js +247 -0
- package/dist/__tests__/integration/configure.test.js.map +1 -0
- package/dist/commands/__tests__/configure.test.d.ts +2 -0
- package/dist/commands/__tests__/configure.test.d.ts.map +1 -0
- package/dist/commands/__tests__/configure.test.js +229 -0
- package/dist/commands/__tests__/configure.test.js.map +1 -0
- package/dist/commands/configure.d.ts +6 -0
- package/dist/commands/configure.d.ts.map +1 -0
- package/dist/commands/configure.js +90 -0
- package/dist/commands/configure.js.map +1 -0
- package/dist/config-schema.d.ts +31 -335
- package/dist/config-schema.d.ts.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +19 -3
- package/dist/config.js.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/prompts/__tests__/environment-setup.test.d.ts +2 -0
- package/dist/prompts/__tests__/environment-setup.test.d.ts.map +1 -0
- package/dist/prompts/__tests__/environment-setup.test.js +206 -0
- package/dist/prompts/__tests__/environment-setup.test.js.map +1 -0
- package/dist/prompts/__tests__/hub-integration.test.d.ts +2 -0
- package/dist/prompts/__tests__/hub-integration.test.d.ts.map +1 -0
- package/dist/prompts/__tests__/hub-integration.test.js +126 -0
- package/dist/prompts/__tests__/hub-integration.test.js.map +1 -0
- package/dist/prompts/hub-integration-step.js +3 -3
- package/dist/prompts/hub-integration.js +3 -3
- package/dist/sembix-cli-1.2.1.tgz +0 -0
- package/dist/utils/__tests__/config-file.test.d.ts +2 -0
- package/dist/utils/__tests__/config-file.test.d.ts.map +1 -0
- package/dist/utils/__tests__/config-file.test.js +218 -0
- package/dist/utils/__tests__/config-file.test.js.map +1 -0
- package/dist/utils/config-file.d.ts +23 -0
- package/dist/utils/config-file.d.ts.map +1 -0
- package/dist/utils/config-file.js +100 -0
- package/dist/utils/config-file.js.map +1 -0
- package/dist/utils/config-loader.js +7 -7
- package/package.json +24 -24
- package/dist/sembix-cli-1.1.0.tgz +0 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { promptEnvironmentSetup } from '../environment-setup.js';
|
|
3
|
+
import * as prompts from '@inquirer/prompts';
|
|
4
|
+
// Mock @inquirer/prompts
|
|
5
|
+
vi.mock('@inquirer/prompts');
|
|
6
|
+
// Mock chalk
|
|
7
|
+
vi.mock('chalk', () => {
|
|
8
|
+
const createChalkMock = () => {
|
|
9
|
+
const mockFn = (str) => str;
|
|
10
|
+
return new Proxy(mockFn, {
|
|
11
|
+
get: () => createChalkMock(),
|
|
12
|
+
apply: (target, thisArg, args) => args[0],
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
return {
|
|
16
|
+
default: createChalkMock(),
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
// Mock ui utilities
|
|
20
|
+
vi.mock('../../utils/ui.js', () => ({
|
|
21
|
+
section: vi.fn(),
|
|
22
|
+
info: vi.fn(),
|
|
23
|
+
error: vi.fn(),
|
|
24
|
+
highlight: vi.fn((text) => text),
|
|
25
|
+
dim: vi.fn((text) => text),
|
|
26
|
+
}));
|
|
27
|
+
const mockInput = vi.mocked(prompts.input);
|
|
28
|
+
const mockSelect = vi.mocked(prompts.select);
|
|
29
|
+
const mockConfirm = vi.mocked(prompts.confirm);
|
|
30
|
+
describe('environment-setup', () => {
|
|
31
|
+
let mockGitHubClient;
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
vi.clearAllMocks();
|
|
34
|
+
// Create mock GitHub client
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
36
|
+
mockGitHubClient = {
|
|
37
|
+
listRepositories: vi.fn().mockResolvedValue([
|
|
38
|
+
{ full_name: 'owner/repo1' },
|
|
39
|
+
{ full_name: 'owner/repo2' },
|
|
40
|
+
]),
|
|
41
|
+
getRepository: vi.fn().mockResolvedValue({
|
|
42
|
+
owner: 'owner',
|
|
43
|
+
name: 'repo1',
|
|
44
|
+
full_name: 'owner/repo1',
|
|
45
|
+
}),
|
|
46
|
+
};
|
|
47
|
+
// Setup default prompt responses
|
|
48
|
+
mockSelect.mockResolvedValue('owner/repo1');
|
|
49
|
+
mockInput.mockResolvedValue('test-value');
|
|
50
|
+
mockConfirm.mockResolvedValue(false);
|
|
51
|
+
});
|
|
52
|
+
describe('promptEnvironmentSetup', () => {
|
|
53
|
+
it.skip('should handle provided repository', async () => {
|
|
54
|
+
mockInput
|
|
55
|
+
.mockResolvedValueOnce('test-env') // environment name
|
|
56
|
+
.mockResolvedValueOnce('123456789012') // aws account id
|
|
57
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/test') // customer role
|
|
58
|
+
.mockResolvedValueOnce('test-bucket') // terraform bucket
|
|
59
|
+
.mockResolvedValueOnce('test_db') // database name
|
|
60
|
+
.mockResolvedValueOnce('test_user'); // database user
|
|
61
|
+
mockSelect
|
|
62
|
+
.mockResolvedValueOnce('us-east-1'); // aws region
|
|
63
|
+
mockConfirm
|
|
64
|
+
.mockResolvedValueOnce(false) // vpc endpoints
|
|
65
|
+
.mockResolvedValueOnce(false) // custom networking
|
|
66
|
+
.mockResolvedValueOnce(false) // custom security groups
|
|
67
|
+
.mockResolvedValueOnce(false) // custom iam roles
|
|
68
|
+
.mockResolvedValueOnce(false) // cloudfront custom domain
|
|
69
|
+
.mockResolvedValueOnce(false) // deploy memory
|
|
70
|
+
.mockResolvedValueOnce(false) // deploy notifications
|
|
71
|
+
.mockResolvedValueOnce(false) // enable waf
|
|
72
|
+
.mockResolvedValueOnce(false); // github app
|
|
73
|
+
const result = await promptEnvironmentSetup(mockGitHubClient, undefined, 'owner/repo1', {}, false);
|
|
74
|
+
expect(mockGitHubClient.getRepository).toHaveBeenCalledWith('owner', 'repo1');
|
|
75
|
+
expect(result.repository).toEqual({ owner: 'owner', repo: 'repo1' });
|
|
76
|
+
});
|
|
77
|
+
it.skip('should use provided environment name', async () => {
|
|
78
|
+
mockInput
|
|
79
|
+
.mockResolvedValueOnce('123456789012') // aws account id
|
|
80
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/test') // customer role
|
|
81
|
+
.mockResolvedValueOnce('test-bucket') // terraform bucket
|
|
82
|
+
.mockResolvedValueOnce('test_db') // database name
|
|
83
|
+
.mockResolvedValueOnce('test_user'); // database user
|
|
84
|
+
mockSelect
|
|
85
|
+
.mockResolvedValueOnce('us-east-1'); // aws region
|
|
86
|
+
mockConfirm
|
|
87
|
+
.mockResolvedValueOnce(false) // vpc endpoints
|
|
88
|
+
.mockResolvedValueOnce(false) // custom networking
|
|
89
|
+
.mockResolvedValueOnce(false) // custom security groups
|
|
90
|
+
.mockResolvedValueOnce(false) // custom iam roles
|
|
91
|
+
.mockResolvedValueOnce(false) // cloudfront custom domain
|
|
92
|
+
.mockResolvedValueOnce(false) // deploy memory
|
|
93
|
+
.mockResolvedValueOnce(false) // deploy notifications
|
|
94
|
+
.mockResolvedValueOnce(false) // enable waf
|
|
95
|
+
.mockResolvedValueOnce(false); // github app
|
|
96
|
+
const result = await promptEnvironmentSetup(mockGitHubClient, 'provided-env', 'owner/repo1', {}, false);
|
|
97
|
+
expect(result.environmentName).toBe('provided-env');
|
|
98
|
+
});
|
|
99
|
+
it.skip('should select repository interactively when only one repo', async () => {
|
|
100
|
+
mockGitHubClient.listRepositories = vi.fn().mockResolvedValue([
|
|
101
|
+
{ full_name: 'owner/single-repo' },
|
|
102
|
+
]);
|
|
103
|
+
mockInput
|
|
104
|
+
.mockResolvedValueOnce('test-env') // environment name
|
|
105
|
+
.mockResolvedValueOnce('123456789012') // aws account id
|
|
106
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/test') // customer role
|
|
107
|
+
.mockResolvedValueOnce('test-bucket') // terraform bucket
|
|
108
|
+
.mockResolvedValueOnce('test_db') // database name
|
|
109
|
+
.mockResolvedValueOnce('test_user'); // database user
|
|
110
|
+
mockSelect.mockResolvedValueOnce('us-east-1'); // aws region
|
|
111
|
+
mockConfirm
|
|
112
|
+
.mockResolvedValueOnce(false) // vpc endpoints
|
|
113
|
+
.mockResolvedValueOnce(false) // custom networking
|
|
114
|
+
.mockResolvedValueOnce(false) // custom security groups
|
|
115
|
+
.mockResolvedValueOnce(false) // custom iam roles
|
|
116
|
+
.mockResolvedValueOnce(false) // cloudfront custom domain
|
|
117
|
+
.mockResolvedValueOnce(false) // deploy memory
|
|
118
|
+
.mockResolvedValueOnce(false) // deploy notifications
|
|
119
|
+
.mockResolvedValueOnce(false) // enable waf
|
|
120
|
+
.mockResolvedValueOnce(false); // github app
|
|
121
|
+
const result = await promptEnvironmentSetup(mockGitHubClient, undefined, undefined, {}, false);
|
|
122
|
+
expect(result.repository).toEqual({ owner: 'owner', repo: 'single-repo' });
|
|
123
|
+
expect(mockSelect).not.toHaveBeenCalledWith(expect.objectContaining({ message: expect.stringContaining('repository') }));
|
|
124
|
+
});
|
|
125
|
+
it.skip('should use partial config values', async () => {
|
|
126
|
+
const partialConfig = {
|
|
127
|
+
awsAccountId: '999888777666',
|
|
128
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
129
|
+
awsRegion: 'eu-west-1',
|
|
130
|
+
customerRoleArn: 'arn:aws:iam::999888777666:role/PresetRole',
|
|
131
|
+
};
|
|
132
|
+
mockInput
|
|
133
|
+
.mockResolvedValueOnce('test-env') // environment name
|
|
134
|
+
.mockResolvedValueOnce('test-bucket') // terraform bucket
|
|
135
|
+
.mockResolvedValueOnce('test_db') // database name
|
|
136
|
+
.mockResolvedValueOnce('test_user'); // database user
|
|
137
|
+
mockConfirm
|
|
138
|
+
.mockResolvedValueOnce(false) // vpc endpoints
|
|
139
|
+
.mockResolvedValueOnce(false) // custom networking
|
|
140
|
+
.mockResolvedValueOnce(false) // custom security groups
|
|
141
|
+
.mockResolvedValueOnce(false) // custom iam roles
|
|
142
|
+
.mockResolvedValueOnce(false) // cloudfront custom domain
|
|
143
|
+
.mockResolvedValueOnce(false) // deploy memory
|
|
144
|
+
.mockResolvedValueOnce(false) // deploy notifications
|
|
145
|
+
.mockResolvedValueOnce(false) // enable waf
|
|
146
|
+
.mockResolvedValueOnce(false); // github app
|
|
147
|
+
const result = await promptEnvironmentSetup(mockGitHubClient, undefined, 'owner/repo1', partialConfig, false);
|
|
148
|
+
expect(result.awsAccountId).toBe('999888777666');
|
|
149
|
+
expect(result.awsRegion).toBe('eu-west-1');
|
|
150
|
+
expect(result.customerRoleArn).toBe('arn:aws:iam::999888777666:role/PresetRole');
|
|
151
|
+
});
|
|
152
|
+
it.skip('should handle custom networking enabled', async () => {
|
|
153
|
+
mockInput
|
|
154
|
+
.mockResolvedValueOnce('test-env') // environment name
|
|
155
|
+
.mockResolvedValueOnce('123456789012') // aws account id
|
|
156
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/test') // customer role
|
|
157
|
+
.mockResolvedValueOnce('test-bucket') // terraform bucket
|
|
158
|
+
.mockResolvedValueOnce('test_db') // database name
|
|
159
|
+
.mockResolvedValueOnce('test_user') // database user
|
|
160
|
+
.mockResolvedValueOnce('vpc-12345678') // custom vpc id
|
|
161
|
+
.mockResolvedValueOnce('subnet-111,subnet-222') // public subnets
|
|
162
|
+
.mockResolvedValueOnce('subnet-333,subnet-444'); // private subnets
|
|
163
|
+
mockSelect
|
|
164
|
+
.mockResolvedValueOnce('us-east-1'); // aws region
|
|
165
|
+
mockConfirm
|
|
166
|
+
.mockResolvedValueOnce(false) // vpc endpoints
|
|
167
|
+
.mockResolvedValueOnce(true) // custom networking - YES
|
|
168
|
+
.mockResolvedValueOnce(false) // custom security groups
|
|
169
|
+
.mockResolvedValueOnce(false) // custom iam roles
|
|
170
|
+
.mockResolvedValueOnce(false) // cloudfront custom domain
|
|
171
|
+
.mockResolvedValueOnce(false) // deploy memory
|
|
172
|
+
.mockResolvedValueOnce(false) // deploy notifications
|
|
173
|
+
.mockResolvedValueOnce(false) // enable waf
|
|
174
|
+
.mockResolvedValueOnce(false); // github app
|
|
175
|
+
const result = await promptEnvironmentSetup(mockGitHubClient, undefined, 'owner/repo1', {}, false);
|
|
176
|
+
expect(result.networking?.useCustomNetworking).toBe(true);
|
|
177
|
+
expect(result.networking?.customVpcId).toBe('vpc-12345678');
|
|
178
|
+
});
|
|
179
|
+
it.skip('should handle feature flags enabled', async () => {
|
|
180
|
+
mockInput
|
|
181
|
+
.mockResolvedValueOnce('test-env') // environment name
|
|
182
|
+
.mockResolvedValueOnce('123456789012') // aws account id
|
|
183
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/test') // customer role
|
|
184
|
+
.mockResolvedValueOnce('test-bucket') // terraform bucket
|
|
185
|
+
.mockResolvedValueOnce('test_db') // database name
|
|
186
|
+
.mockResolvedValueOnce('test_user'); // database user
|
|
187
|
+
mockSelect
|
|
188
|
+
.mockResolvedValueOnce('us-east-1'); // aws region
|
|
189
|
+
mockConfirm
|
|
190
|
+
.mockResolvedValueOnce(false) // vpc endpoints
|
|
191
|
+
.mockResolvedValueOnce(false) // custom networking
|
|
192
|
+
.mockResolvedValueOnce(false) // custom security groups
|
|
193
|
+
.mockResolvedValueOnce(false) // custom iam roles
|
|
194
|
+
.mockResolvedValueOnce(false) // cloudfront custom domain
|
|
195
|
+
.mockResolvedValueOnce(true) // deploy memory - YES
|
|
196
|
+
.mockResolvedValueOnce(true) // deploy notifications - YES
|
|
197
|
+
.mockResolvedValueOnce(true) // enable waf - YES
|
|
198
|
+
.mockResolvedValueOnce(false); // github app
|
|
199
|
+
const result = await promptEnvironmentSetup(mockGitHubClient, undefined, 'owner/repo1', {}, false);
|
|
200
|
+
expect(result.features?.deploySembixStudioMemory).toBe(true);
|
|
201
|
+
expect(result.features?.deploySembixStudioNotifications).toBe(true);
|
|
202
|
+
expect(result.features?.enableBffWaf).toBe(true);
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
//# sourceMappingURL=environment-setup.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-setup.test.js","sourceRoot":"","sources":["../../../src/prompts/__tests__/environment-setup.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-integration.test.d.ts","sourceRoot":"","sources":["../../../src/prompts/__tests__/hub-integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { promptHubIntegration } from '../hub-integration.js';
|
|
3
|
+
import * as prompts from '@inquirer/prompts';
|
|
4
|
+
// Mock @inquirer/prompts
|
|
5
|
+
vi.mock('@inquirer/prompts');
|
|
6
|
+
// Mock ui utilities
|
|
7
|
+
vi.mock('../../utils/ui.js', () => ({
|
|
8
|
+
section: vi.fn(),
|
|
9
|
+
info: vi.fn(),
|
|
10
|
+
error: vi.fn(),
|
|
11
|
+
highlight: vi.fn((text) => text),
|
|
12
|
+
dim: vi.fn((text) => text),
|
|
13
|
+
}));
|
|
14
|
+
const mockInput = vi.mocked(prompts.input);
|
|
15
|
+
const mockSelect = vi.mocked(prompts.select);
|
|
16
|
+
describe('hub-integration', () => {
|
|
17
|
+
let mockGitHubClient;
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
vi.clearAllMocks();
|
|
20
|
+
// Create mock GitHub client
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
|
+
mockGitHubClient = {
|
|
23
|
+
listRepositories: vi.fn().mockResolvedValue([
|
|
24
|
+
{ full_name: 'owner/repo1' },
|
|
25
|
+
{ full_name: 'owner/repo2' },
|
|
26
|
+
]),
|
|
27
|
+
listEnvironments: vi.fn().mockResolvedValue([
|
|
28
|
+
{ name: 'production' },
|
|
29
|
+
{ name: 'staging' },
|
|
30
|
+
]),
|
|
31
|
+
};
|
|
32
|
+
// Setup default prompt responses
|
|
33
|
+
mockSelect.mockResolvedValue('owner/repo1');
|
|
34
|
+
mockInput.mockResolvedValue('test-value');
|
|
35
|
+
});
|
|
36
|
+
describe('promptHubIntegration', () => {
|
|
37
|
+
it('should handle provided repository and environment', async () => {
|
|
38
|
+
mockInput
|
|
39
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/hub-engine') // engine role
|
|
40
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/hub-consumer') // consumer role
|
|
41
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/hub-appconfig') // appconfig role
|
|
42
|
+
.mockResolvedValueOnce('app-12345') // app id
|
|
43
|
+
.mockResolvedValueOnce('env-12345') // env id
|
|
44
|
+
.mockResolvedValueOnce('profile-12345'); // profile id
|
|
45
|
+
const result = await promptHubIntegration(mockGitHubClient, 'production', 'owner/repo1', {});
|
|
46
|
+
expect(mockGitHubClient.listEnvironments).toHaveBeenCalledWith('owner', 'repo1');
|
|
47
|
+
expect(result.repository).toEqual({ owner: 'owner', repo: 'repo1' });
|
|
48
|
+
expect(result.environmentName).toBe('production');
|
|
49
|
+
expect(result.hubRoles.engineExecutionRole).toBe('arn:aws:iam::123456789012:role/hub-engine');
|
|
50
|
+
});
|
|
51
|
+
it('should select repository interactively', async () => {
|
|
52
|
+
mockSelect
|
|
53
|
+
.mockResolvedValueOnce('owner/repo2') // repo selection
|
|
54
|
+
.mockResolvedValueOnce('staging'); // env selection
|
|
55
|
+
mockInput
|
|
56
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/hub-engine') // engine role
|
|
57
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/hub-consumer') // consumer role
|
|
58
|
+
.mockResolvedValueOnce('') // appconfig role - skip
|
|
59
|
+
.mockResolvedValueOnce('') // app id - skip
|
|
60
|
+
.mockResolvedValueOnce('') // env id - skip
|
|
61
|
+
.mockResolvedValueOnce(''); // profile id - skip
|
|
62
|
+
const result = await promptHubIntegration(mockGitHubClient, undefined, undefined, {});
|
|
63
|
+
expect(result.repository).toEqual({ owner: 'owner', repo: 'repo2' });
|
|
64
|
+
expect(result.environmentName).toBe('staging');
|
|
65
|
+
});
|
|
66
|
+
it('should use CLI flags when provided', async () => {
|
|
67
|
+
const cliFlags = {
|
|
68
|
+
hubEngineExecutionRole: 'arn:aws:iam::123456789012:role/cli-engine',
|
|
69
|
+
hubConsumerRole: 'arn:aws:iam::123456789012:role/cli-consumer',
|
|
70
|
+
hubAppconfigRole: 'arn:aws:iam::123456789012:role/cli-appconfig',
|
|
71
|
+
hubAppconfigAppId: 'cli-app-123',
|
|
72
|
+
hubAppconfigEnvId: 'cli-env-123',
|
|
73
|
+
hubAppconfigProfileId: 'cli-profile-123',
|
|
74
|
+
};
|
|
75
|
+
// Should not prompt for values that are provided via CLI
|
|
76
|
+
const result = await promptHubIntegration(mockGitHubClient, 'production', 'owner/repo1', cliFlags);
|
|
77
|
+
expect(result.hubRoles.engineExecutionRole).toBe('arn:aws:iam::123456789012:role/cli-engine');
|
|
78
|
+
expect(result.hubRoles.consumerRole).toBe('arn:aws:iam::123456789012:role/cli-consumer');
|
|
79
|
+
expect(result.appConfig?.roleArn).toBe('arn:aws:iam::123456789012:role/cli-appconfig');
|
|
80
|
+
expect(result.appConfig?.appId).toBe('cli-app-123');
|
|
81
|
+
});
|
|
82
|
+
it('should handle optional AppConfig fields', async () => {
|
|
83
|
+
mockInput
|
|
84
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/hub-engine') // engine role
|
|
85
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/hub-consumer') // consumer role
|
|
86
|
+
.mockResolvedValueOnce('') // appconfig role - empty
|
|
87
|
+
.mockResolvedValueOnce('') // app id - skip
|
|
88
|
+
.mockResolvedValueOnce('') // env id - skip
|
|
89
|
+
.mockResolvedValueOnce(''); // profile id - skip
|
|
90
|
+
const result = await promptHubIntegration(mockGitHubClient, 'production', 'owner/repo1', {});
|
|
91
|
+
expect(result.hubRoles.engineExecutionRole).toBeDefined();
|
|
92
|
+
expect(result.hubRoles.consumerRole).toBeDefined();
|
|
93
|
+
expect(result.appConfig?.roleArn).toBeUndefined();
|
|
94
|
+
expect(result.appConfig?.appId).toBeUndefined();
|
|
95
|
+
});
|
|
96
|
+
it('should handle AppConfig with all fields', async () => {
|
|
97
|
+
mockInput
|
|
98
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/hub-engine') // engine role
|
|
99
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/hub-consumer') // consumer role
|
|
100
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/appconfig') // appconfig role
|
|
101
|
+
.mockResolvedValueOnce('app-abc123') // app id
|
|
102
|
+
.mockResolvedValueOnce('env-def456') // env id
|
|
103
|
+
.mockResolvedValueOnce('profile-ghi789'); // profile id
|
|
104
|
+
const result = await promptHubIntegration(mockGitHubClient, 'production', 'owner/repo1', {});
|
|
105
|
+
expect(result.appConfig?.roleArn).toBe('arn:aws:iam::123456789012:role/appconfig');
|
|
106
|
+
expect(result.appConfig?.appId).toBe('app-abc123');
|
|
107
|
+
expect(result.appConfig?.envId).toBe('env-def456');
|
|
108
|
+
expect(result.appConfig?.profileId).toBe('profile-ghi789');
|
|
109
|
+
});
|
|
110
|
+
it('should prompt for all AppConfig fields even when empty', async () => {
|
|
111
|
+
mockInput
|
|
112
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/hub-engine') // engine role
|
|
113
|
+
.mockResolvedValueOnce('arn:aws:iam::123456789012:role/hub-consumer') // consumer role
|
|
114
|
+
.mockResolvedValueOnce('') // appconfig role - empty
|
|
115
|
+
.mockResolvedValueOnce('') // appconfig app id - empty
|
|
116
|
+
.mockResolvedValueOnce('') // appconfig env id - empty
|
|
117
|
+
.mockResolvedValueOnce(''); // appconfig profile id - empty
|
|
118
|
+
const result = await promptHubIntegration(mockGitHubClient, 'production', 'owner/repo1', {});
|
|
119
|
+
// All 6 inputs should be called (2 roles + 4 appconfig fields)
|
|
120
|
+
expect(mockInput).toHaveBeenCalledTimes(6);
|
|
121
|
+
expect(result.appConfig?.roleArn).toBeUndefined();
|
|
122
|
+
expect(result.appConfig?.appId).toBeUndefined();
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=hub-integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-integration.test.js","sourceRoot":"","sources":["../../../src/prompts/__tests__/hub-integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ export async function promptHubIntegrationStep(skipHub) {
|
|
|
42
42
|
if (!value)
|
|
43
43
|
return true;
|
|
44
44
|
const result = iamRoleArnSchema.safeParse(value);
|
|
45
|
-
return result.success || result.error.
|
|
45
|
+
return result.success || result.error.issues[0].message;
|
|
46
46
|
},
|
|
47
47
|
});
|
|
48
48
|
const consumerRole = await input({
|
|
@@ -52,7 +52,7 @@ export async function promptHubIntegrationStep(skipHub) {
|
|
|
52
52
|
if (!value)
|
|
53
53
|
return true;
|
|
54
54
|
const result = iamRoleArnSchema.safeParse(value);
|
|
55
|
-
return result.success || result.error.
|
|
55
|
+
return result.success || result.error.issues[0].message;
|
|
56
56
|
},
|
|
57
57
|
});
|
|
58
58
|
ui.section('AppConfig Integration (Optional)');
|
|
@@ -66,7 +66,7 @@ export async function promptHubIntegrationStep(skipHub) {
|
|
|
66
66
|
if (!value)
|
|
67
67
|
return true;
|
|
68
68
|
const result = iamRoleArnSchema.safeParse(value);
|
|
69
|
-
return result.success || result.error.
|
|
69
|
+
return result.success || result.error.issues[0].message;
|
|
70
70
|
},
|
|
71
71
|
});
|
|
72
72
|
const appConfigAppId = await input({
|
|
@@ -84,7 +84,7 @@ export async function promptHubIntegration(githubClient, providedEnvironmentName
|
|
|
84
84
|
if (!value)
|
|
85
85
|
return true;
|
|
86
86
|
const result = iamRoleArnSchema.safeParse(value);
|
|
87
|
-
return result.success || result.error.
|
|
87
|
+
return result.success || result.error.issues[0].message;
|
|
88
88
|
},
|
|
89
89
|
}), 'Hub Engine Execution Role');
|
|
90
90
|
const consumerRole = await promptIfMissingOptional(cliFlags.hubConsumerRole, async () => input({
|
|
@@ -94,7 +94,7 @@ export async function promptHubIntegration(githubClient, providedEnvironmentName
|
|
|
94
94
|
if (!value)
|
|
95
95
|
return true;
|
|
96
96
|
const result = iamRoleArnSchema.safeParse(value);
|
|
97
|
-
return result.success || result.error.
|
|
97
|
+
return result.success || result.error.issues[0].message;
|
|
98
98
|
},
|
|
99
99
|
}), 'Hub Consumer Role');
|
|
100
100
|
ui.section('AppConfig Integration (Optional)');
|
|
@@ -108,7 +108,7 @@ export async function promptHubIntegration(githubClient, providedEnvironmentName
|
|
|
108
108
|
if (!value)
|
|
109
109
|
return true;
|
|
110
110
|
const result = iamRoleArnSchema.safeParse(value);
|
|
111
|
-
return result.success || result.error.
|
|
111
|
+
return result.success || result.error.issues[0].message;
|
|
112
112
|
},
|
|
113
113
|
}), 'AppConfig Role');
|
|
114
114
|
const appConfigAppId = await promptIfMissingOptional(cliFlags.hubAppconfigAppId, async () => input({
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-file.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/config-file.test.ts"],"names":[],"mappings":""}
|