Skip to content

Commit 4264d16

Browse files
Merge pull request #220 from Sam-Rytech/test/vault-min-deposit-boundary
test(vault): min_deposit boundary coverage (#151)
2 parents e9b0ea9 + 3cdb5fd commit 4264d16

File tree

1 file changed

+136
-0
lines changed

1 file changed

+136
-0
lines changed

contracts/vault/src/test.rs

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)