wgc 0.123.0 → 0.124.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.
@@ -0,0 +1,348 @@
1
+ import { Command } from 'commander';
2
+ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
3
+ import { createPromiseClient, createRouterTransport } from '@connectrpc/connect';
4
+ import { EnumStatusCode } from '@wundergraph/cosmo-connect/dist/common/common_pb';
5
+ import { PlatformService } from '@wundergraph/cosmo-connect/dist/platform/v1/platform_connect';
6
+ import inquirer from 'inquirer';
7
+ import DeleteClientsCommand from '../src/commands/clients/commands/delete.js';
8
+ vi.mock('inquirer', () => ({
9
+ default: {
10
+ prompt: vi.fn(),
11
+ },
12
+ }));
13
+ function createMockTransport(previewResponse, deleteResponse, onPreviewDeleteClient, onDeleteClient) {
14
+ return createRouterTransport(({ service }) => {
15
+ service(PlatformService, {
16
+ previewDeleteClient: (req) => {
17
+ onPreviewDeleteClient === null || onPreviewDeleteClient === void 0 ? void 0 : onPreviewDeleteClient(req);
18
+ return previewResponse;
19
+ },
20
+ deleteClient: (req) => {
21
+ onDeleteClient === null || onDeleteClient === void 0 ? void 0 : onDeleteClient(req);
22
+ return deleteResponse;
23
+ },
24
+ });
25
+ });
26
+ }
27
+ async function runDelete({ previewResponse, deleteResponse, args = [], onPreviewDeleteClient, onDeleteClient, }) {
28
+ const client = {
29
+ platform: createPromiseClient(PlatformService, createMockTransport(previewResponse, deleteResponse, onPreviewDeleteClient, onDeleteClient)),
30
+ };
31
+ const program = new Command();
32
+ program.exitOverride();
33
+ program.addCommand(DeleteClientsCommand({ client }));
34
+ await program.parseAsync(['delete', 'web', '--graph-name', 'mygraph', ...args], { from: 'user' });
35
+ }
36
+ function getJsonOutput(logSpy) {
37
+ const call = logSpy.mock.calls.find(([arg]) => {
38
+ try {
39
+ JSON.parse(String(arg));
40
+ return true;
41
+ }
42
+ catch {
43
+ return false;
44
+ }
45
+ });
46
+ if (!call) {
47
+ throw new Error('No JSON output found in console.log calls');
48
+ }
49
+ return JSON.parse(String(call[0]));
50
+ }
51
+ const successPreview = {
52
+ response: { code: EnumStatusCode.OK },
53
+ client: {
54
+ id: 'client-id',
55
+ name: 'web',
56
+ createdAt: '2026-04-23T10:00:00.000Z',
57
+ lastUpdatedAt: '',
58
+ createdBy: 'a@b.com',
59
+ lastUpdatedBy: '',
60
+ },
61
+ };
62
+ const successDelete = {
63
+ response: { code: EnumStatusCode.OK },
64
+ client: successPreview.client,
65
+ deletedOperationsCount: 0,
66
+ };
67
+ describe('stdout', () => {
68
+ let logSpy;
69
+ let stderrSpy;
70
+ let exitSpy;
71
+ const promptMock = vi.mocked(inquirer.prompt);
72
+ beforeEach(() => {
73
+ logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
74
+ stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
75
+ exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => {
76
+ throw new Error('process.exit');
77
+ });
78
+ promptMock.mockReset();
79
+ });
80
+ afterEach(() => {
81
+ process.exitCode = undefined;
82
+ });
83
+ test('uses default namespace', async () => {
84
+ let previewNamespace = '';
85
+ let deleteNamespace = '';
86
+ await runDelete({
87
+ previewResponse: successPreview,
88
+ deleteResponse: successDelete,
89
+ onPreviewDeleteClient: (req) => {
90
+ previewNamespace = req.namespace;
91
+ },
92
+ onDeleteClient: (req) => {
93
+ deleteNamespace = req.namespace;
94
+ },
95
+ });
96
+ expect(previewNamespace).toBe('default');
97
+ expect(deleteNamespace).toBe('default');
98
+ });
99
+ test('deletes client without prompt when no operations exist', async () => {
100
+ let deleteCalled = false;
101
+ await runDelete({
102
+ previewResponse: successPreview,
103
+ deleteResponse: successDelete,
104
+ onDeleteClient: () => {
105
+ deleteCalled = true;
106
+ },
107
+ });
108
+ expect(promptMock).not.toHaveBeenCalled();
109
+ expect(deleteCalled).toBe(true);
110
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('Deleted 0 related persisted operation(s).'));
111
+ });
112
+ test('prompts before deleting client with operations', async () => {
113
+ let deleteCalled = false;
114
+ promptMock.mockResolvedValue({ confirmDeletion: true });
115
+ await runDelete({
116
+ previewResponse: {
117
+ ...successPreview,
118
+ persistedOperationsCount: 2,
119
+ },
120
+ deleteResponse: {
121
+ ...successDelete,
122
+ deletedOperationsCount: 2,
123
+ },
124
+ onDeleteClient: () => {
125
+ deleteCalled = true;
126
+ },
127
+ });
128
+ expect(promptMock).toHaveBeenCalledWith(expect.objectContaining({ name: 'confirmDeletion', type: 'confirm' }));
129
+ expect(deleteCalled).toBe(true);
130
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('Deleted 2 related persisted operation(s).'));
131
+ });
132
+ test('prompts before deleting client with traffic', async () => {
133
+ let deleteCalled = false;
134
+ promptMock.mockResolvedValue({ confirmDeletion: true });
135
+ await runDelete({
136
+ previewResponse: {
137
+ ...successPreview,
138
+ persistedOperationsCount: 0,
139
+ hasTraffic: true,
140
+ },
141
+ deleteResponse: successDelete,
142
+ onDeleteClient: () => {
143
+ deleteCalled = true;
144
+ },
145
+ });
146
+ expect(promptMock).toHaveBeenCalledWith(expect.objectContaining({
147
+ message: expect.stringContaining('One or more operations have traffic.'),
148
+ }));
149
+ expect(deleteCalled).toBe(true);
150
+ });
151
+ test('stops when deletion is not confirmed', async () => {
152
+ let deleteCalled = false;
153
+ promptMock.mockResolvedValue({ confirmDeletion: false });
154
+ await runDelete({
155
+ previewResponse: {
156
+ ...successPreview,
157
+ persistedOperationsCount: 1,
158
+ },
159
+ deleteResponse: successDelete,
160
+ onDeleteClient: () => {
161
+ deleteCalled = true;
162
+ },
163
+ });
164
+ expect(deleteCalled).toBe(false);
165
+ expect(process.exitCode).toBe(1);
166
+ });
167
+ test('force skips confirmation', async () => {
168
+ let deleteCalled = false;
169
+ await runDelete({
170
+ previewResponse: {
171
+ ...successPreview,
172
+ persistedOperationsCount: 1,
173
+ },
174
+ deleteResponse: successDelete,
175
+ args: ['--force'],
176
+ onDeleteClient: () => {
177
+ deleteCalled = true;
178
+ },
179
+ });
180
+ expect(promptMock).not.toHaveBeenCalled();
181
+ expect(deleteCalled).toBe(true);
182
+ });
183
+ test('fails on preview rpc error', async () => {
184
+ await expect(runDelete({
185
+ previewResponse: {
186
+ response: { code: EnumStatusCode.ERR_NOT_FOUND, details: 'not found' },
187
+ persistedOperationsCount: 0,
188
+ },
189
+ deleteResponse: successDelete,
190
+ })).rejects.toThrow();
191
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('not found'));
192
+ expect(stderrSpy).toHaveBeenCalled();
193
+ expect(exitSpy).toHaveBeenCalled();
194
+ });
195
+ test('fails on delete rpc error', async () => {
196
+ await expect(runDelete({
197
+ previewResponse: successPreview,
198
+ deleteResponse: {
199
+ response: { code: EnumStatusCode.ERR, details: 'boom' },
200
+ deletedOperationsCount: 0,
201
+ },
202
+ })).rejects.toThrow();
203
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('boom'));
204
+ expect(stderrSpy).toHaveBeenCalled();
205
+ expect(exitSpy).toHaveBeenCalled();
206
+ });
207
+ });
208
+ describe('json output', () => {
209
+ let logSpy;
210
+ let stderrSpy;
211
+ let exitSpy;
212
+ const promptMock = vi.mocked(inquirer.prompt);
213
+ beforeEach(() => {
214
+ logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
215
+ stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
216
+ exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => {
217
+ throw new Error('process.exit');
218
+ });
219
+ promptMock.mockReset();
220
+ });
221
+ afterEach(() => {
222
+ process.exitCode = undefined;
223
+ });
224
+ test('prints delete result as json', async () => {
225
+ await runDelete({
226
+ previewResponse: successPreview,
227
+ deleteResponse: {
228
+ ...successDelete,
229
+ deletedOperationsCount: 1,
230
+ },
231
+ args: ['--json'],
232
+ });
233
+ const output = getJsonOutput(logSpy);
234
+ expect(output).toEqual({
235
+ status: 'success',
236
+ client: {
237
+ ...successPreview.client,
238
+ persistedOperationsCount: 0,
239
+ hasTraffic: false,
240
+ },
241
+ deletedOperationsCount: 1,
242
+ });
243
+ expect(output).not.toHaveProperty('url');
244
+ expect(promptMock).not.toHaveBeenCalled();
245
+ });
246
+ test('prints json error instead of prompting when operations exist without force', async () => {
247
+ let deleteCalled = false;
248
+ await runDelete({
249
+ previewResponse: {
250
+ ...successPreview,
251
+ persistedOperationsCount: 1,
252
+ },
253
+ deleteResponse: successDelete,
254
+ args: ['--json'],
255
+ onDeleteClient: () => {
256
+ deleteCalled = true;
257
+ },
258
+ });
259
+ expect(getJsonOutput(logSpy)).toEqual({
260
+ status: 'error',
261
+ code: EnumStatusCode.ERR,
262
+ message: 'Could not delete client.',
263
+ details: "Client 'web' has 1 persisted operation(s).",
264
+ url: 'https://cosmo.wundergraph.com/default/graph/mygraph/operations?clientNames=web',
265
+ hasTraffic: false,
266
+ operationsCount: 1,
267
+ });
268
+ expect(deleteCalled).toBe(false);
269
+ expect(promptMock).not.toHaveBeenCalled();
270
+ expect(process.exitCode).toBe(1);
271
+ expect(stderrSpy).not.toHaveBeenCalled();
272
+ expect(exitSpy).not.toHaveBeenCalled();
273
+ });
274
+ test('prints json error instead of prompting when traffic exists without force', async () => {
275
+ let deleteCalled = false;
276
+ await runDelete({
277
+ previewResponse: {
278
+ ...successPreview,
279
+ persistedOperationsCount: 1,
280
+ hasTraffic: true,
281
+ },
282
+ deleteResponse: successDelete,
283
+ args: ['--json'],
284
+ onDeleteClient: () => {
285
+ deleteCalled = true;
286
+ },
287
+ });
288
+ const studioUrl = 'https://cosmo.wundergraph.com/default/graph/mygraph/operations?clientNames=web';
289
+ expect(getJsonOutput(logSpy)).toEqual({
290
+ status: 'error',
291
+ code: EnumStatusCode.ERR,
292
+ message: 'Could not delete client.',
293
+ details: `Client 'web' has 1 persisted operation(s). One or more operations have traffic. See details:\n${studioUrl}\n`,
294
+ url: studioUrl,
295
+ hasTraffic: true,
296
+ operationsCount: 1,
297
+ });
298
+ expect(deleteCalled).toBe(false);
299
+ expect(promptMock).not.toHaveBeenCalled();
300
+ expect(process.exitCode).toBe(1);
301
+ expect(stderrSpy).not.toHaveBeenCalled();
302
+ expect(exitSpy).not.toHaveBeenCalled();
303
+ });
304
+ test('encodes special characters in clientName for studio URL', async () => {
305
+ await runDelete({
306
+ previewResponse: {
307
+ ...successPreview,
308
+ client: { ...successPreview.client, name: 'weird name&with#chars' },
309
+ persistedOperationsCount: 1,
310
+ },
311
+ deleteResponse: successDelete,
312
+ args: ['--json'],
313
+ });
314
+ expect(getJsonOutput(logSpy).url).toBe('https://cosmo.wundergraph.com/default/graph/mygraph/operations?clientNames=weird+name%26with%23chars');
315
+ });
316
+ test('uses organizationSlug from preview response in URL', async () => {
317
+ await runDelete({
318
+ previewResponse: {
319
+ ...successPreview,
320
+ persistedOperationsCount: 1,
321
+ organizationSlug: 'acme',
322
+ },
323
+ deleteResponse: successDelete,
324
+ args: ['--json'],
325
+ });
326
+ expect(getJsonOutput(logSpy).url).toBe('https://cosmo.wundergraph.com/acme/default/graph/mygraph/operations?clientNames=web');
327
+ });
328
+ test('prints preview rpc error as json', async () => {
329
+ await runDelete({
330
+ previewResponse: {
331
+ response: { code: EnumStatusCode.ERR_NOT_FOUND, details: 'not found' },
332
+ persistedOperationsCount: 0,
333
+ },
334
+ deleteResponse: successDelete,
335
+ args: ['--json'],
336
+ });
337
+ expect(getJsonOutput(logSpy)).toEqual({
338
+ status: 'error',
339
+ code: EnumStatusCode.ERR_NOT_FOUND,
340
+ message: 'Could not delete client.',
341
+ details: 'not found',
342
+ });
343
+ expect(process.exitCode).toBe(1);
344
+ expect(stderrSpy).not.toHaveBeenCalled();
345
+ expect(exitSpy).not.toHaveBeenCalled();
346
+ });
347
+ });
348
+ //# sourceMappingURL=clients-delete.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients-delete.test.js","sourceRoot":"","sources":["../../test/clients-delete.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,193 @@
1
+ import { Command } from 'commander';
2
+ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
3
+ import { createPromiseClient, createRouterTransport } from '@connectrpc/connect';
4
+ import { EnumStatusCode } from '@wundergraph/cosmo-connect/dist/common/common_pb';
5
+ import { PlatformService } from '@wundergraph/cosmo-connect/dist/platform/v1/platform_connect';
6
+ import ListClientsCommand from '../src/commands/clients/commands/list.js';
7
+ function createMockTransport(response, onGetClients) {
8
+ return createRouterTransport(({ service }) => {
9
+ service(PlatformService, {
10
+ getClients: (req) => {
11
+ onGetClients === null || onGetClients === void 0 ? void 0 : onGetClients(req);
12
+ return response;
13
+ },
14
+ });
15
+ });
16
+ }
17
+ async function runList(response, args = [], onGetClients) {
18
+ const client = {
19
+ platform: createPromiseClient(PlatformService, createMockTransport(response, onGetClients)),
20
+ };
21
+ const program = new Command();
22
+ program.exitOverride();
23
+ program.addCommand(ListClientsCommand({ client }));
24
+ await program.parseAsync(['list', 'mygraph', ...args], { from: 'user' });
25
+ }
26
+ function getJsonOutput(logSpy) {
27
+ const call = logSpy.mock.calls.find(([arg]) => {
28
+ try {
29
+ JSON.parse(String(arg));
30
+ return true;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ });
36
+ if (!call) {
37
+ throw new Error('No JSON output found in console.log calls');
38
+ }
39
+ return JSON.parse(String(call[0]));
40
+ }
41
+ describe('stdout', () => {
42
+ let logSpy;
43
+ let stderrSpy;
44
+ let exitSpy;
45
+ beforeEach(() => {
46
+ logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
47
+ stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
48
+ exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => {
49
+ throw new Error('process.exit');
50
+ });
51
+ });
52
+ afterEach(() => {
53
+ process.exitCode = undefined;
54
+ });
55
+ test('prints clients table', async () => {
56
+ await runList({
57
+ response: { code: EnumStatusCode.OK },
58
+ clients: [
59
+ {
60
+ id: 'client-id',
61
+ name: 'web',
62
+ createdAt: '2026-04-23T10:00:00.000Z',
63
+ lastUpdatedAt: '2026-04-24T10:00:00.000Z',
64
+ createdBy: 'a@b.com',
65
+ lastUpdatedBy: 'c@d.com',
66
+ persistedOperationsCount: 2,
67
+ hasTraffic: true,
68
+ },
69
+ ],
70
+ });
71
+ expect(logSpy).toHaveBeenCalledTimes(1);
72
+ expect(String(logSpy.mock.calls[0][0])).toContain('NAME');
73
+ expect(String(logSpy.mock.calls[0][0])).toContain('OPERATION_COUNT');
74
+ expect(String(logSpy.mock.calls[0][0])).toContain('HAS_TRAFFIC');
75
+ expect(String(logSpy.mock.calls[0][0])).toContain('CREATED_AT');
76
+ expect(String(logSpy.mock.calls[0][0])).toContain('LAST_PUSH');
77
+ expect(String(logSpy.mock.calls[0][0])).toContain('web');
78
+ expect(String(logSpy.mock.calls[0][0])).toContain('2');
79
+ expect(String(logSpy.mock.calls[0][0])).toContain('✔');
80
+ expect(String(logSpy.mock.calls[0][0])).toContain('2026-04-23T10:00:00.000Z');
81
+ expect(String(logSpy.mock.calls[0][0])).toContain('2026-04-24T10:00:00.000Z');
82
+ expect(String(logSpy.mock.calls[0][0])).not.toContain('client-id');
83
+ });
84
+ test('uses default namespace when not provided', async () => {
85
+ let requestNamespace = '';
86
+ await runList({
87
+ response: { code: EnumStatusCode.OK },
88
+ clients: [],
89
+ }, [], (req) => {
90
+ requestNamespace = req.namespace;
91
+ });
92
+ expect(requestNamespace).toBe('default');
93
+ });
94
+ test('requests traffic data', async () => {
95
+ let includeTraffic = false;
96
+ await runList({
97
+ response: { code: EnumStatusCode.OK },
98
+ clients: [],
99
+ }, [], (req) => {
100
+ includeTraffic = req.includeTraffic;
101
+ });
102
+ expect(includeTraffic).toBe(true);
103
+ });
104
+ test('prints empty message', async () => {
105
+ await runList({
106
+ response: { code: EnumStatusCode.OK },
107
+ clients: [],
108
+ });
109
+ expect(logSpy).toHaveBeenCalledWith('No clients found');
110
+ });
111
+ test('fails on rpc error', async () => {
112
+ await expect(runList({
113
+ response: { code: EnumStatusCode.ERR, details: 'boom' },
114
+ clients: [],
115
+ })).rejects.toThrow();
116
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('boom'));
117
+ expect(stderrSpy).toHaveBeenCalled();
118
+ expect(exitSpy).toHaveBeenCalled();
119
+ });
120
+ });
121
+ describe('json output', () => {
122
+ let logSpy;
123
+ let stderrSpy;
124
+ let exitSpy;
125
+ beforeEach(() => {
126
+ logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
127
+ stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
128
+ exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => {
129
+ throw new Error('process.exit');
130
+ });
131
+ });
132
+ afterEach(() => {
133
+ process.exitCode = undefined;
134
+ });
135
+ test('prints clients as raw json', async () => {
136
+ await runList({
137
+ response: { code: EnumStatusCode.OK },
138
+ clients: [
139
+ {
140
+ id: 'client-id',
141
+ name: 'web',
142
+ createdAt: '2026-04-23T10:00:00.000Z',
143
+ lastUpdatedAt: '',
144
+ createdBy: 'a@b.com',
145
+ lastUpdatedBy: '',
146
+ persistedOperationsCount: 3,
147
+ hasTraffic: false,
148
+ },
149
+ ],
150
+ }, ['--json']);
151
+ expect(getJsonOutput(logSpy)).toEqual({
152
+ status: 'success',
153
+ clients: [
154
+ {
155
+ id: 'client-id',
156
+ name: 'web',
157
+ createdAt: '2026-04-23T10:00:00.000Z',
158
+ lastUpdatedAt: '',
159
+ createdBy: 'a@b.com',
160
+ lastUpdatedBy: '',
161
+ persistedOperationsCount: 3,
162
+ hasTraffic: false,
163
+ },
164
+ ],
165
+ });
166
+ });
167
+ test('prints empty clients json when no clients found', async () => {
168
+ await runList({
169
+ response: { code: EnumStatusCode.OK },
170
+ clients: [],
171
+ }, ['--json']);
172
+ expect(getJsonOutput(logSpy)).toEqual({
173
+ status: 'success',
174
+ clients: [],
175
+ });
176
+ });
177
+ test('prints error json on rpc error', async () => {
178
+ await runList({
179
+ response: { code: EnumStatusCode.ERR, details: 'boom' },
180
+ clients: [],
181
+ }, ['--json']);
182
+ expect(getJsonOutput(logSpy)).toEqual({
183
+ status: 'error',
184
+ code: EnumStatusCode.ERR,
185
+ message: 'Could not fetch clients.',
186
+ details: 'boom',
187
+ });
188
+ expect(process.exitCode).toBe(1);
189
+ expect(stderrSpy).not.toHaveBeenCalled();
190
+ expect(exitSpy).not.toHaveBeenCalled();
191
+ });
192
+ });
193
+ //# sourceMappingURL=clients-list.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients-list.test.js","sourceRoot":"","sources":["../../test/clients-list.test.ts"],"names":[],"mappings":"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"}