@sembix/cli 1.3.0 → 1.4.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/COMMANDS.md +1522 -0
- package/QUICKSTART.md +829 -0
- package/README.md +1949 -285
- package/USAGE-EXAMPLES.md +872 -0
- package/dist/commands/configure.d.ts.map +1 -1
- package/dist/commands/configure.js +172 -2
- package/dist/commands/configure.js.map +1 -1
- package/dist/commands/index.d.ts +10 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +11 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/login.d.ts +19 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +118 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +21 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +66 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/profile-project.d.ts +14 -0
- package/dist/commands/profile-project.d.ts.map +1 -0
- package/dist/commands/profile-project.js +123 -0
- package/dist/commands/profile-project.js.map +1 -0
- package/dist/commands/profile.d.ts +26 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +177 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/project.d.ts +16 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +153 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/setup.js +1 -1
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/update.js +2 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/workflow.d.ts +91 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +1201 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/config-schema.d.ts +23 -0
- package/dist/config-schema.d.ts.map +1 -1
- package/dist/config-schema.js +21 -1
- package/dist/config-schema.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +23 -2
- package/dist/config.js.map +1 -1
- package/dist/index.js +318 -1
- package/dist/index.js.map +1 -1
- package/dist/prompts/project-selection.d.ts +8 -0
- package/dist/prompts/project-selection.d.ts.map +1 -0
- package/dist/prompts/project-selection.js +132 -0
- package/dist/prompts/project-selection.js.map +1 -0
- package/dist/prompts/workflow-inputs.d.ts +10 -0
- package/dist/prompts/workflow-inputs.d.ts.map +1 -0
- package/dist/prompts/workflow-inputs.js +71 -0
- package/dist/prompts/workflow-inputs.js.map +1 -0
- package/dist/prompts/workflow-selection.d.ts +8 -0
- package/dist/prompts/workflow-selection.d.ts.map +1 -0
- package/dist/prompts/workflow-selection.js +147 -0
- package/dist/prompts/workflow-selection.js.map +1 -0
- package/dist/sembix-cli-1.4.1.tgz +0 -0
- package/dist/services/cognito-auth.d.ts +92 -0
- package/dist/services/cognito-auth.d.ts.map +1 -0
- package/dist/services/cognito-auth.js +319 -0
- package/dist/services/cognito-auth.js.map +1 -0
- package/dist/services/studio-api-client.d.ts +127 -0
- package/dist/services/studio-api-client.d.ts.map +1 -0
- package/dist/services/studio-api-client.js +291 -0
- package/dist/services/studio-api-client.js.map +1 -0
- package/dist/types/studio.d.ts +82 -0
- package/dist/types/studio.d.ts.map +1 -0
- package/dist/types/studio.js +7 -0
- package/dist/types/studio.js.map +1 -0
- package/dist/types.d.ts +283 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/browser-auth.d.ts +45 -0
- package/dist/utils/browser-auth.d.ts.map +1 -0
- package/dist/utils/browser-auth.js +168 -0
- package/dist/utils/browser-auth.js.map +1 -0
- package/dist/utils/cognito-auth.d.ts +3 -0
- package/dist/utils/cognito-auth.d.ts.map +1 -0
- package/dist/utils/cognito-auth.js +3 -0
- package/dist/utils/cognito-auth.js.map +1 -0
- package/dist/utils/config-file.d.ts +40 -0
- package/dist/utils/config-file.d.ts.map +1 -1
- package/dist/utils/config-file.js +158 -4
- package/dist/utils/config-file.js.map +1 -1
- package/dist/utils/environment.d.ts +22 -0
- package/dist/utils/environment.d.ts.map +1 -0
- package/dist/utils/environment.js +39 -0
- package/dist/utils/environment.js.map +1 -0
- package/dist/utils/error-handler.d.ts +53 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +174 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/fuzzy-match.d.ts +31 -0
- package/dist/utils/fuzzy-match.d.ts.map +1 -0
- package/dist/utils/fuzzy-match.js +138 -0
- package/dist/utils/fuzzy-match.js.map +1 -0
- package/dist/utils/github.d.ts +2 -2
- package/dist/utils/github.d.ts.map +1 -1
- package/dist/utils/github.js +30 -10
- package/dist/utils/github.js.map +1 -1
- package/dist/utils/input-parser.d.ts +14 -0
- package/dist/utils/input-parser.d.ts.map +1 -0
- package/dist/utils/input-parser.js +34 -0
- package/dist/utils/input-parser.js.map +1 -0
- package/dist/utils/output.d.ts +55 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +80 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/recent-workflows.d.ts +37 -0
- package/dist/utils/recent-workflows.d.ts.map +1 -0
- package/dist/utils/recent-workflows.js +172 -0
- package/dist/utils/recent-workflows.js.map +1 -0
- package/dist/utils/studio-api-client.d.ts +3 -0
- package/dist/utils/studio-api-client.d.ts.map +1 -0
- package/dist/utils/studio-api-client.js +3 -0
- package/dist/utils/studio-api-client.js.map +1 -0
- package/dist/utils/studio-api.d.ts +53 -0
- package/dist/utils/studio-api.d.ts.map +1 -0
- package/dist/utils/studio-api.js +102 -0
- package/dist/utils/studio-api.js.map +1 -0
- package/dist/utils/studio-config.d.ts +74 -0
- package/dist/utils/studio-config.d.ts.map +1 -0
- package/dist/utils/studio-config.js +213 -0
- package/dist/utils/studio-config.js.map +1 -0
- package/dist/utils/token-manager.d.ts +4 -0
- package/dist/utils/token-manager.d.ts.map +1 -0
- package/dist/utils/token-manager.js +3 -0
- package/dist/utils/token-manager.js.map +1 -0
- package/dist/utils/ui.d.ts +55 -1
- package/dist/utils/ui.d.ts.map +1 -1
- package/dist/utils/ui.js +151 -2
- package/dist/utils/ui.js.map +1 -1
- package/package.json +4 -1
- package/dist/__tests__/config-schema.test.d.ts +0 -2
- package/dist/__tests__/config-schema.test.d.ts.map +0 -1
- package/dist/__tests__/config-schema.test.js +0 -471
- package/dist/__tests__/config-schema.test.js.map +0 -1
- package/dist/__tests__/config.test.d.ts +0 -2
- package/dist/__tests__/config.test.d.ts.map +0 -1
- package/dist/__tests__/config.test.js +0 -75
- package/dist/__tests__/config.test.js.map +0 -1
- package/dist/__tests__/integration/configure.test.d.ts +0 -2
- package/dist/__tests__/integration/configure.test.d.ts.map +0 -1
- package/dist/__tests__/integration/configure.test.js +0 -247
- package/dist/__tests__/integration/configure.test.js.map +0 -1
- package/dist/__tests__/integration/fixtures/configs.d.ts +0 -477
- package/dist/__tests__/integration/fixtures/configs.d.ts.map +0 -1
- package/dist/__tests__/integration/fixtures/configs.js +0 -175
- package/dist/__tests__/integration/fixtures/configs.js.map +0 -1
- package/dist/__tests__/integration/helpers/cli-runner.d.ts +0 -63
- package/dist/__tests__/integration/helpers/cli-runner.d.ts.map +0 -1
- package/dist/__tests__/integration/helpers/cli-runner.js +0 -152
- package/dist/__tests__/integration/helpers/cli-runner.js.map +0 -1
- package/dist/__tests__/integration/helpers/command-runner.d.ts +0 -53
- package/dist/__tests__/integration/helpers/command-runner.d.ts.map +0 -1
- package/dist/__tests__/integration/helpers/command-runner.js +0 -117
- package/dist/__tests__/integration/helpers/command-runner.js.map +0 -1
- package/dist/__tests__/integration/studio-create.test.d.ts +0 -2
- package/dist/__tests__/integration/studio-create.test.d.ts.map +0 -1
- package/dist/__tests__/integration/studio-create.test.js +0 -209
- package/dist/__tests__/integration/studio-create.test.js.map +0 -1
- package/dist/__tests__/integration/studio-update.test.d.ts +0 -2
- package/dist/__tests__/integration/studio-update.test.d.ts.map +0 -1
- package/dist/__tests__/integration/studio-update.test.js +0 -166
- package/dist/__tests__/integration/studio-update.test.js.map +0 -1
- package/dist/commands/__tests__/configure.test.d.ts +0 -2
- package/dist/commands/__tests__/configure.test.d.ts.map +0 -1
- package/dist/commands/__tests__/configure.test.js +0 -229
- package/dist/commands/__tests__/configure.test.js.map +0 -1
- package/dist/prompts/__tests__/environment-setup.test.d.ts +0 -2
- package/dist/prompts/__tests__/environment-setup.test.d.ts.map +0 -1
- package/dist/prompts/__tests__/environment-setup.test.js +0 -206
- package/dist/prompts/__tests__/environment-setup.test.js.map +0 -1
- package/dist/prompts/__tests__/hub-integration.test.d.ts +0 -2
- package/dist/prompts/__tests__/hub-integration.test.d.ts.map +0 -1
- package/dist/prompts/__tests__/hub-integration.test.js +0 -126
- package/dist/prompts/__tests__/hub-integration.test.js.map +0 -1
- package/dist/prompts/__tests__/prompt-helpers.test.d.ts +0 -2
- package/dist/prompts/__tests__/prompt-helpers.test.d.ts.map +0 -1
- package/dist/prompts/__tests__/prompt-helpers.test.js +0 -235
- package/dist/prompts/__tests__/prompt-helpers.test.js.map +0 -1
- package/dist/sembix-cli-1.3.0.tgz +0 -0
- package/dist/utils/__tests__/config-file.test.d.ts +0 -2
- package/dist/utils/__tests__/config-file.test.d.ts.map +0 -1
- package/dist/utils/__tests__/config-file.test.js +0 -218
- package/dist/utils/__tests__/config-file.test.js.map +0 -1
- package/dist/utils/__tests__/config-loader.test.d.ts +0 -2
- package/dist/utils/__tests__/config-loader.test.d.ts.map +0 -1
- package/dist/utils/__tests__/config-loader.test.js +0 -325
- package/dist/utils/__tests__/config-loader.test.js.map +0 -1
- package/dist/utils/__tests__/github.test.d.ts +0 -2
- package/dist/utils/__tests__/github.test.d.ts.map +0 -1
- package/dist/utils/__tests__/github.test.js +0 -282
- package/dist/utils/__tests__/github.test.js.map +0 -1
- package/dist/utils/__tests__/ui.test.d.ts +0 -2
- package/dist/utils/__tests__/ui.test.d.ts.map +0 -1
- package/dist/utils/__tests__/ui.test.js +0 -256
- package/dist/utils/__tests__/ui.test.js.map +0 -1
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { runUpdateWithConfig, runUpdateWithFlags, removeTempConfigFile, } from './helpers/command-runner.js';
|
|
3
|
-
import { validMinimalConfig, } from './fixtures/configs.js';
|
|
4
|
-
import { GitHubClient } from '../../utils/github.js';
|
|
5
|
-
// Mock GitHub Client
|
|
6
|
-
vi.mock('../../utils/github.js');
|
|
7
|
-
// Mock prompts
|
|
8
|
-
vi.mock('@inquirer/prompts', () => ({
|
|
9
|
-
input: vi.fn().mockResolvedValue('default-value'),
|
|
10
|
-
select: vi.fn().mockResolvedValue('default-option'),
|
|
11
|
-
confirm: vi.fn().mockResolvedValue(true),
|
|
12
|
-
password: vi.fn().mockResolvedValue('secret'),
|
|
13
|
-
}));
|
|
14
|
-
// Mock chalk
|
|
15
|
-
const createChalkMock = () => {
|
|
16
|
-
const mockFn = (str) => str;
|
|
17
|
-
return new Proxy(mockFn, {
|
|
18
|
-
get: () => createChalkMock(),
|
|
19
|
-
apply: (target, thisArg, args) => args[0]
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
vi.mock('chalk', () => ({
|
|
23
|
-
default: createChalkMock()
|
|
24
|
-
}));
|
|
25
|
-
describe('studio update command - Integration Tests', () => {
|
|
26
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
|
-
let mockGitHubClient;
|
|
28
|
-
beforeEach(() => {
|
|
29
|
-
mockGitHubClient = {
|
|
30
|
-
listRepositories: vi.fn().mockResolvedValue([
|
|
31
|
-
{ owner: 'test-org', repo: 'test-repo', full_name: 'test-org/test-repo' },
|
|
32
|
-
]),
|
|
33
|
-
getRepository: vi.fn().mockResolvedValue({
|
|
34
|
-
owner: 'test-org',
|
|
35
|
-
repo: 'test-repo',
|
|
36
|
-
full_name: 'test-org/test-repo',
|
|
37
|
-
}),
|
|
38
|
-
createEnvironment: vi.fn().mockResolvedValue({}),
|
|
39
|
-
environmentExists: vi.fn().mockResolvedValue(true), // Environment exists for updates
|
|
40
|
-
createEnvironmentVariables: vi.fn().mockResolvedValue({}),
|
|
41
|
-
createEnvironmentSecrets: vi.fn().mockResolvedValue({}),
|
|
42
|
-
};
|
|
43
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
-
vi.mocked(GitHubClient).mockImplementation(function () {
|
|
45
|
-
return mockGitHubClient;
|
|
46
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
describe('Basic Update Tests', () => {
|
|
50
|
-
it('should update environment using config file', async () => {
|
|
51
|
-
const { success, stdout, configPath } = await runUpdateWithConfig(validMinimalConfig, 'test-env', { repo: 'test-org/test-repo' });
|
|
52
|
-
await removeTempConfigFile(configPath);
|
|
53
|
-
expect(success).toBe(true);
|
|
54
|
-
expect(stdout).toContain('Configuration file loaded successfully');
|
|
55
|
-
});
|
|
56
|
-
it('should update environment using CLI flags', async () => {
|
|
57
|
-
const { success } = await runUpdateWithFlags('test-env', {
|
|
58
|
-
repo: 'test-org/test-repo',
|
|
59
|
-
awsRegion: 'us-west-2',
|
|
60
|
-
databaseName: 'updated-db',
|
|
61
|
-
});
|
|
62
|
-
expect(success).toBe(true);
|
|
63
|
-
});
|
|
64
|
-
it('should update specific fields only', async () => {
|
|
65
|
-
const { success } = await runUpdateWithFlags('test-env', {
|
|
66
|
-
repo: 'test-org/test-repo',
|
|
67
|
-
awsRegion: 'eu-west-1',
|
|
68
|
-
});
|
|
69
|
-
expect(success).toBe(true);
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
describe('Environment Name Tests', () => {
|
|
73
|
-
it('should accept environment name as positional argument', async () => {
|
|
74
|
-
const { success } = await runUpdateWithFlags('my-environment', {
|
|
75
|
-
repo: 'test-org/test-repo',
|
|
76
|
-
awsRegion: 'us-east-1',
|
|
77
|
-
});
|
|
78
|
-
expect(success).toBe(true);
|
|
79
|
-
// Environment name is used internally, may not appear in output
|
|
80
|
-
});
|
|
81
|
-
it('should accept environment name via flag', async () => {
|
|
82
|
-
const { success } = await runUpdateWithFlags('flag-environment', {
|
|
83
|
-
repo: 'test-org/test-repo',
|
|
84
|
-
awsRegion: 'us-east-1',
|
|
85
|
-
});
|
|
86
|
-
expect(success).toBe(true);
|
|
87
|
-
// Environment name is used internally, may not appear in output
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
describe('Update Specific Sections', () => {
|
|
91
|
-
it('should update networking configuration', async () => {
|
|
92
|
-
const { success } = await runUpdateWithFlags('test-env', {
|
|
93
|
-
repo: 'test-org/test-repo',
|
|
94
|
-
vpcId: 'vpc-updated123',
|
|
95
|
-
subnetIds: 'subnet-1,subnet-2',
|
|
96
|
-
});
|
|
97
|
-
expect(success).toBe(true);
|
|
98
|
-
});
|
|
99
|
-
it('should update security groups', async () => {
|
|
100
|
-
const { success } = await runUpdateWithFlags('test-env', {
|
|
101
|
-
repo: 'test-org/test-repo',
|
|
102
|
-
securityGroupIds: 'sg-updated1,sg-updated2',
|
|
103
|
-
});
|
|
104
|
-
expect(success).toBe(true);
|
|
105
|
-
});
|
|
106
|
-
it('should update feature flags', async () => {
|
|
107
|
-
const { success } = await runUpdateWithFlags('test-env', {
|
|
108
|
-
repo: 'test-org/test-repo',
|
|
109
|
-
enableMemory: true,
|
|
110
|
-
enableNotifications: false,
|
|
111
|
-
});
|
|
112
|
-
expect(success).toBe(true);
|
|
113
|
-
});
|
|
114
|
-
it('should update Hub integration', async () => {
|
|
115
|
-
const { success } = await runUpdateWithFlags('test-env', {
|
|
116
|
-
repo: 'test-org/test-repo',
|
|
117
|
-
hubApiUrl: 'https://updated-hub.example.com',
|
|
118
|
-
hubApiKey: 'updated-key',
|
|
119
|
-
});
|
|
120
|
-
expect(success).toBe(true);
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
describe('Validation Tests', () => {
|
|
124
|
-
it('should fail with invalid AWS account ID', async () => {
|
|
125
|
-
const { success } = await runUpdateWithFlags('test-env', {
|
|
126
|
-
repo: 'test-org/test-repo',
|
|
127
|
-
awsAccountId: '12345', // Invalid
|
|
128
|
-
});
|
|
129
|
-
expect(success).toBe(false);
|
|
130
|
-
});
|
|
131
|
-
// Note: Update command may not validate all fields the same way as create
|
|
132
|
-
// It accepts partial updates, so some validation is skipped
|
|
133
|
-
});
|
|
134
|
-
describe('Config Override Tests', () => {
|
|
135
|
-
it('should override config file with CLI flags', async () => {
|
|
136
|
-
const { success, configPath } = await runUpdateWithConfig(validMinimalConfig, 'test-env', { repo: 'test-org/test-repo' });
|
|
137
|
-
await removeTempConfigFile(configPath);
|
|
138
|
-
expect(success).toBe(true);
|
|
139
|
-
// Config was loaded and update succeeded
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
describe('Error Handling', () => {
|
|
143
|
-
it('should handle non-existent environment gracefully', async () => {
|
|
144
|
-
mockGitHubClient.environmentExists.mockResolvedValue(false);
|
|
145
|
-
const { success } = await runUpdateWithFlags('nonexistent-env', {
|
|
146
|
-
repo: 'test-org/test-repo',
|
|
147
|
-
awsRegion: 'us-east-1',
|
|
148
|
-
});
|
|
149
|
-
// Update command exits with error if environment doesn't exist
|
|
150
|
-
expect(success).toBe(false);
|
|
151
|
-
});
|
|
152
|
-
it.skip('should handle GitHub API errors', async () => {
|
|
153
|
-
// Note: This test is skipped because the update command flow with minimal config
|
|
154
|
-
// doesn't trigger the mocked API error paths. To properly test this, we would need
|
|
155
|
-
// to mock at a different point in the flow or provide more complete config that
|
|
156
|
-
// triggers the API calls we're trying to fail.
|
|
157
|
-
mockGitHubClient.getRepository.mockReset().mockRejectedValue(new Error('API Error'));
|
|
158
|
-
const { success } = await runUpdateWithFlags('test-env', {
|
|
159
|
-
repo: 'test-org/test-repo',
|
|
160
|
-
awsRegion: 'us-east-1',
|
|
161
|
-
});
|
|
162
|
-
expect(success).toBe(false);
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
//# sourceMappingURL=studio-update.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"studio-update.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/studio-update.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configure.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/configure.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { configureCommand } from '../configure.js';
|
|
3
|
-
import * as configFile from '../../utils/config-file.js';
|
|
4
|
-
import * as prompts from '@inquirer/prompts';
|
|
5
|
-
// Mock dependencies
|
|
6
|
-
vi.mock('../../utils/config-file.js');
|
|
7
|
-
vi.mock('@inquirer/prompts');
|
|
8
|
-
// Mock chalk to avoid ANSI codes in tests
|
|
9
|
-
const createChalkMock = () => {
|
|
10
|
-
const mockFn = (str) => str;
|
|
11
|
-
return new Proxy(mockFn, {
|
|
12
|
-
get: () => createChalkMock(),
|
|
13
|
-
apply: (target, thisArg, args) => args[0],
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
|
-
vi.mock('chalk', () => ({
|
|
17
|
-
default: createChalkMock(),
|
|
18
|
-
}));
|
|
19
|
-
// Mock ui utilities
|
|
20
|
-
vi.mock('../../utils/ui.js', () => ({
|
|
21
|
-
banner: vi.fn(),
|
|
22
|
-
highlight: vi.fn((text) => text),
|
|
23
|
-
dim: vi.fn((text) => text),
|
|
24
|
-
success: vi.fn(),
|
|
25
|
-
spinner: vi.fn(() => ({ stop: vi.fn() })),
|
|
26
|
-
}));
|
|
27
|
-
const mockReadConfig = vi.mocked(configFile.readConfig);
|
|
28
|
-
const mockWriteConfig = vi.mocked(configFile.writeConfig);
|
|
29
|
-
const mockGetConfigPath = vi.mocked(configFile.getConfigPath);
|
|
30
|
-
const mockConfigExists = vi.mocked(configFile.configExists);
|
|
31
|
-
const mockPassword = vi.mocked(prompts.password);
|
|
32
|
-
const mockInput = vi.mocked(prompts.input);
|
|
33
|
-
const mockConfirm = vi.mocked(prompts.confirm);
|
|
34
|
-
describe('configure command', () => {
|
|
35
|
-
beforeEach(() => {
|
|
36
|
-
vi.clearAllMocks();
|
|
37
|
-
mockGetConfigPath.mockReturnValue('/home/testuser/.sembix/config');
|
|
38
|
-
});
|
|
39
|
-
describe('configureCommand - new configuration', () => {
|
|
40
|
-
it('should create new config with token and org', async () => {
|
|
41
|
-
mockConfigExists.mockReturnValue(false);
|
|
42
|
-
mockReadConfig.mockResolvedValue({});
|
|
43
|
-
mockPassword.mockResolvedValue('ghp_newtokenvalue');
|
|
44
|
-
mockInput.mockResolvedValue('acme-corp');
|
|
45
|
-
mockWriteConfig.mockResolvedValue(undefined);
|
|
46
|
-
await configureCommand();
|
|
47
|
-
expect(mockPassword).toHaveBeenCalledWith(expect.objectContaining({
|
|
48
|
-
message: 'GitHub Personal Access Token:',
|
|
49
|
-
}));
|
|
50
|
-
expect(mockInput).toHaveBeenCalledWith(expect.objectContaining({
|
|
51
|
-
message: 'Default GitHub Organization (optional):',
|
|
52
|
-
}));
|
|
53
|
-
expect(mockWriteConfig).toHaveBeenCalledWith({
|
|
54
|
-
github_token: 'ghp_newtokenvalue',
|
|
55
|
-
default_github_org: 'acme-corp',
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
it('should create config with token only when org is empty', async () => {
|
|
59
|
-
mockConfigExists.mockReturnValue(false);
|
|
60
|
-
mockReadConfig.mockResolvedValue({});
|
|
61
|
-
mockPassword.mockResolvedValue('ghp_newtokenvalue');
|
|
62
|
-
mockInput.mockResolvedValue('');
|
|
63
|
-
mockWriteConfig.mockResolvedValue(undefined);
|
|
64
|
-
await configureCommand();
|
|
65
|
-
expect(mockWriteConfig).toHaveBeenCalledWith({
|
|
66
|
-
github_token: 'ghp_newtokenvalue',
|
|
67
|
-
default_github_org: undefined,
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
it('should trim whitespace from inputs', async () => {
|
|
71
|
-
mockConfigExists.mockReturnValue(false);
|
|
72
|
-
mockReadConfig.mockResolvedValue({});
|
|
73
|
-
mockPassword.mockResolvedValue(' ghp_newtokenvalue ');
|
|
74
|
-
mockInput.mockResolvedValue(' acme-corp ');
|
|
75
|
-
mockWriteConfig.mockResolvedValue(undefined);
|
|
76
|
-
await configureCommand();
|
|
77
|
-
expect(mockWriteConfig).toHaveBeenCalledWith({
|
|
78
|
-
github_token: 'ghp_newtokenvalue',
|
|
79
|
-
default_github_org: 'acme-corp',
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
describe('configureCommand - updating existing configuration', () => {
|
|
84
|
-
it('should show existing token and allow keeping it', async () => {
|
|
85
|
-
mockConfigExists.mockReturnValue(true);
|
|
86
|
-
mockReadConfig.mockResolvedValue({
|
|
87
|
-
github_token: 'ghp_existingtoken',
|
|
88
|
-
default_github_org: 'old-org',
|
|
89
|
-
});
|
|
90
|
-
mockConfirm.mockResolvedValue(true); // Keep existing
|
|
91
|
-
mockInput.mockResolvedValue('new-org');
|
|
92
|
-
mockWriteConfig.mockResolvedValue(undefined);
|
|
93
|
-
await configureCommand();
|
|
94
|
-
expect(mockConfirm).toHaveBeenCalledWith(expect.objectContaining({
|
|
95
|
-
message: 'Keep existing token?',
|
|
96
|
-
default: true,
|
|
97
|
-
}));
|
|
98
|
-
expect(mockWriteConfig).toHaveBeenCalledWith({
|
|
99
|
-
github_token: 'ghp_existingtoken',
|
|
100
|
-
default_github_org: 'new-org',
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
it('should allow replacing existing token', async () => {
|
|
104
|
-
mockConfigExists.mockReturnValue(true);
|
|
105
|
-
mockReadConfig.mockResolvedValue({
|
|
106
|
-
github_token: 'ghp_existingtoken',
|
|
107
|
-
default_github_org: 'old-org',
|
|
108
|
-
});
|
|
109
|
-
mockConfirm.mockResolvedValue(false); // Replace token
|
|
110
|
-
mockPassword.mockResolvedValue('ghp_newtoken');
|
|
111
|
-
mockInput.mockResolvedValue('new-org');
|
|
112
|
-
mockWriteConfig.mockResolvedValue(undefined);
|
|
113
|
-
await configureCommand();
|
|
114
|
-
expect(mockPassword).toHaveBeenCalled();
|
|
115
|
-
expect(mockWriteConfig).toHaveBeenCalledWith({
|
|
116
|
-
github_token: 'ghp_newtoken',
|
|
117
|
-
default_github_org: 'new-org',
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
it('should prompt for new token when no existing token', async () => {
|
|
121
|
-
mockConfigExists.mockReturnValue(true);
|
|
122
|
-
mockReadConfig.mockResolvedValue({
|
|
123
|
-
default_github_org: 'old-org',
|
|
124
|
-
});
|
|
125
|
-
mockPassword.mockResolvedValue('ghp_newtoken');
|
|
126
|
-
mockInput.mockResolvedValue('old-org');
|
|
127
|
-
mockWriteConfig.mockResolvedValue(undefined);
|
|
128
|
-
await configureCommand();
|
|
129
|
-
expect(mockConfirm).not.toHaveBeenCalled();
|
|
130
|
-
expect(mockPassword).toHaveBeenCalled();
|
|
131
|
-
expect(mockWriteConfig).toHaveBeenCalledWith({
|
|
132
|
-
github_token: 'ghp_newtoken',
|
|
133
|
-
default_github_org: 'old-org',
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
describe('configureCommand - validation', () => {
|
|
138
|
-
it('should validate token starts with ghp_ (new config)', async () => {
|
|
139
|
-
mockConfigExists.mockReturnValue(false);
|
|
140
|
-
mockReadConfig.mockResolvedValue({});
|
|
141
|
-
mockPassword.mockResolvedValue('ghp_validtoken');
|
|
142
|
-
mockInput.mockResolvedValue('');
|
|
143
|
-
mockWriteConfig.mockResolvedValue(undefined);
|
|
144
|
-
await configureCommand();
|
|
145
|
-
const validateFn = mockPassword.mock.calls[0][0].validate;
|
|
146
|
-
expect(validateFn).toBeDefined();
|
|
147
|
-
if (validateFn) {
|
|
148
|
-
expect(validateFn('ghp_test123')).toBe(true);
|
|
149
|
-
expect(validateFn('github_pat_test123')).toBe(true);
|
|
150
|
-
expect(validateFn('invalid_token')).toBe('Token should start with ghp_ or github_pat_');
|
|
151
|
-
expect(validateFn('')).toBe('GitHub token is required');
|
|
152
|
-
expect(validateFn(' ')).toBe('GitHub token is required');
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
it('should validate token when replacing existing token', async () => {
|
|
156
|
-
mockConfigExists.mockReturnValue(true);
|
|
157
|
-
mockReadConfig.mockResolvedValue({
|
|
158
|
-
github_token: 'ghp_oldtoken',
|
|
159
|
-
});
|
|
160
|
-
mockConfirm.mockResolvedValue(false); // Replace token
|
|
161
|
-
mockPassword.mockResolvedValue('ghp_newtoken');
|
|
162
|
-
mockInput.mockResolvedValue('');
|
|
163
|
-
mockWriteConfig.mockResolvedValue(undefined);
|
|
164
|
-
await configureCommand();
|
|
165
|
-
// Should have validation function on the password call for replacement
|
|
166
|
-
const passwordCalls = mockPassword.mock.calls;
|
|
167
|
-
const validateFn = passwordCalls[0][0].validate;
|
|
168
|
-
expect(validateFn).toBeDefined();
|
|
169
|
-
if (validateFn) {
|
|
170
|
-
expect(validateFn('ghp_test456')).toBe(true);
|
|
171
|
-
expect(validateFn('github_pat_test789')).toBe(true);
|
|
172
|
-
expect(validateFn('bad_token')).toBe('Token should start with ghp_ or github_pat_');
|
|
173
|
-
expect(validateFn('')).toBe('GitHub token is required');
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
describe('configureCommand - error handling', () => {
|
|
178
|
-
it('should throw error when write fails', async () => {
|
|
179
|
-
mockConfigExists.mockReturnValue(false);
|
|
180
|
-
mockReadConfig.mockResolvedValue({});
|
|
181
|
-
mockPassword.mockResolvedValue('ghp_newtokenvalue');
|
|
182
|
-
mockInput.mockResolvedValue('acme-corp');
|
|
183
|
-
mockWriteConfig.mockRejectedValue(new Error('Permission denied'));
|
|
184
|
-
await expect(configureCommand()).rejects.toThrow('Failed to save configuration: Permission denied');
|
|
185
|
-
});
|
|
186
|
-
it('should handle read config errors gracefully', async () => {
|
|
187
|
-
mockConfigExists.mockReturnValue(true);
|
|
188
|
-
// readConfig catches errors internally and returns empty object
|
|
189
|
-
mockReadConfig.mockResolvedValue({});
|
|
190
|
-
mockPassword.mockResolvedValue('ghp_newtokenvalue');
|
|
191
|
-
mockInput.mockResolvedValue('acme-corp');
|
|
192
|
-
mockWriteConfig.mockResolvedValue(undefined);
|
|
193
|
-
// Should not throw, should treat as no existing config
|
|
194
|
-
await configureCommand();
|
|
195
|
-
expect(mockWriteConfig).toHaveBeenCalledWith({
|
|
196
|
-
github_token: 'ghp_newtokenvalue',
|
|
197
|
-
default_github_org: 'acme-corp',
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
});
|
|
201
|
-
describe('configureCommand - default values', () => {
|
|
202
|
-
it('should use existing org as default for input prompt', async () => {
|
|
203
|
-
mockConfigExists.mockReturnValue(true);
|
|
204
|
-
mockReadConfig.mockResolvedValue({
|
|
205
|
-
github_token: 'ghp_existingtoken',
|
|
206
|
-
default_github_org: 'existing-org',
|
|
207
|
-
});
|
|
208
|
-
mockConfirm.mockResolvedValue(true);
|
|
209
|
-
mockInput.mockResolvedValue('existing-org');
|
|
210
|
-
mockWriteConfig.mockResolvedValue(undefined);
|
|
211
|
-
await configureCommand();
|
|
212
|
-
expect(mockInput).toHaveBeenCalledWith(expect.objectContaining({
|
|
213
|
-
default: 'existing-org',
|
|
214
|
-
}));
|
|
215
|
-
});
|
|
216
|
-
it('should use empty string as default when no existing org', async () => {
|
|
217
|
-
mockConfigExists.mockReturnValue(false);
|
|
218
|
-
mockReadConfig.mockResolvedValue({});
|
|
219
|
-
mockPassword.mockResolvedValue('ghp_newtoken');
|
|
220
|
-
mockInput.mockResolvedValue('');
|
|
221
|
-
mockWriteConfig.mockResolvedValue(undefined);
|
|
222
|
-
await configureCommand();
|
|
223
|
-
expect(mockInput).toHaveBeenCalledWith(expect.objectContaining({
|
|
224
|
-
default: '',
|
|
225
|
-
}));
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
});
|
|
229
|
-
//# sourceMappingURL=configure.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configure.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/configure.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"environment-setup.test.d.ts","sourceRoot":"","sources":["../../../src/prompts/__tests__/environment-setup.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,206 +0,0 @@
|
|
|
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
|