1
+ import { logger , Level } from "@coder/logger"
1
2
import * as assert from "assert"
2
3
import * as path from "path"
3
4
import { parse } from "../src/node/cli"
@@ -8,12 +9,15 @@ describe("cli", () => {
8
9
delete process . env . LOG_LEVEL
9
10
} )
10
11
12
+ // The parser will always fill these out.
13
+ const defaults = {
14
+ _ : [ ] ,
15
+ "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
16
+ "user-data-dir" : xdgLocalDir ,
17
+ }
18
+
11
19
it ( "should set defaults" , ( ) => {
12
- assert . deepEqual ( parse ( [ ] ) , {
13
- _ : [ ] ,
14
- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
15
- "user-data-dir" : xdgLocalDir ,
16
- } )
20
+ assert . deepEqual ( parse ( [ ] ) , defaults )
17
21
} )
18
22
19
23
it ( "should parse all available options" , ( ) => {
@@ -82,36 +86,64 @@ describe("cli", () => {
82
86
83
87
it ( "should work with short options" , ( ) => {
84
88
assert . deepEqual ( parse ( [ "-vvv" , "-v" ] ) , {
85
- _ : [ ] ,
86
- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
87
- "user-data-dir" : xdgLocalDir ,
89
+ ...defaults ,
88
90
log : "trace" ,
89
91
verbose : true ,
90
92
version : true ,
91
93
} )
92
94
assert . equal ( process . env . LOG_LEVEL , "trace" )
95
+ assert . equal ( logger . level , Level . Trace )
93
96
} )
94
97
95
98
it ( "should use log level env var" , ( ) => {
96
99
process . env . LOG_LEVEL = "debug"
97
100
assert . deepEqual ( parse ( [ ] ) , {
98
- _ : [ ] ,
99
- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
100
- "user-data-dir" : xdgLocalDir ,
101
+ ...defaults ,
101
102
log : "debug" ,
102
103
} )
103
104
assert . equal ( process . env . LOG_LEVEL , "debug" )
105
+ assert . equal ( logger . level , Level . Debug )
106
+
107
+ process . env . LOG_LEVEL = "trace"
108
+ assert . deepEqual ( parse ( [ ] ) , {
109
+ ...defaults ,
110
+ log : "trace" ,
111
+ verbose : true ,
112
+ } )
113
+ assert . equal ( process . env . LOG_LEVEL , "trace" )
114
+ assert . equal ( logger . level , Level . Trace )
104
115
} )
105
116
106
- it ( "should prefer --log to env var" , ( ) => {
117
+ it ( "should prefer --log to env var and --verbose to --log " , ( ) => {
107
118
process . env . LOG_LEVEL = "debug"
108
119
assert . deepEqual ( parse ( [ "--log" , "info" ] ) , {
109
- _ : [ ] ,
110
- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
111
- "user-data-dir" : xdgLocalDir ,
120
+ ...defaults ,
112
121
log : "info" ,
113
122
} )
114
123
assert . equal ( process . env . LOG_LEVEL , "info" )
124
+ assert . equal ( logger . level , Level . Info )
125
+
126
+ process . env . LOG_LEVEL = "trace"
127
+ assert . deepEqual ( parse ( [ "--log" , "info" ] ) , {
128
+ ...defaults ,
129
+ log : "info" ,
130
+ } )
131
+ assert . equal ( process . env . LOG_LEVEL , "info" )
132
+ assert . equal ( logger . level , Level . Info )
133
+
134
+ process . env . LOG_LEVEL = "warn"
135
+ assert . deepEqual ( parse ( [ "--log" , "info" , "--verbose" ] ) , {
136
+ ...defaults ,
137
+ log : "trace" ,
138
+ verbose : true ,
139
+ } )
140
+ assert . equal ( process . env . LOG_LEVEL , "trace" )
141
+ assert . equal ( logger . level , Level . Trace )
142
+ } )
143
+
144
+ it ( "should ignore invalid log level env var" , ( ) => {
145
+ process . env . LOG_LEVEL = "bogus"
146
+ assert . deepEqual ( parse ( [ ] ) , defaults )
115
147
} )
116
148
117
149
it ( "should error if value isn't provided" , ( ) => {
@@ -134,9 +166,7 @@ describe("cli", () => {
134
166
135
167
it ( "should not error if the value is optional" , ( ) => {
136
168
assert . deepEqual ( parse ( [ "--cert" ] ) , {
137
- _ : [ ] ,
138
- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
139
- "user-data-dir" : xdgLocalDir ,
169
+ ...defaults ,
140
170
cert : {
141
171
value : undefined ,
142
172
} ,
@@ -147,34 +177,27 @@ describe("cli", () => {
147
177
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 / )
148
178
// If you actually had a path like this you would do this instead:
149
179
assert . deepEqual ( parse ( [ "--socket" , "./--socket-path-value" ] ) , {
150
- _ : [ ] ,
151
- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
152
- "user-data-dir" : xdgLocalDir ,
180
+ ...defaults ,
153
181
socket : path . resolve ( "--socket-path-value" ) ,
154
182
} )
155
183
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 / )
156
184
} )
157
185
158
186
it ( "should allow positional arguments before options" , ( ) => {
159
187
assert . deepEqual ( parse ( [ "foo" , "test" , "--auth" , "none" ] ) , {
188
+ ...defaults ,
160
189
_ : [ "foo" , "test" ] ,
161
- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
162
- "user-data-dir" : xdgLocalDir ,
163
190
auth : "none" ,
164
191
} )
165
192
} )
166
193
167
194
it ( "should support repeatable flags" , ( ) => {
168
195
assert . deepEqual ( parse ( [ "--proxy-domain" , "*.coder.com" ] ) , {
169
- _ : [ ] ,
170
- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
171
- "user-data-dir" : xdgLocalDir ,
196
+ ...defaults ,
172
197
"proxy-domain" : [ "*.coder.com" ] ,
173
198
} )
174
199
assert . deepEqual ( parse ( [ "--proxy-domain" , "*.coder.com" , "--proxy-domain" , "test.com" ] ) , {
175
- _ : [ ] ,
176
- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
177
- "user-data-dir" : xdgLocalDir ,
200
+ ...defaults ,
178
201
"proxy-domain" : [ "*.coder.com" , "test.com" ] ,
179
202
} )
180
203
} )
0 commit comments