@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.
Files changed (204) hide show
  1. package/COMMANDS.md +1522 -0
  2. package/QUICKSTART.md +829 -0
  3. package/README.md +1949 -285
  4. package/USAGE-EXAMPLES.md +872 -0
  5. package/dist/commands/configure.d.ts.map +1 -1
  6. package/dist/commands/configure.js +172 -2
  7. package/dist/commands/configure.js.map +1 -1
  8. package/dist/commands/index.d.ts +10 -0
  9. package/dist/commands/index.d.ts.map +1 -0
  10. package/dist/commands/index.js +11 -0
  11. package/dist/commands/index.js.map +1 -0
  12. package/dist/commands/login.d.ts +19 -0
  13. package/dist/commands/login.d.ts.map +1 -0
  14. package/dist/commands/login.js +118 -0
  15. package/dist/commands/login.js.map +1 -0
  16. package/dist/commands/logout.d.ts +21 -0
  17. package/dist/commands/logout.d.ts.map +1 -0
  18. package/dist/commands/logout.js +66 -0
  19. package/dist/commands/logout.js.map +1 -0
  20. package/dist/commands/profile-project.d.ts +14 -0
  21. package/dist/commands/profile-project.d.ts.map +1 -0
  22. package/dist/commands/profile-project.js +123 -0
  23. package/dist/commands/profile-project.js.map +1 -0
  24. package/dist/commands/profile.d.ts +26 -0
  25. package/dist/commands/profile.d.ts.map +1 -0
  26. package/dist/commands/profile.js +177 -0
  27. package/dist/commands/profile.js.map +1 -0
  28. package/dist/commands/project.d.ts +16 -0
  29. package/dist/commands/project.d.ts.map +1 -0
  30. package/dist/commands/project.js +153 -0
  31. package/dist/commands/project.js.map +1 -0
  32. package/dist/commands/setup.js +1 -1
  33. package/dist/commands/setup.js.map +1 -1
  34. package/dist/commands/update.js +2 -2
  35. package/dist/commands/update.js.map +1 -1
  36. package/dist/commands/workflow.d.ts +91 -0
  37. package/dist/commands/workflow.d.ts.map +1 -0
  38. package/dist/commands/workflow.js +1201 -0
  39. package/dist/commands/workflow.js.map +1 -0
  40. package/dist/config-schema.d.ts +23 -0
  41. package/dist/config-schema.d.ts.map +1 -1
  42. package/dist/config-schema.js +21 -1
  43. package/dist/config-schema.js.map +1 -1
  44. package/dist/config.d.ts +4 -0
  45. package/dist/config.d.ts.map +1 -1
  46. package/dist/config.js +23 -2
  47. package/dist/config.js.map +1 -1
  48. package/dist/index.js +318 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/prompts/project-selection.d.ts +8 -0
  51. package/dist/prompts/project-selection.d.ts.map +1 -0
  52. package/dist/prompts/project-selection.js +132 -0
  53. package/dist/prompts/project-selection.js.map +1 -0
  54. package/dist/prompts/workflow-inputs.d.ts +10 -0
  55. package/dist/prompts/workflow-inputs.d.ts.map +1 -0
  56. package/dist/prompts/workflow-inputs.js +71 -0
  57. package/dist/prompts/workflow-inputs.js.map +1 -0
  58. package/dist/prompts/workflow-selection.d.ts +8 -0
  59. package/dist/prompts/workflow-selection.d.ts.map +1 -0
  60. package/dist/prompts/workflow-selection.js +147 -0
  61. package/dist/prompts/workflow-selection.js.map +1 -0
  62. package/dist/sembix-cli-1.4.1.tgz +0 -0
  63. package/dist/services/cognito-auth.d.ts +92 -0
  64. package/dist/services/cognito-auth.d.ts.map +1 -0
  65. package/dist/services/cognito-auth.js +319 -0
  66. package/dist/services/cognito-auth.js.map +1 -0
  67. package/dist/services/studio-api-client.d.ts +127 -0
  68. package/dist/services/studio-api-client.d.ts.map +1 -0
  69. package/dist/services/studio-api-client.js +291 -0
  70. package/dist/services/studio-api-client.js.map +1 -0
  71. package/dist/types/studio.d.ts +82 -0
  72. package/dist/types/studio.d.ts.map +1 -0
  73. package/dist/types/studio.js +7 -0
  74. package/dist/types/studio.js.map +1 -0
  75. package/dist/types.d.ts +283 -0
  76. package/dist/types.d.ts.map +1 -1
  77. package/dist/types.js +5 -0
  78. package/dist/types.js.map +1 -1
  79. package/dist/utils/browser-auth.d.ts +45 -0
  80. package/dist/utils/browser-auth.d.ts.map +1 -0
  81. package/dist/utils/browser-auth.js +168 -0
  82. package/dist/utils/browser-auth.js.map +1 -0
  83. package/dist/utils/cognito-auth.d.ts +3 -0
  84. package/dist/utils/cognito-auth.d.ts.map +1 -0
  85. package/dist/utils/cognito-auth.js +3 -0
  86. package/dist/utils/cognito-auth.js.map +1 -0
  87. package/dist/utils/config-file.d.ts +40 -0
  88. package/dist/utils/config-file.d.ts.map +1 -1
  89. package/dist/utils/config-file.js +158 -4
  90. package/dist/utils/config-file.js.map +1 -1
  91. package/dist/utils/environment.d.ts +22 -0
  92. package/dist/utils/environment.d.ts.map +1 -0
  93. package/dist/utils/environment.js +39 -0
  94. package/dist/utils/environment.js.map +1 -0
  95. package/dist/utils/error-handler.d.ts +53 -0
  96. package/dist/utils/error-handler.d.ts.map +1 -0
  97. package/dist/utils/error-handler.js +174 -0
  98. package/dist/utils/error-handler.js.map +1 -0
  99. package/dist/utils/fuzzy-match.d.ts +31 -0
  100. package/dist/utils/fuzzy-match.d.ts.map +1 -0
  101. package/dist/utils/fuzzy-match.js +138 -0
  102. package/dist/utils/fuzzy-match.js.map +1 -0
  103. package/dist/utils/github.d.ts +2 -2
  104. package/dist/utils/github.d.ts.map +1 -1
  105. package/dist/utils/github.js +30 -10
  106. package/dist/utils/github.js.map +1 -1
  107. package/dist/utils/input-parser.d.ts +14 -0
  108. package/dist/utils/input-parser.d.ts.map +1 -0
  109. package/dist/utils/input-parser.js +34 -0
  110. package/dist/utils/input-parser.js.map +1 -0
  111. package/dist/utils/output.d.ts +55 -0
  112. package/dist/utils/output.d.ts.map +1 -0
  113. package/dist/utils/output.js +80 -0
  114. package/dist/utils/output.js.map +1 -0
  115. package/dist/utils/recent-workflows.d.ts +37 -0
  116. package/dist/utils/recent-workflows.d.ts.map +1 -0
  117. package/dist/utils/recent-workflows.js +172 -0
  118. package/dist/utils/recent-workflows.js.map +1 -0
  119. package/dist/utils/studio-api-client.d.ts +3 -0
  120. package/dist/utils/studio-api-client.d.ts.map +1 -0
  121. package/dist/utils/studio-api-client.js +3 -0
  122. package/dist/utils/studio-api-client.js.map +1 -0
  123. package/dist/utils/studio-api.d.ts +53 -0
  124. package/dist/utils/studio-api.d.ts.map +1 -0
  125. package/dist/utils/studio-api.js +102 -0
  126. package/dist/utils/studio-api.js.map +1 -0
  127. package/dist/utils/studio-config.d.ts +74 -0
  128. package/dist/utils/studio-config.d.ts.map +1 -0
  129. package/dist/utils/studio-config.js +213 -0
  130. package/dist/utils/studio-config.js.map +1 -0
  131. package/dist/utils/token-manager.d.ts +4 -0
  132. package/dist/utils/token-manager.d.ts.map +1 -0
  133. package/dist/utils/token-manager.js +3 -0
  134. package/dist/utils/token-manager.js.map +1 -0
  135. package/dist/utils/ui.d.ts +55 -1
  136. package/dist/utils/ui.d.ts.map +1 -1
  137. package/dist/utils/ui.js +151 -2
  138. package/dist/utils/ui.js.map +1 -1
  139. package/package.json +4 -1
  140. package/dist/__tests__/config-schema.test.d.ts +0 -2
  141. package/dist/__tests__/config-schema.test.d.ts.map +0 -1
  142. package/dist/__tests__/config-schema.test.js +0 -471
  143. package/dist/__tests__/config-schema.test.js.map +0 -1
  144. package/dist/__tests__/config.test.d.ts +0 -2
  145. package/dist/__tests__/config.test.d.ts.map +0 -1
  146. package/dist/__tests__/config.test.js +0 -75
  147. package/dist/__tests__/config.test.js.map +0 -1
  148. package/dist/__tests__/integration/configure.test.d.ts +0 -2
  149. package/dist/__tests__/integration/configure.test.d.ts.map +0 -1
  150. package/dist/__tests__/integration/configure.test.js +0 -247
  151. package/dist/__tests__/integration/configure.test.js.map +0 -1
  152. package/dist/__tests__/integration/fixtures/configs.d.ts +0 -477
  153. package/dist/__tests__/integration/fixtures/configs.d.ts.map +0 -1
  154. package/dist/__tests__/integration/fixtures/configs.js +0 -175
  155. package/dist/__tests__/integration/fixtures/configs.js.map +0 -1
  156. package/dist/__tests__/integration/helpers/cli-runner.d.ts +0 -63
  157. package/dist/__tests__/integration/helpers/cli-runner.d.ts.map +0 -1
  158. package/dist/__tests__/integration/helpers/cli-runner.js +0 -152
  159. package/dist/__tests__/integration/helpers/cli-runner.js.map +0 -1
  160. package/dist/__tests__/integration/helpers/command-runner.d.ts +0 -53
  161. package/dist/__tests__/integration/helpers/command-runner.d.ts.map +0 -1
  162. package/dist/__tests__/integration/helpers/command-runner.js +0 -117
  163. package/dist/__tests__/integration/helpers/command-runner.js.map +0 -1
  164. package/dist/__tests__/integration/studio-create.test.d.ts +0 -2
  165. package/dist/__tests__/integration/studio-create.test.d.ts.map +0 -1
  166. package/dist/__tests__/integration/studio-create.test.js +0 -209
  167. package/dist/__tests__/integration/studio-create.test.js.map +0 -1
  168. package/dist/__tests__/integration/studio-update.test.d.ts +0 -2
  169. package/dist/__tests__/integration/studio-update.test.d.ts.map +0 -1
  170. package/dist/__tests__/integration/studio-update.test.js +0 -166
  171. package/dist/__tests__/integration/studio-update.test.js.map +0 -1
  172. package/dist/commands/__tests__/configure.test.d.ts +0 -2
  173. package/dist/commands/__tests__/configure.test.d.ts.map +0 -1
  174. package/dist/commands/__tests__/configure.test.js +0 -229
  175. package/dist/commands/__tests__/configure.test.js.map +0 -1
  176. package/dist/prompts/__tests__/environment-setup.test.d.ts +0 -2
  177. package/dist/prompts/__tests__/environment-setup.test.d.ts.map +0 -1
  178. package/dist/prompts/__tests__/environment-setup.test.js +0 -206
  179. package/dist/prompts/__tests__/environment-setup.test.js.map +0 -1
  180. package/dist/prompts/__tests__/hub-integration.test.d.ts +0 -2
  181. package/dist/prompts/__tests__/hub-integration.test.d.ts.map +0 -1
  182. package/dist/prompts/__tests__/hub-integration.test.js +0 -126
  183. package/dist/prompts/__tests__/hub-integration.test.js.map +0 -1
  184. package/dist/prompts/__tests__/prompt-helpers.test.d.ts +0 -2
  185. package/dist/prompts/__tests__/prompt-helpers.test.d.ts.map +0 -1
  186. package/dist/prompts/__tests__/prompt-helpers.test.js +0 -235
  187. package/dist/prompts/__tests__/prompt-helpers.test.js.map +0 -1
  188. package/dist/sembix-cli-1.3.0.tgz +0 -0
  189. package/dist/utils/__tests__/config-file.test.d.ts +0 -2
  190. package/dist/utils/__tests__/config-file.test.d.ts.map +0 -1
  191. package/dist/utils/__tests__/config-file.test.js +0 -218
  192. package/dist/utils/__tests__/config-file.test.js.map +0 -1
  193. package/dist/utils/__tests__/config-loader.test.d.ts +0 -2
  194. package/dist/utils/__tests__/config-loader.test.d.ts.map +0 -1
  195. package/dist/utils/__tests__/config-loader.test.js +0 -325
  196. package/dist/utils/__tests__/config-loader.test.js.map +0 -1
  197. package/dist/utils/__tests__/github.test.d.ts +0 -2
  198. package/dist/utils/__tests__/github.test.d.ts.map +0 -1
  199. package/dist/utils/__tests__/github.test.js +0 -282
  200. package/dist/utils/__tests__/github.test.js.map +0 -1
  201. package/dist/utils/__tests__/ui.test.d.ts +0 -2
  202. package/dist/utils/__tests__/ui.test.d.ts.map +0 -1
  203. package/dist/utils/__tests__/ui.test.js +0 -256
  204. 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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAqB;AACrB,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAEjC,eAAe;AACf,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC;IACjD,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;IACnD,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACxC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;CAC9C,CAAC,CAAC,CAAC;AAEJ,aAAa;AACb,MAAM,eAAe,GAAG,GAAG,EAAE;IAC3B,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC;IACpC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACvB,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE;QAC5B,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACtB,OAAO,EAAE,eAAe,EAAE;CAC3B,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,8DAA8D;IAC9D,IAAI,gBAAqB,CAAC;IAE1B,UAAU,CAAC,GAAG,EAAE;QACd,gBAAgB,GAAG;YACjB,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBAC1C,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAE;aAC1E,CAAC;YACF,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBACvC,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,oBAAoB;aAChC,CAAC;YACF,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChD,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,iCAAiC;YACrF,0BAA0B,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACzD,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;SACxD,CAAC;QAEF,8DAA8D;QAC9D,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,kBAAkB,CAAC;YACzC,OAAO,gBAAgB,CAAC;YACxB,8DAA8D;QAChE,CAAQ,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,mBAAmB,CAC/D,kBAAkB,EAClB,UAAU,EACV,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAC/B,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAEvC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE;gBACvD,IAAI,EAAE,oBAAoB;gBAC1B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,YAAY;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE;gBACvD,IAAI,EAAE,oBAAoB;gBAC1B,SAAS,EAAE,WAAW;aACvB,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,gBAAgB,EAAE;gBAC7D,IAAI,EAAE,oBAAoB;gBAC1B,SAAS,EAAE,WAAW;aACvB,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,gEAAgE;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,kBAAkB,EAAE;gBAC/D,IAAI,EAAE,oBAAoB;gBAC1B,SAAS,EAAE,WAAW;aACvB,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,gEAAgE;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE;gBACvD,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,gBAAgB;gBACvB,SAAS,EAAE,mBAAmB;aAC/B,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE;gBACvD,IAAI,EAAE,oBAAoB;gBAC1B,gBAAgB,EAAE,yBAAyB;aAC5C,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE;gBACvD,IAAI,EAAE,oBAAoB;gBAC1B,YAAY,EAAE,IAAI;gBAClB,mBAAmB,EAAE,KAAK;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE;gBACvD,IAAI,EAAE,oBAAoB;gBAC1B,SAAS,EAAE,iCAAiC;gBAC5C,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE;gBACvD,IAAI,EAAE,oBAAoB;gBAC1B,YAAY,EAAE,OAAO,EAAE,UAAU;aAClC,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,0EAA0E;QAC1E,4DAA4D;IAC9D,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,mBAAmB,CACvD,kBAAkB,EAClB,UAAU,EACV,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAC/B,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAEvC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,yCAAyC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,gBAAgB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAE5D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,iBAAiB,EAAE;gBAC9D,IAAI,EAAE,oBAAoB;gBAC1B,SAAS,EAAE,WAAW;aACvB,CAAC,CAAC;YAEH,+DAA+D;YAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YACpD,iFAAiF;YACjF,mFAAmF;YACnF,gFAAgF;YAChF,+CAA+C;YAC/C,gBAAgB,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;YAErF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE;gBACvD,IAAI,EAAE,oBAAoB;gBAC1B,SAAS,EAAE,WAAW;aACvB,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=configure.test.d.ts.map
@@ -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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=environment-setup.test.d.ts.map
@@ -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