1
- import { logger , Level } from "@coder/logger"
1
+ import { Level , logger } from "@coder/logger"
2
2
import * as assert from "assert"
3
3
import * as path from "path"
4
- import { parse } from "../src/node/cli"
4
+ import { parse , setDefaults } from "../src/node/cli"
5
+ import { paths } from "../src/node/util"
5
6
6
7
describe ( "cli" , ( ) => {
7
8
beforeEach ( ( ) => {
8
9
delete process . env . LOG_LEVEL
9
10
} )
10
11
11
- // The parser will always fill these out.
12
+ // The parser should not set any defaults so the caller can determine what
13
+ // values the user actually set. These are set after calling `setDefaults`.
12
14
const defaults = {
13
- _ : [ ] ,
15
+ "extensions-dir" : path . join ( paths . data , "extensions" ) ,
16
+ "user-data-dir" : paths . data ,
14
17
}
15
18
16
19
it ( "should set defaults" , ( ) => {
17
- assert . deepEqual ( parse ( [ ] ) , defaults )
20
+ assert . deepEqual ( parse ( [ ] ) , { _ : [ ] } )
18
21
} )
19
22
20
23
it ( "should parse all available options" , ( ) => {
@@ -69,7 +72,7 @@ describe("cli", () => {
69
72
help : true ,
70
73
host : "0.0.0.0" ,
71
74
json : true ,
72
- log : "trace " ,
75
+ log : "error " ,
73
76
open : true ,
74
77
port : 8081 ,
75
78
socket : path . resolve ( "mumble" ) ,
@@ -83,28 +86,30 @@ describe("cli", () => {
83
86
84
87
it ( "should work with short options" , ( ) => {
85
88
assert . deepEqual ( parse ( [ "-vvv" , "-v" ] ) , {
86
- ...defaults ,
87
- log : "trace" ,
89
+ _ : [ ] ,
88
90
verbose : true ,
89
91
version : true ,
90
92
} )
91
- assert . equal ( process . env . LOG_LEVEL , "trace" )
92
- assert . equal ( logger . level , Level . Trace )
93
93
} )
94
94
95
- it ( "should use log level env var" , ( ) => {
95
+ it ( "should use log level env var" , async ( ) => {
96
+ const args = parse ( [ ] )
97
+ assert . deepEqual ( args , { _ : [ ] } )
98
+
96
99
process . env . LOG_LEVEL = "debug"
97
- assert . deepEqual ( parse ( [ ] ) , {
100
+ assert . deepEqual ( await setDefaults ( args ) , {
98
101
...defaults ,
102
+ _ : [ ] ,
99
103
log : "debug" ,
100
104
verbose : false ,
101
105
} )
102
106
assert . equal ( process . env . LOG_LEVEL , "debug" )
103
107
assert . equal ( logger . level , Level . Debug )
104
108
105
109
process . env . LOG_LEVEL = "trace"
106
- assert . deepEqual ( parse ( [ ] ) , {
110
+ assert . deepEqual ( await setDefaults ( args ) , {
107
111
...defaults ,
112
+ _ : [ ] ,
108
113
log : "trace" ,
109
114
verbose : true ,
110
115
} )
@@ -113,37 +118,56 @@ describe("cli", () => {
113
118
} )
114
119
115
120
it ( "should prefer --log to env var and --verbose to --log" , async ( ) => {
121
+ let args = parse ( [ "--log" , "info" ] )
122
+ assert . deepEqual ( args , {
123
+ _ : [ ] ,
124
+ log : "info" ,
125
+ } )
126
+
116
127
process . env . LOG_LEVEL = "debug"
117
- assert . deepEqual ( parse ( [ "--log" , "info" ] ) , {
128
+ assert . deepEqual ( await setDefaults ( args ) , {
118
129
...defaults ,
130
+ _ : [ ] ,
119
131
log : "info" ,
120
132
verbose : false ,
121
133
} )
122
134
assert . equal ( process . env . LOG_LEVEL , "info" )
123
135
assert . equal ( logger . level , Level . Info )
124
136
125
137
process . env . LOG_LEVEL = "trace"
126
- assert . deepEqual ( parse ( [ "--log" , "info" ] ) , {
138
+ assert . deepEqual ( await setDefaults ( args ) , {
127
139
...defaults ,
140
+ _ : [ ] ,
128
141
log : "info" ,
129
142
verbose : false ,
130
143
} )
131
144
assert . equal ( process . env . LOG_LEVEL , "info" )
132
145
assert . equal ( logger . level , Level . Info )
133
146
147
+ args = parse ( [ "--log" , "info" , "--verbose" ] )
148
+ assert . deepEqual ( args , {
149
+ _ : [ ] ,
150
+ log : "info" ,
151
+ verbose : true ,
152
+ } )
153
+
134
154
process . env . LOG_LEVEL = "warn"
135
- assert . deepEqual ( parse ( [ "--log" , "info" , "--verbose" ] ) , {
155
+ assert . deepEqual ( await setDefaults ( args ) , {
136
156
...defaults ,
157
+ _ : [ ] ,
137
158
log : "trace" ,
138
159
verbose : true ,
139
160
} )
140
161
assert . equal ( process . env . LOG_LEVEL , "trace" )
141
162
assert . equal ( logger . level , Level . Trace )
142
163
} )
143
164
144
- it ( "should ignore invalid log level env var" , ( ) => {
165
+ it ( "should ignore invalid log level env var" , async ( ) => {
145
166
process . env . LOG_LEVEL = "bogus"
146
- assert . deepEqual ( parse ( [ ] ) , defaults )
167
+ assert . deepEqual ( await setDefaults ( parse ( [ ] ) ) , {
168
+ _ : [ ] ,
169
+ ...defaults ,
170
+ } )
147
171
} )
148
172
149
173
it ( "should error if value isn't provided" , ( ) => {
@@ -166,7 +190,7 @@ describe("cli", () => {
166
190
167
191
it ( "should not error if the value is optional" , ( ) => {
168
192
assert . deepEqual ( parse ( [ "--cert" ] ) , {
169
- ... defaults ,
193
+ _ : [ ] ,
170
194
cert : {
171
195
value : undefined ,
172
196
} ,
@@ -177,27 +201,26 @@ describe("cli", () => {
177
201
assert . throws ( ( ) => parse ( [ "--socket" , "--socket-path-value" ] ) , / - - s o c k e t r e q u i r e s a v a l u e / )
178
202
// If you actually had a path like this you would do this instead:
179
203
assert . deepEqual ( parse ( [ "--socket" , "./--socket-path-value" ] ) , {
180
- ... defaults ,
204
+ _ : [ ] ,
181
205
socket : path . resolve ( "--socket-path-value" ) ,
182
206
} )
183
207
assert . throws ( ( ) => parse ( [ "--cert" , "--socket-path-value" ] ) , / U n k n o w n o p t i o n - - s o c k e t - p a t h - v a l u e / )
184
208
} )
185
209
186
210
it ( "should allow positional arguments before options" , ( ) => {
187
211
assert . deepEqual ( parse ( [ "foo" , "test" , "--auth" , "none" ] ) , {
188
- ...defaults ,
189
212
_ : [ "foo" , "test" ] ,
190
213
auth : "none" ,
191
214
} )
192
215
} )
193
216
194
217
it ( "should support repeatable flags" , ( ) => {
195
218
assert . deepEqual ( parse ( [ "--proxy-domain" , "*.coder.com" ] ) , {
196
- ... defaults ,
219
+ _ : [ ] ,
197
220
"proxy-domain" : [ "*.coder.com" ] ,
198
221
} )
199
222
assert . deepEqual ( parse ( [ "--proxy-domain" , "*.coder.com" , "--proxy-domain" , "test.com" ] ) , {
200
- ... defaults ,
223
+ _ : [ ] ,
201
224
"proxy-domain" : [ "*.coder.com" , "test.com" ] ,
202
225
} )
203
226
} )
0 commit comments