@@ -17,19 +17,23 @@ pub struct Cmd {
1717 pub network : network:: Args ,
1818 /// Address to fund
1919 #[ command( flatten) ]
20- pub address : public_key:: Args ,
20+ pub address : public_key:: Cmd ,
2121}
2222
2323impl Cmd {
2424 pub async fn run ( & self , global_args : & global:: Args ) -> Result < ( ) , Error > {
2525 let print = Print :: new ( global_args. quiet ) ;
2626 let addr = self . address . public_key ( ) . await ?;
2727 let network = self . network . get ( & self . address . locator ) ?;
28- let formatted_name = self . address . name . to_string ( ) ;
28+ let label = self
29+ . address
30+ . name
31+ . as_ref ( )
32+ . map_or_else ( || addr. to_string ( ) , ToString :: to_string) ;
2933 network. fund_address ( & addr) . await ?;
3034 print. checkln ( format ! (
3135 "Account {} funded on {:?}" ,
32- formatted_name , network. network_passphrase
36+ label , network. network_passphrase
3337 ) ) ;
3438 Ok ( ( ) )
3539 }
@@ -43,9 +47,29 @@ mod tests {
4347 const PUBLIC_KEY : & str = "GAKSH6AD2IPJQELTHIOWDAPYX74YELUOWJLI2L4RIPIPZH6YQIFNUSDC" ;
4448
4549 #[ test]
46- fn fund_does_not_accept_ledger_flag ( ) {
50+ fn ledger_flag_parses_without_name ( ) {
51+ let cmd = Cmd :: try_parse_from ( [ "fund" , "--ledger" ] ) . expect ( "--ledger alone parses" ) ;
52+ assert ! ( cmd. address. ledger) ;
53+ assert ! ( cmd. address. name. is_none( ) ) ;
54+ }
55+
56+ #[ test]
57+ fn ledger_flag_with_hd_path_parses ( ) {
58+ let cmd = Cmd :: try_parse_from ( [ "fund" , "--ledger" , "--hd-path" , "5" ] ) . unwrap ( ) ;
59+ assert ! ( cmd. address. ledger) ;
60+ assert_eq ! ( cmd. address. hd_path, Some ( 5 ) ) ;
61+ }
62+
63+ #[ test]
64+ fn ledger_flag_conflicts_with_name ( ) {
4765 let err = Cmd :: try_parse_from ( [ "fund" , PUBLIC_KEY , "--ledger" ] )
48- . expect_err ( "`--ledger` belongs to `keys address` only" ) ;
49- assert_eq ! ( err. kind( ) , clap:: error:: ErrorKind :: UnknownArgument ) ;
66+ . expect_err ( "--ledger + name must conflict" ) ;
67+ assert_eq ! ( err. kind( ) , clap:: error:: ErrorKind :: ArgumentConflict ) ;
68+ }
69+
70+ #[ test]
71+ fn missing_name_without_ledger_is_rejected ( ) {
72+ let err = Cmd :: try_parse_from ( [ "fund" ] ) . expect_err ( "name is required without --ledger" ) ;
73+ assert_eq ! ( err. kind( ) , clap:: error:: ErrorKind :: MissingRequiredArgument ) ;
5074 }
5175}
0 commit comments