1- import { logger , Level } from "@coder/logger"
1+ import { Level , logger } from "@coder/logger"
22import * as assert from "assert"
33import * 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"
56
67describe ( "cli" , ( ) => {
78 beforeEach ( ( ) => {
89 delete process . env . LOG_LEVEL
910 } )
1011
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`.
1214 const defaults = {
13- _ : [ ] ,
15+ "extensions-dir" : path . join ( paths . data , "extensions" ) ,
16+ "user-data-dir" : paths . data ,
1417 }
1518
1619 it ( "should set defaults" , ( ) => {
17- assert . deepEqual ( parse ( [ ] ) , defaults )
20+ assert . deepEqual ( parse ( [ ] ) , { _ : [ ] } )
1821 } )
1922
2023 it ( "should parse all available options" , ( ) => {
@@ -69,7 +72,7 @@ describe("cli", () => {
6972 help : true ,
7073 host : "0.0.0.0" ,
7174 json : true ,
72- log : "trace " ,
75+ log : "error " ,
7376 open : true ,
7477 port : 8081 ,
7578 socket : path . resolve ( "mumble" ) ,
@@ -83,28 +86,30 @@ describe("cli", () => {
8386
8487 it ( "should work with short options" , ( ) => {
8588 assert . deepEqual ( parse ( [ "-vvv" , "-v" ] ) , {
86- ...defaults ,
87- log : "trace" ,
89+ _ : [ ] ,
8890 verbose : true ,
8991 version : true ,
9092 } )
91- assert . equal ( process . env . LOG_LEVEL , "trace" )
92- assert . equal ( logger . level , Level . Trace )
9393 } )
9494
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+
9699 process . env . LOG_LEVEL = "debug"
97- assert . deepEqual ( parse ( [ ] ) , {
100+ assert . deepEqual ( await setDefaults ( args ) , {
98101 ...defaults ,
102+ _ : [ ] ,
99103 log : "debug" ,
100104 verbose : false ,
101105 } )
102106 assert . equal ( process . env . LOG_LEVEL , "debug" )
103107 assert . equal ( logger . level , Level . Debug )
104108
105109 process . env . LOG_LEVEL = "trace"
106- assert . deepEqual ( parse ( [ ] ) , {
110+ assert . deepEqual ( await setDefaults ( args ) , {
107111 ...defaults ,
112+ _ : [ ] ,
108113 log : "trace" ,
109114 verbose : true ,
110115 } )
@@ -113,37 +118,56 @@ describe("cli", () => {
113118 } )
114119
115120 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+
116127 process . env . LOG_LEVEL = "debug"
117- assert . deepEqual ( parse ( [ "--log" , "info" ] ) , {
128+ assert . deepEqual ( await setDefaults ( args ) , {
118129 ...defaults ,
130+ _ : [ ] ,
119131 log : "info" ,
120132 verbose : false ,
121133 } )
122134 assert . equal ( process . env . LOG_LEVEL , "info" )
123135 assert . equal ( logger . level , Level . Info )
124136
125137 process . env . LOG_LEVEL = "trace"
126- assert . deepEqual ( parse ( [ "--log" , "info" ] ) , {
138+ assert . deepEqual ( await setDefaults ( args ) , {
127139 ...defaults ,
140+ _ : [ ] ,
128141 log : "info" ,
129142 verbose : false ,
130143 } )
131144 assert . equal ( process . env . LOG_LEVEL , "info" )
132145 assert . equal ( logger . level , Level . Info )
133146
147+ args = parse ( [ "--log" , "info" , "--verbose" ] )
148+ assert . deepEqual ( args , {
149+ _ : [ ] ,
150+ log : "info" ,
151+ verbose : true ,
152+ } )
153+
134154 process . env . LOG_LEVEL = "warn"
135- assert . deepEqual ( parse ( [ "--log" , "info" , "--verbose" ] ) , {
155+ assert . deepEqual ( await setDefaults ( args ) , {
136156 ...defaults ,
157+ _ : [ ] ,
137158 log : "trace" ,
138159 verbose : true ,
139160 } )
140161 assert . equal ( process . env . LOG_LEVEL , "trace" )
141162 assert . equal ( logger . level , Level . Trace )
142163 } )
143164
144- it ( "should ignore invalid log level env var" , ( ) => {
165+ it ( "should ignore invalid log level env var" , async ( ) => {
145166 process . env . LOG_LEVEL = "bogus"
146- assert . deepEqual ( parse ( [ ] ) , defaults )
167+ assert . deepEqual ( await setDefaults ( parse ( [ ] ) ) , {
168+ _ : [ ] ,
169+ ...defaults ,
170+ } )
147171 } )
148172
149173 it ( "should error if value isn't provided" , ( ) => {
@@ -166,7 +190,7 @@ describe("cli", () => {
166190
167191 it ( "should not error if the value is optional" , ( ) => {
168192 assert . deepEqual ( parse ( [ "--cert" ] ) , {
169- ... defaults ,
193+ _ : [ ] ,
170194 cert : {
171195 value : undefined ,
172196 } ,
@@ -177,27 +201,26 @@ describe("cli", () => {
177201 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 / )
178202 // If you actually had a path like this you would do this instead:
179203 assert . deepEqual ( parse ( [ "--socket" , "./--socket-path-value" ] ) , {
180- ... defaults ,
204+ _ : [ ] ,
181205 socket : path . resolve ( "--socket-path-value" ) ,
182206 } )
183207 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 / )
184208 } )
185209
186210 it ( "should allow positional arguments before options" , ( ) => {
187211 assert . deepEqual ( parse ( [ "foo" , "test" , "--auth" , "none" ] ) , {
188- ...defaults ,
189212 _ : [ "foo" , "test" ] ,
190213 auth : "none" ,
191214 } )
192215 } )
193216
194217 it ( "should support repeatable flags" , ( ) => {
195218 assert . deepEqual ( parse ( [ "--proxy-domain" , "*.coder.com" ] ) , {
196- ... defaults ,
219+ _ : [ ] ,
197220 "proxy-domain" : [ "*.coder.com" ] ,
198221 } )
199222 assert . deepEqual ( parse ( [ "--proxy-domain" , "*.coder.com" , "--proxy-domain" , "test.com" ] ) , {
200- ... defaults ,
223+ _ : [ ] ,
201224 "proxy-domain" : [ "*.coder.com" , "test.com" ] ,
202225 } )
203226 } )
0 commit comments