1+ import { logger , Level } from "@coder/logger"
12import * as assert from "assert"
23import * as path from "path"
34import { parse } from "../src/node/cli"
@@ -8,12 +9,15 @@ describe("cli", () => {
89 delete process . env . LOG_LEVEL
910 } )
1011
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+
1119 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 )
1721 } )
1822
1923 it ( "should parse all available options" , ( ) => {
@@ -82,36 +86,64 @@ describe("cli", () => {
8286
8387 it ( "should work with short options" , ( ) => {
8488 assert . deepEqual ( parse ( [ "-vvv" , "-v" ] ) , {
85- _ : [ ] ,
86- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
87- "user-data-dir" : xdgLocalDir ,
89+ ...defaults ,
8890 log : "trace" ,
8991 verbose : true ,
9092 version : true ,
9193 } )
9294 assert . equal ( process . env . LOG_LEVEL , "trace" )
95+ assert . equal ( logger . level , Level . Trace )
9396 } )
9497
9598 it ( "should use log level env var" , ( ) => {
9699 process . env . LOG_LEVEL = "debug"
97100 assert . deepEqual ( parse ( [ ] ) , {
98- _ : [ ] ,
99- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
100- "user-data-dir" : xdgLocalDir ,
101+ ...defaults ,
101102 log : "debug" ,
102103 } )
103104 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 )
104115 } )
105116
106- it ( "should prefer --log to env var" , ( ) => {
117+ it ( "should prefer --log to env var and --verbose to --log " , ( ) => {
107118 process . env . LOG_LEVEL = "debug"
108119 assert . deepEqual ( parse ( [ "--log" , "info" ] ) , {
109- _ : [ ] ,
110- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
111- "user-data-dir" : xdgLocalDir ,
120+ ...defaults ,
112121 log : "info" ,
113122 } )
114123 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 )
115147 } )
116148
117149 it ( "should error if value isn't provided" , ( ) => {
@@ -134,9 +166,7 @@ describe("cli", () => {
134166
135167 it ( "should not error if the value is optional" , ( ) => {
136168 assert . deepEqual ( parse ( [ "--cert" ] ) , {
137- _ : [ ] ,
138- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
139- "user-data-dir" : xdgLocalDir ,
169+ ...defaults ,
140170 cert : {
141171 value : undefined ,
142172 } ,
@@ -147,34 +177,27 @@ describe("cli", () => {
147177 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 / )
148178 // If you actually had a path like this you would do this instead:
149179 assert . deepEqual ( parse ( [ "--socket" , "./--socket-path-value" ] ) , {
150- _ : [ ] ,
151- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
152- "user-data-dir" : xdgLocalDir ,
180+ ...defaults ,
153181 socket : path . resolve ( "--socket-path-value" ) ,
154182 } )
155183 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 / )
156184 } )
157185
158186 it ( "should allow positional arguments before options" , ( ) => {
159187 assert . deepEqual ( parse ( [ "foo" , "test" , "--auth" , "none" ] ) , {
188+ ...defaults ,
160189 _ : [ "foo" , "test" ] ,
161- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
162- "user-data-dir" : xdgLocalDir ,
163190 auth : "none" ,
164191 } )
165192 } )
166193
167194 it ( "should support repeatable flags" , ( ) => {
168195 assert . deepEqual ( parse ( [ "--proxy-domain" , "*.coder.com" ] ) , {
169- _ : [ ] ,
170- "extensions-dir" : path . join ( xdgLocalDir , "extensions" ) ,
171- "user-data-dir" : xdgLocalDir ,
196+ ...defaults ,
172197 "proxy-domain" : [ "*.coder.com" ] ,
173198 } )
174199 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 ,
178201 "proxy-domain" : [ "*.coder.com" , "test.com" ] ,
179202 } )
180203 } )
0 commit comments