@@ -3184,10 +3184,11 @@ mod tests {
3184
3184
solana_client:: blockhash_query:: Source ,
3185
3185
solana_sdk:: {
3186
3186
bpf_loader,
3187
- signature:: { Keypair , Signer } ,
3187
+ signature:: { write_keypair_file , Keypair , Signer } ,
3188
3188
} ,
3189
3189
solana_test_validator:: { ProgramInfo , TestValidator , TestValidatorGenesis } ,
3190
3190
std:: path:: PathBuf ,
3191
+ tempfile:: NamedTempFile ,
3191
3192
} ;
3192
3193
3193
3194
fn clone_keypair ( keypair : & Keypair ) -> Keypair {
@@ -3762,4 +3763,158 @@ mod tests {
3762
3763
assert_eq ! ( ui_account. mint, token. to_string( ) ) ;
3763
3764
assert_eq ! ( ui_account. owner, aux_string) ;
3764
3765
}
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
+ }
3765
3920
}
0 commit comments