@@ -3184,10 +3184,11 @@ mod tests {
31843184 solana_client:: blockhash_query:: Source ,
31853185 solana_sdk:: {
31863186 bpf_loader,
3187- signature:: { Keypair , Signer } ,
3187+ signature:: { write_keypair_file , Keypair , Signer } ,
31883188 } ,
31893189 solana_test_validator:: { ProgramInfo , TestValidator , TestValidatorGenesis } ,
31903190 std:: path:: PathBuf ,
3191+ tempfile:: NamedTempFile ,
31913192 } ;
31923193
31933194 fn clone_keypair ( keypair : & Keypair ) -> Keypair {
@@ -3762,4 +3763,158 @@ mod tests {
37623763 assert_eq ! ( ui_account. mint, token. to_string( ) ) ;
37633764 assert_eq ! ( ui_account. owner, aux_string) ;
37643765 }
3766+
3767+ #[ test]
3768+ fn transfer_with_account_delegate ( ) {
3769+ let ( test_validator, payer) = validator_for_test ( ) ;
3770+ let config = test_config ( & test_validator, & payer, & spl_token:: id ( ) ) ;
3771+
3772+ let token = create_token ( & config, & payer) ;
3773+ let source = create_associated_account ( & config, & payer, token) ;
3774+ let destination = create_auxiliary_account ( & config, & payer, token) ;
3775+ let delegate = Keypair :: new ( ) ;
3776+
3777+ let file = NamedTempFile :: new ( ) . unwrap ( ) ;
3778+ write_keypair_file ( & delegate, & file) . unwrap ( ) ;
3779+
3780+ let ui_amount = 100.0 ;
3781+ mint_tokens ( & config, & payer, token, ui_amount, source) ;
3782+
3783+ let ui_account = config
3784+ . rpc_client
3785+ . get_token_account ( & source)
3786+ . unwrap ( )
3787+ . unwrap ( ) ;
3788+ assert_eq ! ( ui_account. token_amount. amount, "100" ) ;
3789+ assert_eq ! ( ui_account. delegate, None ) ;
3790+ assert_eq ! ( ui_account. delegated_amount, None ) ;
3791+ let ui_account = config
3792+ . rpc_client
3793+ . get_token_account ( & destination)
3794+ . unwrap ( )
3795+ . unwrap ( ) ;
3796+ assert_eq ! ( ui_account. token_amount. amount, "0" ) ;
3797+
3798+ process_test_command (
3799+ & config,
3800+ & payer,
3801+ & [
3802+ "spl-token" ,
3803+ CommandName :: Approve . into ( ) ,
3804+ & source. to_string ( ) ,
3805+ "10" ,
3806+ & delegate. pubkey ( ) . to_string ( ) ,
3807+ ] ,
3808+ )
3809+ . unwrap ( ) ;
3810+
3811+ let ui_account = config
3812+ . rpc_client
3813+ . get_token_account ( & source)
3814+ . unwrap ( )
3815+ . unwrap ( ) ;
3816+ assert_eq ! ( ui_account. delegate. unwrap( ) , delegate. pubkey( ) . to_string( ) ) ;
3817+ assert_eq ! ( ui_account. delegated_amount. unwrap( ) . amount, "10" ) ;
3818+
3819+ let result = process_test_command (
3820+ & config,
3821+ & payer,
3822+ & [
3823+ "spl-token" ,
3824+ CommandName :: Transfer . into ( ) ,
3825+ & token. to_string ( ) ,
3826+ "10" ,
3827+ & destination. to_string ( ) ,
3828+ "--from" ,
3829+ & source. to_string ( ) ,
3830+ "--owner" ,
3831+ file. path ( ) . to_str ( ) . unwrap ( ) ,
3832+ ] ,
3833+ ) ;
3834+ result. unwrap ( ) ;
3835+
3836+ let ui_account = config
3837+ . rpc_client
3838+ . get_token_account ( & source)
3839+ . unwrap ( )
3840+ . unwrap ( ) ;
3841+ assert_eq ! ( ui_account. token_amount. amount, "90" ) ;
3842+ assert_eq ! ( ui_account. delegate, None ) ;
3843+ assert_eq ! ( ui_account. delegated_amount, None ) ;
3844+ let ui_account = config
3845+ . rpc_client
3846+ . get_token_account ( & destination)
3847+ . unwrap ( )
3848+ . unwrap ( ) ;
3849+ assert_eq ! ( ui_account. token_amount. amount, "10" ) ;
3850+ }
3851+
3852+ #[ test]
3853+ fn burn_with_account_delegate ( ) {
3854+ let ( test_validator, payer) = validator_for_test ( ) ;
3855+ let config = test_config ( & test_validator, & payer, & spl_token:: id ( ) ) ;
3856+
3857+ let token = create_token ( & config, & payer) ;
3858+ let source = create_associated_account ( & config, & payer, token) ;
3859+ let delegate = Keypair :: new ( ) ;
3860+
3861+ let file = NamedTempFile :: new ( ) . unwrap ( ) ;
3862+ write_keypair_file ( & delegate, & file) . unwrap ( ) ;
3863+
3864+ let ui_amount = 100.0 ;
3865+ mint_tokens ( & config, & payer, token, ui_amount, source) ;
3866+
3867+ let ui_account = config
3868+ . rpc_client
3869+ . get_token_account ( & source)
3870+ . unwrap ( )
3871+ . unwrap ( ) ;
3872+ assert_eq ! ( ui_account. token_amount. amount, "100" ) ;
3873+ assert_eq ! ( ui_account. delegate, None ) ;
3874+ assert_eq ! ( ui_account. delegated_amount, None ) ;
3875+
3876+ process_test_command (
3877+ & config,
3878+ & payer,
3879+ & [
3880+ "spl-token" ,
3881+ CommandName :: Approve . into ( ) ,
3882+ & source. to_string ( ) ,
3883+ "10" ,
3884+ & delegate. pubkey ( ) . to_string ( ) ,
3885+ ] ,
3886+ )
3887+ . unwrap ( ) ;
3888+
3889+ let ui_account = config
3890+ . rpc_client
3891+ . get_token_account ( & source)
3892+ . unwrap ( )
3893+ . unwrap ( ) ;
3894+ assert_eq ! ( ui_account. delegate. unwrap( ) , delegate. pubkey( ) . to_string( ) ) ;
3895+ assert_eq ! ( ui_account. delegated_amount. unwrap( ) . amount, "10" ) ;
3896+
3897+ let result = process_test_command (
3898+ & config,
3899+ & payer,
3900+ & [
3901+ "spl-token" ,
3902+ CommandName :: Burn . into ( ) ,
3903+ & source. to_string ( ) ,
3904+ "10" ,
3905+ "--owner" ,
3906+ file. path ( ) . to_str ( ) . unwrap ( ) ,
3907+ ] ,
3908+ ) ;
3909+ result. unwrap ( ) ;
3910+
3911+ let ui_account = config
3912+ . rpc_client
3913+ . get_token_account ( & source)
3914+ . unwrap ( )
3915+ . unwrap ( ) ;
3916+ assert_eq ! ( ui_account. token_amount. amount, "90" ) ;
3917+ assert_eq ! ( ui_account. delegate, None ) ;
3918+ assert_eq ! ( ui_account. delegated_amount, None ) ;
3919+ }
37653920}
0 commit comments