test.rs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. use super::mock::*;
  2. use crate::*;
  3. use frame_support::traits::Currency;
  4. pub(crate) fn increase_total_balance_issuance_using_account_id(account_id: u64, balance: u64) {
  5. let initial_balance = Balances::total_issuance();
  6. {
  7. let _ = Balances::deposit_creating(&account_id, balance);
  8. }
  9. assert_eq!(Balances::total_issuance(), initial_balance + balance);
  10. }
  11. #[test]
  12. fn lock_succeeds() {
  13. build_test_externalities().execute_with(|| {
  14. let account_id = 1;
  15. let total_amount = 300;
  16. let stake = 100;
  17. increase_total_balance_issuance_using_account_id(account_id, total_amount);
  18. assert_eq!(Balances::usable_balance(&account_id), total_amount);
  19. TestStakingManager::lock(&account_id, stake);
  20. assert_eq!(Balances::usable_balance(&account_id), total_amount - stake);
  21. });
  22. }
  23. #[test]
  24. fn unlock_succeeds() {
  25. build_test_externalities().execute_with(|| {
  26. let account_id = 1;
  27. let total_amount = 300;
  28. let stake = 100;
  29. increase_total_balance_issuance_using_account_id(account_id, total_amount);
  30. TestStakingManager::lock(&account_id, stake);
  31. assert_eq!(Balances::usable_balance(&account_id), total_amount - stake);
  32. TestStakingManager::unlock(&account_id);
  33. assert_eq!(Balances::usable_balance(&account_id), total_amount);
  34. });
  35. }
  36. #[test]
  37. fn slash_succeeds() {
  38. build_test_externalities().execute_with(|| {
  39. let account_id = 1;
  40. let total_amount = 300;
  41. let stake = 100;
  42. increase_total_balance_issuance_using_account_id(account_id, total_amount);
  43. TestStakingManager::lock(&account_id, stake);
  44. assert_eq!(Balances::usable_balance(&account_id), total_amount - stake);
  45. let slash_amount = 50;
  46. TestStakingManager::slash(&account_id, Some(slash_amount));
  47. TestStakingManager::unlock(&account_id);
  48. assert_eq!(
  49. Balances::usable_balance(&account_id),
  50. total_amount - slash_amount
  51. );
  52. });
  53. }
  54. #[test]
  55. fn slash_full_succeeds() {
  56. build_test_externalities().execute_with(|| {
  57. let account_id = 1;
  58. let total_amount = 300;
  59. let stake = 100;
  60. increase_total_balance_issuance_using_account_id(account_id, total_amount);
  61. TestStakingManager::lock(&account_id, stake);
  62. assert_eq!(Balances::usable_balance(&account_id), total_amount - stake);
  63. TestStakingManager::slash(&account_id, None);
  64. TestStakingManager::unlock(&account_id);
  65. assert_eq!(Balances::usable_balance(&account_id), total_amount - stake);
  66. // Lock was removed.
  67. assert!(TestStakingManager::is_account_free_of_conflicting_stakes(
  68. &account_id
  69. ));
  70. });
  71. }
  72. #[test]
  73. fn slash_down_to_zero_succeeds() {
  74. build_test_externalities().execute_with(|| {
  75. let account_id = 1;
  76. let total_amount = 300;
  77. let stake = 100;
  78. increase_total_balance_issuance_using_account_id(account_id, total_amount);
  79. TestStakingManager::lock(&account_id, stake);
  80. assert_eq!(Balances::usable_balance(&account_id), total_amount - stake);
  81. TestStakingManager::slash(&account_id, Some(stake));
  82. TestStakingManager::unlock(&account_id);
  83. assert_eq!(Balances::usable_balance(&account_id), total_amount - stake);
  84. // Lock was removed.
  85. assert!(TestStakingManager::is_account_free_of_conflicting_stakes(
  86. &account_id
  87. ));
  88. });
  89. }
  90. #[test]
  91. fn current_stake_succeeds() {
  92. build_test_externalities().execute_with(|| {
  93. let account_id = 1;
  94. let total_amount = 300;
  95. let stake = 100;
  96. increase_total_balance_issuance_using_account_id(account_id, total_amount);
  97. TestStakingManager::lock(&account_id, stake);
  98. assert_eq!(TestStakingManager::current_stake(&account_id), stake);
  99. });
  100. }
  101. #[test]
  102. fn is_account_free_of_conflicting_stakes_succeeds() {
  103. build_test_externalities().execute_with(|| {
  104. let account_id = 1;
  105. let total_amount = 300;
  106. let stake = 100;
  107. increase_total_balance_issuance_using_account_id(account_id, total_amount);
  108. assert!(TestStakingManager::is_account_free_of_conflicting_stakes(
  109. &account_id
  110. ));
  111. TestStakingManager::lock(&account_id, stake);
  112. assert!(!TestStakingManager::is_account_free_of_conflicting_stakes(
  113. &account_id
  114. ));
  115. });
  116. }
  117. #[test]
  118. fn is_enough_balance_for_stake_succeeds() {
  119. build_test_externalities().execute_with(|| {
  120. let account_id = 1;
  121. let total_amount = 300;
  122. let stake = 100;
  123. assert!(!TestStakingManager::is_enough_balance_for_stake(
  124. &account_id,
  125. stake
  126. ));
  127. increase_total_balance_issuance_using_account_id(account_id, total_amount);
  128. assert!(TestStakingManager::is_enough_balance_for_stake(
  129. &account_id,
  130. stake
  131. ));
  132. });
  133. }
  134. // Test stub: not implemented yet.
  135. #[ignore]
  136. #[test]
  137. fn is_member_staking_account_succeeds() {
  138. build_test_externalities().execute_with(|| {
  139. let account_id = 1;
  140. let member_id = 1;
  141. assert!(TestStakingManager::is_member_staking_account(
  142. &member_id,
  143. &account_id
  144. ));
  145. });
  146. }
  147. #[test]
  148. fn set_stake_succeeds() {
  149. build_test_externalities().execute_with(|| {
  150. let account_id = 1;
  151. let total_amount = 300;
  152. let stake = 300;
  153. let invalid_stake = 600;
  154. increase_total_balance_issuance_using_account_id(account_id, total_amount);
  155. assert_eq!(
  156. TestStakingManager::set_stake(&account_id, stake),
  157. DispatchResult::Ok(())
  158. );
  159. assert_eq!(TestStakingManager::current_stake(&account_id), stake);
  160. assert_eq!(
  161. TestStakingManager::set_stake(&account_id, invalid_stake),
  162. DispatchResult::Err(DispatchError::Other("Not enough balance for a new stake."))
  163. );
  164. assert_eq!(TestStakingManager::current_stake(&account_id), stake);
  165. });
  166. }