Skip to content

Commit a93dfd3

Browse files
Merge pull request #172 from contentstack/development
Use inquirer prompt to select response mode
2 parents 864fd64 + 704d876 commit a93dfd3

4 files changed

Lines changed: 56 additions & 70 deletions

File tree

src/adapters/file-upload.test.ts

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -342,11 +342,14 @@ describe('FileUpload Adapter', () => {
342342

343343
expect(cliux.inquire).toHaveBeenCalledWith(
344344
expect.objectContaining({
345-
type: 'input',
345+
type: 'list',
346346
name: 'responseMode',
347-
message: 'Response Mode (s: streaming, b: buffered)',
347+
message: 'Choose a response mode',
348348
default: 'buffered',
349-
validate: expect.any(Function),
349+
choices: [
350+
{ name: 'Buffered', value: 'buffered' },
351+
{ name: 'Streaming', value: 'streaming' },
352+
],
350353
}),
351354
);
352355
expect(fileUploadInstance.config.isStreamingEnabled).toBe(true);
@@ -484,11 +487,14 @@ describe('FileUpload Adapter', () => {
484487
expect(serverCommandCalls.length).toBe(0);
485488
expect(cliux.inquire).toHaveBeenCalledWith(
486489
expect.objectContaining({
487-
type: 'input',
490+
type: 'list',
488491
name: 'responseMode',
489-
message: 'Response Mode (s: streaming, b: buffered)',
492+
message: 'Choose a response mode',
490493
default: 'buffered',
491-
validate: expect.any(Function),
494+
choices: [
495+
{ name: 'Buffered', value: 'buffered' },
496+
{ name: 'Streaming', value: 'streaming' },
497+
],
492498
}),
493499
);
494500
expect(fileUploadInstance.config.isStreamingEnabled).toBe(true);
@@ -547,15 +553,9 @@ describe('FileUpload Adapter', () => {
547553
});
548554

549555
it.each([
550-
['s', true],
551556
['streaming', true],
552-
['STREAMING', true],
553-
[' Streaming ', true],
554-
['b', false],
555557
['buffered', false],
556-
['BUFFERED', false],
557-
[' Buffered ', false],
558-
])('should map Response Mode input "%s" to isStreamingEnabled %s', async (input, expected) => {
558+
])('should map Response Mode selection "%s" to isStreamingEnabled %s', async (input, expected) => {
559559
(cliux.inquire as jest.Mock).mockResolvedValueOnce('test-project');
560560
(cliux.inquire as jest.Mock).mockResolvedValueOnce('Default');
561561
(cliux.inquire as jest.Mock).mockResolvedValueOnce('npm run build');
@@ -599,7 +599,7 @@ describe('FileUpload Adapter', () => {
599599
handleEnvImportFlowMock.mockRestore();
600600
});
601601

602-
it('Response Mode validate should accept s/b/streaming/buffered and reject anything else', async () => {
602+
it('Response Mode prompt should offer buffered and streaming choices', async () => {
603603
(cliux.inquire as jest.Mock).mockResolvedValueOnce('test-project');
604604
(cliux.inquire as jest.Mock).mockResolvedValueOnce('Default');
605605
(cliux.inquire as jest.Mock).mockResolvedValueOnce('npm run build');
@@ -638,15 +638,12 @@ describe('FileUpload Adapter', () => {
638638
const responseModeCall = (cliux.inquire as jest.Mock).mock.calls.find(
639639
(call) => call[0]?.name === 'responseMode',
640640
);
641-
const { validate } = responseModeCall[0];
642-
643-
expect(validate('s')).toBe(true);
644-
expect(validate('streaming')).toBe(true);
645-
expect(validate('b')).toBe(true);
646-
expect(validate('buffered')).toBe(true);
647-
expect(validate(' STREAMING ')).toBe(true);
648-
expect(validate('')).toBe('Please enter "s"/"streaming" or "b"/"buffered".');
649-
expect(validate('yes')).toBe('Please enter "s"/"streaming" or "b"/"buffered".');
641+
642+
expect(responseModeCall[0].type).toBe('list');
643+
expect(responseModeCall[0].choices).toEqual([
644+
{ name: 'Buffered', value: 'buffered' },
645+
{ name: 'Streaming', value: 'streaming' },
646+
]);
650647

651648
createSignedUploadUrlMock.mockRestore();
652649
archiveMock.mockRestore();

src/adapters/file-upload.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -250,21 +250,17 @@ export default class FileUpload extends BaseClass {
250250
}
251251
}
252252
if (!responseMode) {
253-
const responseModeInput = (await cliux.inquire({
254-
type: 'input',
253+
const selectedResponseMode = (await cliux.inquire({
254+
type: 'list',
255255
name: 'responseMode',
256-
message: 'Response Mode (s: streaming, b: buffered)',
256+
message: 'Choose a response mode',
257257
default: 'buffered',
258-
validate: (input: string) => {
259-
const value = String(input).trim().toLowerCase();
260-
if (['s', 'streaming', 'b', 'buffered'].includes(value)) {
261-
return true;
262-
}
263-
return 'Please enter "s"/"streaming" or "b"/"buffered".';
264-
},
258+
choices: [
259+
{ name: 'Buffered', value: 'buffered' },
260+
{ name: 'Streaming', value: 'streaming' },
261+
],
265262
})) as string;
266-
const normalizedResponseMode = String(responseModeInput ?? '').trim().toLowerCase();
267-
this.config.isStreamingEnabled = normalizedResponseMode === 's' || normalizedResponseMode === 'streaming';
263+
this.config.isStreamingEnabled = selectedResponseMode === 'streaming';
268264
} else {
269265
this.config.isStreamingEnabled = responseMode === 'streaming';
270266
}

src/adapters/github.test.ts

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -597,11 +597,14 @@ describe('GitHub Adapter', () => {
597597

598598
expect(ux.inquire).toHaveBeenCalledWith(
599599
expect.objectContaining({
600-
type: 'input',
600+
type: 'list',
601601
name: 'responseMode',
602-
message: 'Response Mode (s: streaming, b: buffered)',
602+
message: 'Choose a response mode',
603603
default: 'buffered',
604-
validate: expect.any(Function),
604+
choices: [
605+
{ name: 'Buffered', value: 'buffered' },
606+
{ name: 'Streaming', value: 'streaming' },
607+
],
605608
}),
606609
);
607610
expect(githubInstance.config.isStreamingEnabled).toBe(true);
@@ -714,11 +717,14 @@ describe('GitHub Adapter', () => {
714717
expect(serverCommandCalls.length).toBe(0);
715718
expect(ux.inquire).toHaveBeenCalledWith(
716719
expect.objectContaining({
717-
type: 'input',
720+
type: 'list',
718721
name: 'responseMode',
719-
message: 'Response Mode (s: streaming, b: buffered)',
722+
message: 'Choose a response mode',
720723
default: 'buffered',
721-
validate: expect.any(Function),
724+
choices: [
725+
{ name: 'Buffered', value: 'buffered' },
726+
{ name: 'Streaming', value: 'streaming' },
727+
],
722728
}),
723729
);
724730
expect(githubInstance.config.isStreamingEnabled).toBe(false);
@@ -762,15 +768,9 @@ describe('GitHub Adapter', () => {
762768
});
763769

764770
it.each([
765-
['s', true],
766771
['streaming', true],
767-
['STREAMING', true],
768-
[' Streaming ', true],
769-
['b', false],
770772
['buffered', false],
771-
['BUFFERED', false],
772-
[' Buffered ', false],
773-
])('should map Response Mode input "%s" to isStreamingEnabled %s', async (input, expected) => {
773+
])('should map Response Mode selection "%s" to isStreamingEnabled %s', async (input, expected) => {
774774
(ux.inquire as jest.Mock).mockResolvedValueOnce('test-project');
775775
(ux.inquire as jest.Mock).mockResolvedValueOnce('Default');
776776
(ux.inquire as jest.Mock).mockResolvedValueOnce('npm run build');
@@ -802,7 +802,7 @@ describe('GitHub Adapter', () => {
802802
handleEnvImportFlowMock.mockRestore();
803803
});
804804

805-
it('Response Mode validate should accept s/b/streaming/buffered and reject anything else', async () => {
805+
it('Response Mode prompt should offer buffered and streaming choices', async () => {
806806
(ux.inquire as jest.Mock).mockResolvedValueOnce('test-project');
807807
(ux.inquire as jest.Mock).mockResolvedValueOnce('Default');
808808
(ux.inquire as jest.Mock).mockResolvedValueOnce('npm run build');
@@ -832,15 +832,12 @@ describe('GitHub Adapter', () => {
832832
const responseModeCall = (ux.inquire as jest.Mock).mock.calls.find(
833833
(call) => call[0]?.name === 'responseMode',
834834
);
835-
const { validate } = responseModeCall[0];
836-
837-
expect(validate('s')).toBe(true);
838-
expect(validate('streaming')).toBe(true);
839-
expect(validate('b')).toBe(true);
840-
expect(validate('buffered')).toBe(true);
841-
expect(validate(' STREAMING ')).toBe(true);
842-
expect(validate('')).toBe('Please enter "s"/"streaming" or "b"/"buffered".');
843-
expect(validate('yes')).toBe('Please enter "s"/"streaming" or "b"/"buffered".');
835+
836+
expect(responseModeCall[0].type).toBe('list');
837+
expect(responseModeCall[0].choices).toEqual([
838+
{ name: 'Buffered', value: 'buffered' },
839+
{ name: 'Streaming', value: 'streaming' },
840+
]);
844841

845842
handleEnvImportFlowMock.mockRestore();
846843
});

src/adapters/github.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -238,21 +238,17 @@ export default class GitHub extends BaseClass {
238238
}
239239
}
240240
if (!responseMode) {
241-
const responseModeInput = (await ux.inquire({
242-
type: 'input',
241+
const selectedResponseMode = (await ux.inquire({
242+
type: 'list',
243243
name: 'responseMode',
244-
message: 'Response Mode (s: streaming, b: buffered)',
244+
message: 'Choose a response mode',
245245
default: 'buffered',
246-
validate: (input: string) => {
247-
const value = String(input).trim().toLowerCase();
248-
if (['s', 'streaming', 'b', 'buffered'].includes(value)) {
249-
return true;
250-
}
251-
return 'Please enter "s"/"streaming" or "b"/"buffered".';
252-
},
246+
choices: [
247+
{ name: 'Buffered', value: 'buffered' },
248+
{ name: 'Streaming', value: 'streaming' },
249+
],
253250
})) as string;
254-
const normalizedResponseMode = String(responseModeInput ?? '').trim().toLowerCase();
255-
this.config.isStreamingEnabled = normalizedResponseMode === 's' || normalizedResponseMode === 'streaming';
251+
this.config.isStreamingEnabled = selectedResponseMode === 'streaming';
256252
} else {
257253
this.config.isStreamingEnabled = responseMode === 'streaming';
258254
}

0 commit comments

Comments
 (0)