@@ -127,3 +127,97 @@ impl TracingOptions {
127127 self . tracing_level
128128 }
129129}
130+
131+ #[ cfg( test) ]
132+ mod tests {
133+ use std:: path:: PathBuf ;
134+
135+ use clap:: error:: ErrorKind ;
136+ use clap:: Parser ;
137+ use tracing:: Level ;
138+
139+ use super :: Cli ;
140+ use crate :: cli:: Command ;
141+ const APP : & str = "numtracker" ;
142+
143+ #[ test]
144+ fn serve_defaults ( ) {
145+ let cli = Cli :: try_parse_from ( [ APP , "serve" ] ) . unwrap ( ) ;
146+ assert_eq ! ( cli. db, PathBuf :: from( "numtracker.db" ) ) ;
147+ assert_eq ! ( cli. verbose. log_level( ) , Some ( Level :: ERROR ) ) ;
148+
149+ assert_eq ! ( cli. tracing( ) . tracing_url( ) , None ) ;
150+ assert_eq ! ( cli. tracing( ) . level( ) , Level :: INFO ) ;
151+
152+ let Command :: Serve ( cmd) = cli. command else {
153+ panic ! ( "Unexpected subcommand: {:?}" , cli. command) ;
154+ } ;
155+ assert_eq ! ( cmd. addr( ) , ( "0.0.0.0" . parse( ) . unwrap( ) , 8000 ) ) ;
156+ assert_eq ! ( cmd. root_directory( ) , None ) ;
157+ }
158+
159+ #[ test]
160+ fn global_verbose ( ) {
161+ let cli = Cli :: try_parse_from ( [ APP , "-vv" , "serve" ] ) . unwrap ( ) ;
162+ assert_eq ! ( cli. log_level( ) , Some ( Level :: DEBUG ) ) ;
163+
164+ let cli = Cli :: try_parse_from ( [ APP , "serve" , "-v" ] ) . unwrap ( ) ;
165+ assert_eq ! ( cli. log_level( ) , Some ( Level :: INFO ) ) ;
166+
167+ let cli = Cli :: try_parse_from ( [ APP , "schema" , "-q" ] ) . unwrap ( ) ;
168+ assert_eq ! ( cli. log_level( ) , None ) ;
169+ }
170+
171+ #[ test]
172+ fn exclusive_quiet_verbose ( ) {
173+ let err = Cli :: try_parse_from ( [ APP , "schema" , "-q" , "-v" ] ) . unwrap_err ( ) ;
174+ assert_eq ! ( err. kind( ) , ErrorKind :: ArgumentConflict ) ;
175+ }
176+
177+ #[ test]
178+ fn max_verbosity ( ) {
179+ let cli = Cli :: try_parse_from ( [ APP , "-vvv" , "serve" ] ) . unwrap ( ) ;
180+ assert_eq ! ( cli. log_level( ) , Some ( Level :: TRACE ) ) ;
181+
182+ // Adding more flags does nothing but isn't an error
183+ let cli = Cli :: try_parse_from ( [ APP , "-vvvv" , "serve" ] ) . unwrap ( ) ;
184+ assert_eq ! ( cli. log_level( ) , Some ( Level :: TRACE ) ) ;
185+
186+ let cli = Cli :: try_parse_from ( [ APP , "-vvvvv" , "serve" ] ) . unwrap ( ) ;
187+ assert_eq ! ( cli. log_level( ) , Some ( Level :: TRACE ) ) ;
188+ }
189+
190+ #[ test]
191+ fn tracing_opts ( ) {
192+ let cli = Cli :: try_parse_from ( [ APP , "--tracing" , "https://tracing.example.com" , "serve" ] )
193+ . unwrap ( ) ;
194+ assert_eq ! (
195+ cli. tracing( ) . tracing_url( ) ,
196+ Some ( "https://tracing.example.com" . parse( ) . unwrap( ) )
197+ ) ;
198+ assert_eq ! ( cli. tracing( ) . level( ) , Level :: INFO ) ;
199+
200+ let cli = Cli :: try_parse_from ( [
201+ APP ,
202+ "--tracing" ,
203+ "https://tracing.example.com" ,
204+ "--tracing-level" ,
205+ "DEBUG" ,
206+ "serve" ,
207+ ] )
208+ . unwrap ( ) ;
209+ assert_eq ! (
210+ cli. tracing( ) . tracing_url( ) ,
211+ Some ( "https://tracing.example.com" . parse( ) . unwrap( ) )
212+ ) ;
213+ assert_eq ! ( cli. tracing( ) . level( ) , Level :: DEBUG ) ;
214+ }
215+
216+ #[ test]
217+ fn schema_command ( ) {
218+ let cli = Cli :: try_parse_from ( [ APP , "schema" ] ) . unwrap ( ) ;
219+ let Command :: Schema = cli. command else {
220+ panic ! ( "Unexpected command: {:?}" , cli. command) ;
221+ } ;
222+ }
223+ }
0 commit comments