@sembix/cli 1.2.1 → 1.4.0

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 (205) hide show
  1. package/COMMANDS.md +1522 -0
  2. package/QUICKSTART.md +829 -0
  3. package/README.md +1976 -309
  4. package/USAGE-EXAMPLES.md +872 -0
  5. package/config.example.yaml +3 -0
  6. package/dist/commands/configure.d.ts.map +1 -1
  7. package/dist/commands/configure.js +172 -2
  8. package/dist/commands/configure.js.map +1 -1
  9. package/dist/commands/index.d.ts +10 -0
  10. package/dist/commands/index.d.ts.map +1 -0
  11. package/dist/commands/index.js +11 -0
  12. package/dist/commands/index.js.map +1 -0
  13. package/dist/commands/login.d.ts +19 -0
  14. package/dist/commands/login.d.ts.map +1 -0
  15. package/dist/commands/login.js +118 -0
  16. package/dist/commands/login.js.map +1 -0
  17. package/dist/commands/logout.d.ts +21 -0
  18. package/dist/commands/logout.d.ts.map +1 -0
  19. package/dist/commands/logout.js +66 -0
  20. package/dist/commands/logout.js.map +1 -0
  21. package/dist/commands/profile-project.d.ts +14 -0
  22. package/dist/commands/profile-project.d.ts.map +1 -0
  23. package/dist/commands/profile-project.js +123 -0
  24. package/dist/commands/profile-project.js.map +1 -0
  25. package/dist/commands/profile.d.ts +26 -0
  26. package/dist/commands/profile.d.ts.map +1 -0
  27. package/dist/commands/profile.js +177 -0
  28. package/dist/commands/profile.js.map +1 -0
  29. package/dist/commands/project.d.ts +16 -0
  30. package/dist/commands/project.d.ts.map +1 -0
  31. package/dist/commands/project.js +153 -0
  32. package/dist/commands/project.js.map +1 -0
  33. package/dist/commands/setup.js +3 -0
  34. package/dist/commands/setup.js.map +1 -1
  35. package/dist/commands/workflow.d.ts +91 -0
  36. package/dist/commands/workflow.d.ts.map +1 -0
  37. package/dist/commands/workflow.js +1201 -0
  38. package/dist/commands/workflow.js.map +1 -0
  39. package/dist/config-schema.d.ts +26 -0
  40. package/dist/config-schema.d.ts.map +1 -1
  41. package/dist/config-schema.js +24 -1
  42. package/dist/config-schema.js.map +1 -1
  43. package/dist/config.d.ts +4 -0
  44. package/dist/config.d.ts.map +1 -1
  45. package/dist/config.js +23 -2
  46. package/dist/config.js.map +1 -1
  47. package/dist/index.js +324 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/prompts/environment-setup.d.ts.map +1 -1
  50. package/dist/prompts/environment-setup.js +12 -0
  51. package/dist/prompts/environment-setup.js.map +1 -1
  52. package/dist/prompts/project-selection.d.ts +8 -0
  53. package/dist/prompts/project-selection.d.ts.map +1 -0
  54. package/dist/prompts/project-selection.js +132 -0
  55. package/dist/prompts/project-selection.js.map +1 -0
  56. package/dist/prompts/workflow-inputs.d.ts +10 -0
  57. package/dist/prompts/workflow-inputs.d.ts.map +1 -0
  58. package/dist/prompts/workflow-inputs.js +71 -0
  59. package/dist/prompts/workflow-inputs.js.map +1 -0
  60. package/dist/prompts/workflow-selection.d.ts +8 -0
  61. package/dist/prompts/workflow-selection.d.ts.map +1 -0
  62. package/dist/prompts/workflow-selection.js +147 -0
  63. package/dist/prompts/workflow-selection.js.map +1 -0
  64. package/dist/sembix-cli-1.4.0.tgz +0 -0
  65. package/dist/services/cognito-auth.d.ts +92 -0
  66. package/dist/services/cognito-auth.d.ts.map +1 -0
  67. package/dist/services/cognito-auth.js +319 -0
  68. package/dist/services/cognito-auth.js.map +1 -0
  69. package/dist/services/studio-api-client.d.ts +127 -0
  70. package/dist/services/studio-api-client.d.ts.map +1 -0
  71. package/dist/services/studio-api-client.js +291 -0
  72. package/dist/services/studio-api-client.js.map +1 -0
  73. package/dist/types/studio.d.ts +82 -0
  74. package/dist/types/studio.d.ts.map +1 -0
  75. package/dist/types/studio.js +7 -0
  76. package/dist/types/studio.js.map +1 -0
  77. package/dist/types.d.ts +286 -0
  78. package/dist/types.d.ts.map +1 -1
  79. package/dist/types.js +5 -0
  80. package/dist/types.js.map +1 -1
  81. package/dist/utils/browser-auth.d.ts +45 -0
  82. package/dist/utils/browser-auth.d.ts.map +1 -0
  83. package/dist/utils/browser-auth.js +168 -0
  84. package/dist/utils/browser-auth.js.map +1 -0
  85. package/dist/utils/cognito-auth.d.ts +3 -0
  86. package/dist/utils/cognito-auth.d.ts.map +1 -0
  87. package/dist/utils/cognito-auth.js +3 -0
  88. package/dist/utils/cognito-auth.js.map +1 -0
  89. package/dist/utils/config-file.d.ts +40 -0
  90. package/dist/utils/config-file.d.ts.map +1 -1
  91. package/dist/utils/config-file.js +158 -4
  92. package/dist/utils/config-file.js.map +1 -1
  93. package/dist/utils/config-loader.d.ts.map +1 -1
  94. package/dist/utils/config-loader.js +15 -2
  95. package/dist/utils/config-loader.js.map +1 -1
  96. package/dist/utils/environment.d.ts +22 -0
  97. package/dist/utils/environment.d.ts.map +1 -0
  98. package/dist/utils/environment.js +39 -0
  99. package/dist/utils/environment.js.map +1 -0
  100. package/dist/utils/error-handler.d.ts +53 -0
  101. package/dist/utils/error-handler.d.ts.map +1 -0
  102. package/dist/utils/error-handler.js +174 -0
  103. package/dist/utils/error-handler.js.map +1 -0
  104. package/dist/utils/fuzzy-match.d.ts +31 -0
  105. package/dist/utils/fuzzy-match.d.ts.map +1 -0
  106. package/dist/utils/fuzzy-match.js +138 -0
  107. package/dist/utils/fuzzy-match.js.map +1 -0
  108. package/dist/utils/input-parser.d.ts +14 -0
  109. package/dist/utils/input-parser.d.ts.map +1 -0
  110. package/dist/utils/input-parser.js +34 -0
  111. package/dist/utils/input-parser.js.map +1 -0
  112. package/dist/utils/output.d.ts +55 -0
  113. package/dist/utils/output.d.ts.map +1 -0
  114. package/dist/utils/output.js +80 -0
  115. package/dist/utils/output.js.map +1 -0
  116. package/dist/utils/recent-workflows.d.ts +37 -0
  117. package/dist/utils/recent-workflows.d.ts.map +1 -0
  118. package/dist/utils/recent-workflows.js +172 -0
  119. package/dist/utils/recent-workflows.js.map +1 -0
  120. package/dist/utils/studio-api-client.d.ts +3 -0
  121. package/dist/utils/studio-api-client.d.ts.map +1 -0
  122. package/dist/utils/studio-api-client.js +3 -0
  123. package/dist/utils/studio-api-client.js.map +1 -0
  124. package/dist/utils/studio-api.d.ts +53 -0
  125. package/dist/utils/studio-api.d.ts.map +1 -0
  126. package/dist/utils/studio-api.js +102 -0
  127. package/dist/utils/studio-api.js.map +1 -0
  128. package/dist/utils/studio-config.d.ts +74 -0
  129. package/dist/utils/studio-config.d.ts.map +1 -0
  130. package/dist/utils/studio-config.js +213 -0
  131. package/dist/utils/studio-config.js.map +1 -0
  132. package/dist/utils/token-manager.d.ts +4 -0
  133. package/dist/utils/token-manager.d.ts.map +1 -0
  134. package/dist/utils/token-manager.js +3 -0
  135. package/dist/utils/token-manager.js.map +1 -0
  136. package/dist/utils/ui.d.ts +55 -1
  137. package/dist/utils/ui.d.ts.map +1 -1
  138. package/dist/utils/ui.js +151 -2
  139. package/dist/utils/ui.js.map +1 -1
  140. package/package.json +4 -1
  141. package/dist/__tests__/config-schema.test.d.ts +0 -2
  142. package/dist/__tests__/config-schema.test.d.ts.map +0 -1
  143. package/dist/__tests__/config-schema.test.js +0 -471
  144. package/dist/__tests__/config-schema.test.js.map +0 -1
  145. package/dist/__tests__/config.test.d.ts +0 -2
  146. package/dist/__tests__/config.test.d.ts.map +0 -1
  147. package/dist/__tests__/config.test.js +0 -75
  148. package/dist/__tests__/config.test.js.map +0 -1
  149. package/dist/__tests__/integration/configure.test.d.ts +0 -2
  150. package/dist/__tests__/integration/configure.test.d.ts.map +0 -1
  151. package/dist/__tests__/integration/configure.test.js +0 -247
  152. package/dist/__tests__/integration/configure.test.js.map +0 -1
  153. package/dist/__tests__/integration/fixtures/configs.d.ts +0 -477
  154. package/dist/__tests__/integration/fixtures/configs.d.ts.map +0 -1
  155. package/dist/__tests__/integration/fixtures/configs.js +0 -175
  156. package/dist/__tests__/integration/fixtures/configs.js.map +0 -1
  157. package/dist/__tests__/integration/helpers/cli-runner.d.ts +0 -63
  158. package/dist/__tests__/integration/helpers/cli-runner.d.ts.map +0 -1
  159. package/dist/__tests__/integration/helpers/cli-runner.js +0 -152
  160. package/dist/__tests__/integration/helpers/cli-runner.js.map +0 -1
  161. package/dist/__tests__/integration/helpers/command-runner.d.ts +0 -53
  162. package/dist/__tests__/integration/helpers/command-runner.d.ts.map +0 -1
  163. package/dist/__tests__/integration/helpers/command-runner.js +0 -117
  164. package/dist/__tests__/integration/helpers/command-runner.js.map +0 -1
  165. package/dist/__tests__/integration/studio-create.test.d.ts +0 -2
  166. package/dist/__tests__/integration/studio-create.test.d.ts.map +0 -1
  167. package/dist/__tests__/integration/studio-create.test.js +0 -209
  168. package/dist/__tests__/integration/studio-create.test.js.map +0 -1
  169. package/dist/__tests__/integration/studio-update.test.d.ts +0 -2
  170. package/dist/__tests__/integration/studio-update.test.d.ts.map +0 -1
  171. package/dist/__tests__/integration/studio-update.test.js +0 -166
  172. package/dist/__tests__/integration/studio-update.test.js.map +0 -1
  173. package/dist/commands/__tests__/configure.test.d.ts +0 -2
  174. package/dist/commands/__tests__/configure.test.d.ts.map +0 -1
  175. package/dist/commands/__tests__/configure.test.js +0 -229
  176. package/dist/commands/__tests__/configure.test.js.map +0 -1
  177. package/dist/prompts/__tests__/environment-setup.test.d.ts +0 -2
  178. package/dist/prompts/__tests__/environment-setup.test.d.ts.map +0 -1
  179. package/dist/prompts/__tests__/environment-setup.test.js +0 -206
  180. package/dist/prompts/__tests__/environment-setup.test.js.map +0 -1
  181. package/dist/prompts/__tests__/hub-integration.test.d.ts +0 -2
  182. package/dist/prompts/__tests__/hub-integration.test.d.ts.map +0 -1
  183. package/dist/prompts/__tests__/hub-integration.test.js +0 -126
  184. package/dist/prompts/__tests__/hub-integration.test.js.map +0 -1
  185. package/dist/prompts/__tests__/prompt-helpers.test.d.ts +0 -2
  186. package/dist/prompts/__tests__/prompt-helpers.test.d.ts.map +0 -1
  187. package/dist/prompts/__tests__/prompt-helpers.test.js +0 -235
  188. package/dist/prompts/__tests__/prompt-helpers.test.js.map +0 -1
  189. package/dist/sembix-cli-1.2.1.tgz +0 -0
  190. package/dist/utils/__tests__/config-file.test.d.ts +0 -2
  191. package/dist/utils/__tests__/config-file.test.d.ts.map +0 -1
  192. package/dist/utils/__tests__/config-file.test.js +0 -218
  193. package/dist/utils/__tests__/config-file.test.js.map +0 -1
  194. package/dist/utils/__tests__/config-loader.test.d.ts +0 -2
  195. package/dist/utils/__tests__/config-loader.test.d.ts.map +0 -1
  196. package/dist/utils/__tests__/config-loader.test.js +0 -325
  197. package/dist/utils/__tests__/config-loader.test.js.map +0 -1
  198. package/dist/utils/__tests__/github.test.d.ts +0 -2
  199. package/dist/utils/__tests__/github.test.d.ts.map +0 -1
  200. package/dist/utils/__tests__/github.test.js +0 -282
  201. package/dist/utils/__tests__/github.test.js.map +0 -1
  202. package/dist/utils/__tests__/ui.test.d.ts +0 -2
  203. package/dist/utils/__tests__/ui.test.d.ts.map +0 -1
  204. package/dist/utils/__tests__/ui.test.js +0 -256
  205. package/dist/utils/__tests__/ui.test.js.map +0 -1
