@@ -2831,3 +2831,139 @@ mod fuzz {
28312831 }
28322832 }
28332833}
2834+
2835+ // ---------------------------------------------------------------------------
2836+ // Issue #151 — min_deposit boundary tests
2837+ // ---------------------------------------------------------------------------
2838+
2839+ #[ test]
2840+ fn deposit_exact_min_deposit_succeeds ( ) {
2841+ let env = Env :: default ( ) ;
2842+ let owner = Address :: generate ( & env) ;
2843+ let ( vault_address, client) = create_vault ( & env) ;
2844+ let ( usdc, usdc_client, usdc_admin) = create_usdc ( & env, & owner) ;
2845+
2846+ env. mock_all_auths ( ) ;
2847+ fund_vault ( & usdc_admin, & vault_address, 0 ) ;
2848+ client. init ( & owner, & usdc, & None , & None , & Some ( 50 ) , & None , & None ) ;
2849+
2850+ usdc_admin. mint ( & owner, & 50 ) ;
2851+ usdc_client. approve ( & owner, & vault_address, & 50 , & 1000 ) ;
2852+ let balance = client. deposit ( & owner, & 50 ) ;
2853+ assert_eq ! ( balance, 50 ) ;
2854+ }
2855+
2856+ #[ test]
2857+ #[ should_panic( expected = "deposit below minimum" ) ]
2858+ fn deposit_below_min_deposit_panics ( ) {
2859+ let env = Env :: default ( ) ;
2860+ let owner = Address :: generate ( & env) ;
2861+ let ( vault_address, client) = create_vault ( & env) ;
2862+ let ( usdc, usdc_client, usdc_admin) = create_usdc ( & env, & owner) ;
2863+
2864+ env. mock_all_auths ( ) ;
2865+ fund_vault ( & usdc_admin, & vault_address, 0 ) ;
2866+ client. init ( & owner, & usdc, & None , & None , & Some ( 50 ) , & None , & None ) ;
2867+
2868+ usdc_admin. mint ( & owner, & 49 ) ;
2869+ usdc_client. approve ( & owner, & vault_address, & 49 , & 1000 ) ;
2870+ client. deposit ( & owner, & 49 ) ;
2871+ }
2872+
2873+ #[ test]
2874+ fn deposit_above_min_deposit_succeeds ( ) {
2875+ let env = Env :: default ( ) ;
2876+ let owner = Address :: generate ( & env) ;
2877+ let ( vault_address, client) = create_vault ( & env) ;
2878+ let ( usdc, usdc_client, usdc_admin) = create_usdc ( & env, & owner) ;
2879+
2880+ env. mock_all_auths ( ) ;
2881+ fund_vault ( & usdc_admin, & vault_address, 0 ) ;
2882+ client. init ( & owner, & usdc, & None , & None , & Some ( 50 ) , & None , & None ) ;
2883+
2884+ usdc_admin. mint ( & owner, & 51 ) ;
2885+ usdc_client. approve ( & owner, & vault_address, & 51 , & 1000 ) ;
2886+ let balance = client. deposit ( & owner, & 51 ) ;
2887+ assert_eq ! ( balance, 51 ) ;
2888+ }
2889+
2890+ #[ test]
2891+ fn deposit_with_zero_min_deposit_allows_any_positive_amount ( ) {
2892+ // When min_deposit is 0 (default), any positive amount should succeed.
2893+ let env = Env :: default ( ) ;
2894+ let owner = Address :: generate ( & env) ;
2895+ let ( vault_address, client) = create_vault ( & env) ;
2896+ let ( usdc, usdc_client, usdc_admin) = create_usdc ( & env, & owner) ;
2897+
2898+ env. mock_all_auths ( ) ;
2899+ fund_vault ( & usdc_admin, & vault_address, 0 ) ;
2900+ client. init ( & owner, & usdc, & None , & None , & Some ( 0 ) , & None , & None ) ;
2901+
2902+ usdc_admin. mint ( & owner, & 1 ) ;
2903+ usdc_client. approve ( & owner, & vault_address, & 1 , & 1000 ) ;
2904+ let balance = client. deposit ( & owner, & 1 ) ;
2905+ assert_eq ! ( balance, 1 ) ;
2906+ }
2907+
2908+ #[ test]
2909+ fn init_min_deposit_stored_in_meta ( ) {
2910+ let env = Env :: default ( ) ;
2911+ let owner = Address :: generate ( & env) ;
2912+ let ( _, client) = create_vault ( & env) ;
2913+ let ( usdc, _, _) = create_usdc ( & env, & owner) ;
2914+
2915+ env. mock_all_auths ( ) ;
2916+ client. init ( & owner, & usdc, & None , & None , & Some ( 100 ) , & None , & None ) ;
2917+ let meta = client. get_meta ( ) ;
2918+ assert_eq ! ( meta. min_deposit, 100 ) ;
2919+ }
2920+
2921+ #[ test]
2922+ fn init_default_min_deposit_is_zero ( ) {
2923+ let env = Env :: default ( ) ;
2924+ let owner = Address :: generate ( & env) ;
2925+ let ( _, client) = create_vault ( & env) ;
2926+ let ( usdc, _, _) = create_usdc ( & env, & owner) ;
2927+
2928+ env. mock_all_auths ( ) ;
2929+ client. init ( & owner, & usdc, & None , & None , & None , & None , & None ) ;
2930+ let meta = client. get_meta ( ) ;
2931+ assert_eq ! ( meta. min_deposit, 0 ) ;
2932+ }
2933+
2934+ #[ test]
2935+ fn deposit_one_below_large_min_deposit_panics ( ) {
2936+ let env = Env :: default ( ) ;
2937+ let owner = Address :: generate ( & env) ;
2938+ let ( vault_address, client) = create_vault ( & env) ;
2939+ let ( usdc, usdc_client, usdc_admin) = create_usdc ( & env, & owner) ;
2940+
2941+ env. mock_all_auths ( ) ;
2942+ fund_vault ( & usdc_admin, & vault_address, 0 ) ;
2943+ client. init ( & owner, & usdc, & None , & None , & Some ( 1_000_000 ) , & None , & None ) ;
2944+
2945+ usdc_admin. mint ( & owner, & 999_999 ) ;
2946+ usdc_client. approve ( & owner, & vault_address, & 999_999 , & 1000 ) ;
2947+ let result = client. try_deposit ( & owner, & 999_999 ) ;
2948+ assert ! (
2949+ result. is_err( ) ,
2950+ "deposit one below large min_deposit must fail"
2951+ ) ;
2952+ }
2953+
2954+ #[ test]
2955+ fn deposit_exact_large_min_deposit_succeeds ( ) {
2956+ let env = Env :: default ( ) ;
2957+ let owner = Address :: generate ( & env) ;
2958+ let ( vault_address, client) = create_vault ( & env) ;
2959+ let ( usdc, usdc_client, usdc_admin) = create_usdc ( & env, & owner) ;
2960+
2961+ env. mock_all_auths ( ) ;
2962+ fund_vault ( & usdc_admin, & vault_address, 0 ) ;
2963+ client. init ( & owner, & usdc, & None , & None , & Some ( 1_000_000 ) , & None , & None ) ;
2964+
2965+ usdc_admin. mint ( & owner, & 1_000_000 ) ;
2966+ usdc_client. approve ( & owner, & vault_address, & 1_000_000 , & 1000 ) ;
2967+ let balance = client. deposit ( & owner, & 1_000_000 ) ;
2968+ assert_eq ! ( balance, 1_000_000 ) ;
2969+ }
0 commit comments