From 339bfa78836db6ed797acc4732bb1551c2ff8e4e Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Thu, 21 Dec 2023 13:15:50 +0530 Subject: [PATCH] fix: redeem test cases + add back --- crates/redeem/src/tests.rs | 3 +++ crates/vault-registry/src/lib.rs | 6 ++++-- .../runtime/runtime-tests/src/parachain/redeem.rs | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/crates/redeem/src/tests.rs b/crates/redeem/src/tests.rs index 17f522fd3b..22ad2b24bb 100644 --- a/crates/redeem/src/tests.rs +++ b/crates/redeem/src/tests.rs @@ -766,6 +766,8 @@ mod spec_based_tests { assert_eq!(tokens, &burned_tokens); MockResult::Return(Ok((wrapped(0), griefing(0)))) }); + ext::vault_registry::get_vault_max_premium_redeem:: + .mock_safe(|_| MockResult::Return(Ok(collateral(0)))); // The returned `replaceCollateral` MUST be released currency::Amount::unlock_on.mock_safe(move |collateral_amount, vault_id| { @@ -919,6 +921,7 @@ mod spec_based_tests { assert_eq!(vault, &VAULT); MockResult::Return(Ok(())) }); + ext::vault_registry::is_vault_below_secure_threshold::.mock_safe(|_| MockResult::Return(Ok(false))); Amount::::unlock_on.mock_safe(|_, _| MockResult::Return(Ok(()))); Amount::::transfer.mock_safe(|_, _, _| MockResult::Return(Ok(()))); ext::vault_registry::transfer_funds_saturated:: diff --git a/crates/vault-registry/src/lib.rs b/crates/vault-registry/src/lib.rs index 280abe73df..dda7892e74 100644 --- a/crates/vault-registry/src/lib.rs +++ b/crates/vault-registry/src/lib.rs @@ -1563,7 +1563,6 @@ impl Pallet { Ok(Self::get_vault_from_id(&vault_id)?.is_liquidated()) } - #[cfg(feature = "integration-tests")] // note: unlike `is_vault_below_secure_threshold` and `is_vault_below_liquidation_threshold`, // this function uses to_be_backed tokens pub fn will_be_below_premium_threshold(vault_id: &DefaultVaultId) -> Result { @@ -1707,7 +1706,10 @@ impl Pallet { let request_redeem_tokens_for_max_premium = vault_to_burn_tokens.checked_div(&amount_wrapped).ok()?; - if Self::ensure_not_banned(&vault_id).is_ok() && !request_redeem_tokens_for_max_premium.is_zero() { + if Self::ensure_not_banned(&vault_id).is_ok() && !request_redeem_tokens_for_max_premium.is_zero() + // need the check as `inclusion_fee` will be a non zero amount, hence `request_redeem_tokens_for_max_premium` will also be a non zero amount + && Self::will_be_below_premium_threshold(&vault_id).unwrap_or(false) + { Some((vault_id, request_redeem_tokens_for_max_premium)) } else { None diff --git a/parachain/runtime/runtime-tests/src/parachain/redeem.rs b/parachain/runtime/runtime-tests/src/parachain/redeem.rs index 0e04954cf3..de11a4972a 100644 --- a/parachain/runtime/runtime-tests/src/parachain/redeem.rs +++ b/parachain/runtime/runtime-tests/src/parachain/redeem.rs @@ -200,6 +200,20 @@ mod premium_redeem_tests { }); } + #[test] + fn integration_test_try_get_premium_vaults_which_is_sufficiently_collateralized_then_under_collateralized() { + test_setup_for_premium_redeem(|vault_id| { + assert_noop!( + RedeemPallet::get_premium_redeem_vaults(), + VaultRegistryError::NoVaultUnderThePremiumRedeemThreshold + ); + + // put vault under premium redeem threshold + setup_vault_below_premium_threshold(vault_id.clone()); + assert_eq!(RedeemPallet::get_premium_redeem_vaults().unwrap().len(), 1); + }); + } + #[test] fn integration_test_redeem_max_premium_redeemable_token() { test_setup_for_premium_redeem(|vault_id| {