@@ -1,282 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { GitHubClient } from '../github.js';
3
- // Create shared mock instances
4
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
- let mockRepos;
6
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
- let mockActions;
8
- // Mock Octokit
9
- vi.mock('@octokit/rest', () => {
10
- return {
11
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
- Octokit: vi.fn(function (_options) {
13
- mockRepos = {
14
- listForOrg: vi.fn(),
15
- listForAuthenticatedUser: vi.fn(),
16
- get: vi.fn(),
17
- getAllEnvironments: vi.fn(),
18
- createOrUpdateEnvironment: vi.fn(),
19
- getEnvironment: vi.fn(),
20
- };
21
- mockActions = {
22
- createEnvironmentVariable: vi.fn(),
23
- getEnvironmentPublicKey: vi.fn(),
24
- createOrUpdateEnvironmentSecret: vi.fn(),
25
- };
26
- return {
27
- repos: mockRepos,
28
- actions: mockActions,
29
- };
30
- }),
31
- };
32
- });
33
- // Mock libsodium-wrappers
34
- vi.mock('libsodium-wrappers', () => ({
35
- default: {
36
- ready: Promise.resolve(),
37
- from_base64: vi.fn((_key) => new Uint8Array([1, 2, 3])),
38
- from_string: vi.fn((_secret) => new Uint8Array([4, 5, 6])),
39
- crypto_box_seal: vi.fn(() => new Uint8Array([7, 8, 9])),
40
- to_base64: vi.fn(() => 'encrypted-base64'),
41
- base64_variants: {
42
- ORIGINAL: 1,
43
- },
44
- },
45
- }));
46
- // Mock config
47
- vi.mock('../../config.js', () => ({
48
- config: {
49
- githubToken: 'test-token',
50
- },
51
- }));
52
- describe('GitHubClient', () => {
53
- let client;
54
- beforeEach(() => {
55
- vi.clearAllMocks();
56
- client = new GitHubClient('test-token');
57
- });
58
- describe('listRepositories', () => {
59
- it('should list repositories for organization', async () => {
60
- const mockRepoData = [
61
- { owner: { login: 'org' }, name: 'repo1', full_name: 'org/repo1' },
62
- { owner: { login: 'org' }, name: 'repo2', full_name: 'org/repo2' },
63
- ];
64
- mockRepos.listForOrg.mockResolvedValue({ data: mockRepoData });
65
- const result = await client.listRepositories('org');
66
- expect(mockRepos.listForOrg).toHaveBeenCalledWith({
67
- org: 'org',
68
- type: 'all',
69
- per_page: 100,
70
- });
71
- expect(result).toEqual([
72
- { owner: 'org', repo: 'repo1', full_name: 'org/repo1' },
73
- { owner: 'org', repo: 'repo2', full_name: 'org/repo2' },
74
- ]);
75
- });
76
- it('should list repositories for authenticated user', async () => {
77
- const mockRepoData = [
78
- { owner: { login: 'user' }, name: 'repo1', full_name: 'user/repo1' },
79
- ];
80
- mockRepos.listForAuthenticatedUser.mockResolvedValue({ data: mockRepoData });
81
- const result = await client.listRepositories();
82
- expect(mockRepos.listForAuthenticatedUser).toHaveBeenCalledWith({
83
- per_page: 100,
84
- });
85
- expect(result).toEqual([
86
- { owner: 'user', repo: 'repo1', full_name: 'user/repo1' },
87
- ]);
88
- });
89
- it('should throw error on API failure', async () => {
90
- mockRepos.listForOrg.mockRejectedValue(new Error('API error'));
91
- await expect(client.listRepositories('org')).rejects.toThrow('Failed to list repositories');
92
- });
93
- });
94
- describe('getRepository', () => {
95
- it('should get repository information', async () => {
96
- const mockRepo = {
97
- owner: { login: 'owner' },
98
- name: 'repo',
99
- full_name: 'owner/repo',
100
- };
101
- mockRepos.get.mockResolvedValue({ data: mockRepo });
102
- const result = await client.getRepository('owner', 'repo');
103
- expect(mockRepos.get).toHaveBeenCalledWith({
104
- owner: 'owner',
105
- repo: 'repo',
106
- });
107
- expect(result).toEqual({
108
- owner: 'owner',
109
- repo: 'repo',
110
- full_name: 'owner/repo',
111
- });
112
- });
113
- it('should throw error for non-existent repository', async () => {
114
- mockRepos.get.mockRejectedValue(new Error('Not found'));
115
- await expect(client.getRepository('owner', 'repo')).rejects.toThrow('Failed to get repository');
116
- });
117
- });
118
- describe('listEnvironments', () => {
119
- it('should list environments for repository', async () => {
120
- const mockEnvironments = [
121
- { name: 'production', id: 1, html_url: 'https://github.com/owner/repo/settings/environments/production' },
122
- { name: 'staging', id: 2, html_url: 'https://github.com/owner/repo/settings/environments/staging' },
123
- ];
124
- mockRepos.getAllEnvironments.mockResolvedValue({
125
- data: { environments: mockEnvironments },
126
- });
127
- const result = await client.listEnvironments('owner', 'repo');
128
- expect(mockRepos.getAllEnvironments).toHaveBeenCalledWith({
129
- owner: 'owner',
130
- repo: 'repo',
131
- });
132
- expect(result).toEqual([
133
- { name: 'production', id: 1, url: 'https://github.com/owner/repo/settings/environments/production' },
134
- { name: 'staging', id: 2, url: 'https://github.com/owner/repo/settings/environments/staging' },
135
- ]);
136
- });
137
- it('should handle repository with no environments', async () => {
138
- mockRepos.getAllEnvironments.mockResolvedValue({
139
- data: { environments: null },
140
- });
141
- const result = await client.listEnvironments('owner', 'repo');
142
- expect(result).toEqual([]);
143
- });
144
- it('should throw error on API failure', async () => {
145
- mockRepos.getAllEnvironments.mockRejectedValue(new Error('API error'));
146
- await expect(client.listEnvironments('owner', 'repo')).rejects.toThrow('Failed to list environments');
147
- });
148
- });
149
- describe('createEnvironment', () => {
150
- it('should create environment', async () => {
151
- mockRepos.createOrUpdateEnvironment.mockResolvedValue({});
152
- await client.createEnvironment('owner', 'repo', 'production');
153
- expect(mockRepos.createOrUpdateEnvironment).toHaveBeenCalledWith({
154
- owner: 'owner',
155
- repo: 'repo',
156
- environment_name: 'production',
157
- });
158
- });
159
- it('should throw error on failure', async () => {
160
- mockRepos.createOrUpdateEnvironment.mockRejectedValue(new Error('API error'));
161
- await expect(client.createEnvironment('owner', 'repo', 'production')).rejects.toThrow('Failed to create environment');
162
- });
163
- });
164
- describe('environmentExists', () => {
165
- it('should return true if environment exists', async () => {
166
- mockRepos.getEnvironment.mockResolvedValue({});
167
- const result = await client.environmentExists('owner', 'repo', 'production');
168
- expect(result).toBe(true);
169
- expect(mockRepos.getEnvironment).toHaveBeenCalledWith({
170
- owner: 'owner',
171
- repo: 'repo',
172
- environment_name: 'production',
173
- });
174
- });
175
- it('should return false if environment does not exist', async () => {
176
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
177
- const error = new Error('Not found');
178
- error.status = 404;
179
- mockRepos.getEnvironment.mockRejectedValue(error);
180
- const result = await client.environmentExists('owner', 'repo', 'production');
181
- expect(result).toBe(false);
182
- });
183
- it('should throw error for non-404 errors', async () => {
184
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
185
- const error = new Error('API error');
186
- error.status = 500;
187
- mockRepos.getEnvironment.mockRejectedValue(error);
188
- await expect(client.environmentExists('owner', 'repo', 'production')).rejects.toThrow('Failed to check environment');
189
- });
190
- });
191
- describe('createEnvironmentVariables', () => {
192
- it('should create environment variables', async () => {
193
- mockActions.createEnvironmentVariable.mockResolvedValue({});
194
- const variables = {
195
- VAR1: 'value1',
196
- VAR2: 'value2',
197
- };
198
- await client.createEnvironmentVariables('owner', 'repo', 'production', variables);
199
- expect(mockActions.createEnvironmentVariable).toHaveBeenCalledTimes(2);
200
- expect(mockActions.createEnvironmentVariable).toHaveBeenCalledWith({
201
- owner: 'owner',
202
- repo: 'repo',
203
- environment_name: 'production',
204
- name: 'VAR1',
205
- value: 'value1',
206
- });
207
- expect(mockActions.createEnvironmentVariable).toHaveBeenCalledWith({
208
- owner: 'owner',
209
- repo: 'repo',
210
- environment_name: 'production',
211
- name: 'VAR2',
212
- value: 'value2',
213
- });
214
- });
215
- it('should skip empty variable values', async () => {
216
- mockActions.createEnvironmentVariable.mockResolvedValue({});
217
- const variables = {
218
- VAR1: 'value1',
219
- VAR2: '',
220
- VAR3: 'value3',
221
- };
222
- await client.createEnvironmentVariables('owner', 'repo', 'production', variables);
223
- expect(mockActions.createEnvironmentVariable).toHaveBeenCalledTimes(2);
224
- });
225
- it('should throw error on API failure', async () => {
226
- mockActions.createEnvironmentVariable.mockRejectedValue(new Error('API error'));
227
- const variables = { VAR1: 'value1' };
228
- await expect(client.createEnvironmentVariables('owner', 'repo', 'production', variables)).rejects.toThrow('Failed to create environment variables');
229
- });
230
- });
231
- describe('createEnvironmentSecrets', () => {
232
- it('should create encrypted environment secrets', async () => {
233
- mockActions.getEnvironmentPublicKey.mockResolvedValue({
234
- data: {
235
- key: 'public-key-base64',
236
- key_id: 'key-id-123',
237
- },
238
- });
239
- mockActions.createOrUpdateEnvironmentSecret.mockResolvedValue({});
240
- const secrets = {
241
- SECRET1: 'secret-value-1',
242
- SECRET2: 'secret-value-2',
243
- };
244
- await client.createEnvironmentSecrets('owner', 'repo', 'production', secrets);
245
- expect(mockActions.getEnvironmentPublicKey).toHaveBeenCalledWith({
246
- owner: 'owner',
247
- repo: 'repo',
248
- environment_name: 'production',
249
- });
250
- expect(mockActions.createOrUpdateEnvironmentSecret).toHaveBeenCalledTimes(2);
251
- expect(mockActions.createOrUpdateEnvironmentSecret).toHaveBeenCalledWith({
252
- owner: 'owner',
253
- repo: 'repo',
254
- environment_name: 'production',
255
- secret_name: 'SECRET1',
256
- encrypted_value: 'encrypted-base64',
257
- key_id: 'key-id-123',
258
- });
259
- });
260
- it('should skip empty secret values', async () => {
261
- mockActions.getEnvironmentPublicKey.mockResolvedValue({
262
- data: {
263
- key: 'public-key-base64',
264
- key_id: 'key-id-123',
265
- },
266
- });
267
- mockActions.createOrUpdateEnvironmentSecret.mockResolvedValue({});
268
- const secrets = {
269
- SECRET1: 'secret-value',
270
- SECRET2: '',
271
- };
272
- await client.createEnvironmentSecrets('owner', 'repo', 'production', secrets);
273
- expect(mockActions.createOrUpdateEnvironmentSecret).toHaveBeenCalledTimes(1);
274
- });
275
- it('should throw error on API failure', async () => {
276
- mockActions.getEnvironmentPublicKey.mockRejectedValue(new Error('API error'));
277
- const secrets = { SECRET1: 'secret-value' };
278
- await expect(client.createEnvironmentSecrets('owner', 'repo', 'production', secrets)).rejects.toThrow('Failed to create environment secrets');
279
- });
280
- });
281
- });
282
- //# sourceMappingURL=github.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/github.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ui.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/ui.test.ts"],"names":[],"mappings":""}
@@ -1,256 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import * as ui from '../ui.js';
3
- // Mock chalk to return plain text for easier testing
4
- vi.mock('chalk', () => ({
5
- default: {
6
- cyan: {
7
- bold: (text) => text,
8
- underline: (text) => text,
9
- },
10
- white: Object.assign((text) => text, {
11
- bold: (text) => text,
12
- }),
13
- green: (text) => text,
14
- red: (text) => text,
15
- yellow: (text) => text,
16
- blue: (text) => text,
17
- dim: (text) => text,
18
- },
19
- }));
20
- // Mock ora for spinner tests
21
- vi.mock('ora', () => ({
22
- default: vi.fn((options) => ({
23
- start: vi.fn().mockReturnThis(),
24
- stop: vi.fn().mockReturnThis(),
25
- succeed: vi.fn().mockReturnThis(),
26
- fail: vi.fn().mockReturnThis(),
27
- text: options?.text,
28
- color: options?.color,
29
- })),
30
- }));
31
- describe('ui utilities', () => {
32
- let consoleSpy;
33
- beforeEach(() => {
34
- consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
35
- });
36
- afterEach(() => {
37
- consoleSpy.mockRestore();
38
- });
39
- describe('banner', () => {
40
- it('should display CLI banner', () => {
41
- ui.banner();
42
- expect(consoleSpy).toHaveBeenCalled();
43
- const calls = consoleSpy.mock.calls.map((call) => call[0]).join('\n');
44
- expect(calls).toContain('Sembix Studio CLI');
45
- });
46
- it('should print banner with borders', () => {
47
- ui.banner();
48
- const calls = consoleSpy.mock.calls.map((call) => call[0]).join('\n');
49
- expect(calls).toContain('┌');
50
- expect(calls).toContain('└');
51
- expect(calls).toContain('│');
52
- });
53
- });
54
- describe('section', () => {
55
- it('should display section header', () => {
56
- ui.section('Test Section');
57
- expect(consoleSpy).toHaveBeenCalled();
58
- const calls = consoleSpy.mock.calls.map((call) => call[0]).join('');
59
- expect(calls).toContain('Test Section');
60
- expect(calls).toContain('━━━');
61
- });
62
- it('should add blank lines around section', () => {
63
- ui.section('Test');
64
- // Should call console.log at least 3 times (blank line, title, blank line)
65
- expect(consoleSpy).toHaveBeenCalledTimes(3);
66
- });
67
- });
68
- describe('success', () => {
69
- it('should display success message with checkmark', () => {
70
- ui.success('Operation completed');
71
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('✓'));
72
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Operation completed'));
73
- });
74
- });
75
- describe('error', () => {
76
- it('should display error message with X mark', () => {
77
- ui.error('Operation failed');
78
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('✗'));
79
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Operation failed'));
80
- });
81
- });
82
- describe('warning', () => {
83
- it('should display warning message with warning symbol', () => {
84
- ui.warning('Be careful');
85
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('⚠'));
86
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Be careful'));
87
- });
88
- });
89
- describe('info', () => {
90
- it('should display info message with info symbol', () => {
91
- ui.info('For your information');
92
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('ℹ'));
93
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('For your information'));
94
- });
95
- });
96
- describe('spinner', () => {
97
- it('should create spinner with text and color', () => {
98
- const spinner = ui.spinner('Loading...');
99
- expect(spinner.text).toBe('Loading...');
100
- expect(spinner.color).toBe('cyan');
101
- });
102
- it('should return spinner object with start method', () => {
103
- const spinner = ui.spinner('Processing...');
104
- expect(spinner.start).toBeDefined();
105
- expect(typeof spinner.start).toBe('function');
106
- });
107
- });
108
- describe('table', () => {
109
- it('should display key-value pairs as table', () => {
110
- const data = {
111
- Name: 'John Doe',
112
- Email: 'john@example.com',
113
- Role: 'Developer',
114
- };
115
- ui.table(data);
116
- expect(consoleSpy).toHaveBeenCalled();
117
- const output = consoleSpy.mock.calls.map((call) => call[0]).join('\n');
118
- expect(output).toContain('Name');
119
- expect(output).toContain('John Doe');
120
- expect(output).toContain('Email');
121
- expect(output).toContain('john@example.com');
122
- expect(output).toContain('Role');
123
- expect(output).toContain('Developer');
124
- });
125
- it('should align keys with padding', () => {
126
- const data = {
127
- Name: 'John',
128
- LongKeyName: 'Value',
129
- };
130
- ui.table(data);
131
- const output = consoleSpy.mock.calls.map((call) => call[0]).join('\n');
132
- // Both entries should have consistent formatting
133
- expect(output).toContain(':');
134
- });
135
- it('should handle empty object', () => {
136
- ui.table({});
137
- // Should print blank lines but no content
138
- expect(consoleSpy).toHaveBeenCalledTimes(2); // Two blank lines
139
- });
140
- });
141
- describe('separator', () => {
142
- it('should display horizontal line', () => {
143
- ui.separator();
144
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('─'));
145
- });
146
- it('should display line with correct length', () => {
147
- ui.separator();
148
- const line = consoleSpy.mock.calls[0][0];
149
- expect(line).toHaveLength(50);
150
- });
151
- });
152
- describe('link', () => {
153
- it('should format link with URL', () => {
154
- const result = ui.link('https://example.com');
155
- expect(result).toContain('https://example.com');
156
- });
157
- it('should format link with custom label', () => {
158
- const result = ui.link('https://example.com', 'Example Site');
159
- expect(result).toContain('Example Site');
160
- expect(result).toContain('https://example.com');
161
- });
162
- it('should include URL in parentheses when label provided', () => {
163
- const result = ui.link('https://example.com', 'Click here');
164
- expect(result).toContain('(https://example.com)');
165
- });
166
- });
167
- describe('highlight', () => {
168
- it('should return highlighted text', () => {
169
- const result = ui.highlight('Important');
170
- expect(result).toBe('Important');
171
- });
172
- it('should handle empty string', () => {
173
- const result = ui.highlight('');
174
- expect(result).toBe('');
175
- });
176
- });
177
- describe('dim', () => {
178
- it('should return dimmed text', () => {
179
- const result = ui.dim('Secondary text');
180
- expect(result).toBe('Secondary text');
181
- });
182
- it('should handle empty string', () => {
183
- const result = ui.dim('');
184
- expect(result).toBe('');
185
- });
186
- });
187
- describe('code', () => {
188
- it('should format text as code with backticks', () => {
189
- const result = ui.code('npm install');
190
- expect(result).toContain('npm install');
191
- expect(result).toContain('`');
192
- });
193
- it('should wrap text in backticks', () => {
194
- const result = ui.code('test');
195
- expect(result).toMatch(/`.*`/);
196
- });
197
- it('should handle empty string', () => {
198
- const result = ui.code('');
199
- expect(result).toBe('``');
200
- });
201
- });
202
- describe('integration - combined output', () => {
203
- it('should work together for complete UI flow', () => {
204
- ui.banner();
205
- ui.section('Configuration');
206
- ui.info('Setting up environment');
207
- ui.success('Environment created');
208
- ui.table({
209
- Environment: 'production',
210
- Region: 'us-east-1',
211
- });
212
- ui.separator();
213
- expect(consoleSpy).toHaveBeenCalled();
214
- const output = consoleSpy.mock.calls.map((call) => call[0]).join('\n');
215
- expect(output).toContain('Sembix Studio CLI');
216
- expect(output).toContain('Configuration');
217
- expect(output).toContain('Setting up environment');
218
- expect(output).toContain('Environment created');
219
- expect(output).toContain('production');
220
- expect(output).toContain('─');
221
- });
222
- });
223
- describe('message formatting consistency', () => {
224
- it('should prefix all status messages with symbols', () => {
225
- consoleSpy.mockClear();
226
- ui.success('Success message');
227
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringMatching(/^./)); // Starts with symbol
228
- consoleSpy.mockClear();
229
- ui.error('Error message');
230
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringMatching(/^./));
231
- consoleSpy.mockClear();
232
- ui.warning('Warning message');
233
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringMatching(/^./));
234
- consoleSpy.mockClear();
235
- ui.info('Info message');
236
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringMatching(/^./));
237
- });
238
- it('should handle special characters in messages', () => {
239
- const specialMessage = 'Test with "quotes" and \'apostrophes\' & symbols!';
240
- ui.success(specialMessage);
241
- ui.error(specialMessage);
242
- ui.warning(specialMessage);
243
- ui.info(specialMessage);
244
- expect(consoleSpy).toHaveBeenCalledTimes(4);
245
- });
246
- it('should handle multiline content in table', () => {
247
- const data = {
248
- Key1: 'Line 1\nLine 2',
249
- Key2: 'Single line',
250
- };
251
- ui.table(data);
252
- expect(consoleSpy).toHaveBeenCalled();
253
- });
254
- });
255
- });
256
- //# sourceMappingURL=ui.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/ui.test.ts"],"names":[],"mappings":"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"}