use crate::mock::{new_test_ext, Balances, Test};
use frame_support::traits::{
fungible::{Balanced, Inspect},
tokens::{Fortitude, Precision, Preservation},
OnUnbalanced,
};
type DapPallet = crate::Pallet<Test>;
#[test]
#[should_panic(expected = "Failed to deposit slash to DAP buffer")]
fn on_unbalanced_panics_when_buffer_not_funded_and_deposit_below_ed() {
new_test_ext(false).execute_with(|| {
let buffer = DapPallet::buffer_account();
let ed = <Balances as Inspect<_>>::minimum_balance();
assert_eq!(Balances::free_balance(buffer), 0);
let credit = <Balances as Balanced<u64>>::withdraw(
&1,
ed - 1,
Precision::Exact,
Preservation::Preserve,
Fortitude::Force,
)
.unwrap();
DapPallet::on_unbalanced(credit);
});
}
#[test]
fn on_unbalanced_creates_buffer_when_not_funded_and_deposit_at_least_ed() {
new_test_ext(false).execute_with(|| {
let buffer = DapPallet::buffer_account();
let ed = <Balances as Inspect<_>>::minimum_balance();
assert_eq!(Balances::free_balance(buffer), 0);
let credit = <Balances as Balanced<u64>>::withdraw(
&1,
ed,
Precision::Exact,
Preservation::Preserve,
Fortitude::Force,
)
.unwrap();
DapPallet::on_unbalanced(credit);
assert_eq!(Balances::free_balance(buffer), ed);
});
}
#[test]
fn slash_to_dap_accumulates_multiple_slashes_to_buffer() {
new_test_ext(true).execute_with(|| {
let buffer = DapPallet::buffer_account();
let ed = <Balances as Inspect<_>>::minimum_balance();
assert_eq!(Balances::free_balance(buffer), ed);
let initial_active = <Balances as Inspect<_>>::active_issuance();
let credit1 = <Balances as Balanced<u64>>::withdraw(
&1,
30,
Precision::Exact,
Preservation::Preserve,
Fortitude::Force,
)
.unwrap();
DapPallet::on_unbalanced(credit1);
let credit2 = <Balances as Balanced<u64>>::withdraw(
&2,
20,
Precision::Exact,
Preservation::Preserve,
Fortitude::Force,
)
.unwrap();
DapPallet::on_unbalanced(credit2);
let credit3 = <Balances as Balanced<u64>>::withdraw(
&3,
50,
Precision::Exact,
Preservation::Preserve,
Fortitude::Force,
)
.unwrap();
DapPallet::on_unbalanced(credit3);
assert_eq!(Balances::free_balance(buffer), ed + 100);
assert_eq!(<Balances as Inspect<_>>::active_issuance(), initial_active - 100);
let credit = <Balances as Balanced<u64>>::issue(0);
DapPallet::on_unbalanced(credit);
assert_eq!(Balances::free_balance(buffer), ed + 100);
});
}