@@ -2,7 +2,15 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
2
import inquirer from 'inquirer' ;
3
3
import { askForCustomPort , validatePort } from './askForCustomPort' ;
4
4
5
- vi . mock ( 'inquirer' ) ;
5
+ vi . mock ( 'inquirer' , async ( ) => {
6
+ const actual = await vi . importActual ( 'inquirer' ) ;
7
+ return {
8
+ default : {
9
+ ...actual ,
10
+ prompt : vi . fn ( ) ,
11
+ } ,
12
+ } ;
13
+ } ) ;
6
14
7
15
describe ( 'askForCustomPort' , ( ) => {
8
16
beforeEach ( ( ) => {
@@ -11,18 +19,20 @@ describe('askForCustomPort', () => {
11
19
12
20
describe ( 'basic port validation' , ( ) => {
13
21
it ( 'should return default port if user provides no input' , async ( ) => {
14
- vi . spyOn ( inquirer , 'prompt' ) . mockResolvedValueOnce ( {
15
- customPort : '4321' ,
16
- } ) ;
22
+ vi . spyOn ( inquirer , 'prompt' ) . mockResolvedValueOnce ( [
23
+ { customPort : '4321' } ,
24
+ ] ) ;
17
25
18
26
const result = await askForCustomPort ( ) ;
19
27
expect ( result ) . toBe ( 4321 ) ;
20
28
} ) ;
21
29
22
30
it ( 'should return user-provided port' , async ( ) => {
23
- vi . spyOn ( inquirer , 'prompt' ) . mockResolvedValueOnce ( {
24
- customPort : '8080' ,
25
- } ) ;
31
+ vi . spyOn ( inquirer , 'prompt' ) . mockResolvedValueOnce ( [
32
+ {
33
+ customPort : '8080' ,
34
+ } ,
35
+ ] ) ;
26
36
27
37
const result = await askForCustomPort ( ) ;
28
38
expect ( result ) . toBe ( 8080 ) ;
@@ -44,21 +54,21 @@ describe('askForCustomPort', () => {
44
54
describe ( 'retry mechanism' , ( ) => {
45
55
it ( 'should handle invalid port input and prompt again' , async ( ) => {
46
56
vi . spyOn ( inquirer , 'prompt' )
47
- . mockResolvedValueOnce ( { customPort : 'abcd' } )
48
- . mockResolvedValueOnce ( { customPort : '8080' } ) ;
57
+ . mockResolvedValueOnce ( [ { customPort : 'abcd' } ] )
58
+ . mockResolvedValueOnce ( [ { customPort : '8080' } ] ) ;
49
59
50
60
const result = await askForCustomPort ( ) ;
51
61
expect ( result ) . toBe ( 8080 ) ;
52
62
} ) ;
53
63
54
64
it ( 'should return default port after maximum retry attempts' , async ( ) => {
55
65
vi . spyOn ( inquirer , 'prompt' )
56
- . mockResolvedValueOnce ( { customPort : 'invalid-port-attempt1' } )
57
- . mockResolvedValueOnce ( { customPort : 'invalid-port-attempt2' } )
58
- . mockResolvedValueOnce ( { customPort : 'invalid-port-attempt3' } )
59
- . mockResolvedValueOnce ( { customPort : 'invalid-port-attempt4' } )
60
- . mockResolvedValueOnce ( { customPort : 'invalid-port-attempt5' } )
61
- . mockResolvedValueOnce ( { customPort : 'invalid-port-attempt6' } ) ;
66
+ . mockResolvedValueOnce ( [ { customPort : 'invalid-port-attempt1' } ] )
67
+ . mockResolvedValueOnce ( [ { customPort : 'invalid-port-attempt2' } ] )
68
+ . mockResolvedValueOnce ( [ { customPort : 'invalid-port-attempt3' } ] )
69
+ . mockResolvedValueOnce ( [ { customPort : 'invalid-port-attempt4' } ] )
70
+ . mockResolvedValueOnce ( [ { customPort : 'invalid-port-attempt5' } ] )
71
+ . mockResolvedValueOnce ( [ { customPort : 'invalid-port-attempt6' } ] ) ;
62
72
63
73
const result = await askForCustomPort ( ) ;
64
74
expect ( result ) . toBe ( 4321 ) ;
@@ -68,36 +78,36 @@ describe('askForCustomPort', () => {
68
78
describe ( 'reserved ports' , ( ) => {
69
79
it ( 'should return user-provided port after confirming reserved port' , async ( ) => {
70
80
vi . spyOn ( inquirer , 'prompt' )
71
- . mockResolvedValueOnce ( { customPort : '80' } )
72
- . mockResolvedValueOnce ( { confirmPort : true } ) ;
81
+ . mockResolvedValueOnce ( [ { customPort : '80' } ] )
82
+ . mockResolvedValueOnce ( [ { confirmPort : true } ] ) ;
73
83
74
84
const result = await askForCustomPort ( ) ;
75
85
expect ( result ) . toBe ( 80 ) ;
76
86
} ) ;
77
87
78
88
it ( 'should re-prompt user for port if reserved port confirmation is denied' , async ( ) => {
79
89
vi . spyOn ( inquirer , 'prompt' )
80
- . mockResolvedValueOnce ( { customPort : '80' } )
81
- . mockResolvedValueOnce ( { confirmPort : false } )
82
- . mockResolvedValueOnce ( { customPort : '8080' } ) ;
90
+ . mockResolvedValueOnce ( [ { customPort : '80' } ] )
91
+ . mockResolvedValueOnce ( [ { confirmPort : false } ] )
92
+ . mockResolvedValueOnce ( [ { customPort : '8080' } ] ) ;
83
93
84
94
const result = await askForCustomPort ( ) ;
85
95
expect ( result ) . toBe ( 8080 ) ;
86
96
} ) ;
87
97
88
98
it ( 'should return default port if reserved port confirmation is denied after maximum retry attempts' , async ( ) => {
89
99
vi . spyOn ( inquirer , 'prompt' )
90
- . mockResolvedValueOnce ( { customPort : '80' } )
91
- . mockResolvedValueOnce ( { confirmPort : false } )
92
- . mockResolvedValueOnce ( { customPort : '80' } )
93
- . mockResolvedValueOnce ( { confirmPort : false } )
94
- . mockResolvedValueOnce ( { customPort : '80' } )
95
- . mockResolvedValueOnce ( { confirmPort : false } )
96
- . mockResolvedValueOnce ( { customPort : '80' } )
97
- . mockResolvedValueOnce ( { confirmPort : false } )
98
- . mockResolvedValueOnce ( { customPort : '80' } )
99
- . mockResolvedValueOnce ( { confirmPort : false } )
100
- . mockResolvedValueOnce ( { customPort : '80' } ) ;
100
+ . mockResolvedValueOnce ( [ { customPort : '80' } ] )
101
+ . mockResolvedValueOnce ( [ { confirmPort : false } ] )
102
+ . mockResolvedValueOnce ( [ { customPort : '80' } ] )
103
+ . mockResolvedValueOnce ( [ { confirmPort : false } ] )
104
+ . mockResolvedValueOnce ( [ { customPort : '80' } ] )
105
+ . mockResolvedValueOnce ( [ { confirmPort : false } ] )
106
+ . mockResolvedValueOnce ( [ { customPort : '80' } ] )
107
+ . mockResolvedValueOnce ( [ { confirmPort : false } ] )
108
+ . mockResolvedValueOnce ( [ { customPort : '80' } ] )
109
+ . mockResolvedValueOnce ( [ { confirmPort : false } ] )
110
+ . mockResolvedValueOnce ( [ { customPort : '80' } ] ) ;
101
111
102
112
const result = await askForCustomPort ( ) ;
103
113
expect ( result ) . toBe ( 4321 ) ;
0 commit comments