|
1 | | -use pallet_governance::proposal::{Proposal, ProposalData}; |
2 | | -use pallet_governance::Error; |
3 | | -use pallet_governance::{proposal::ProposalStatus, Proposals}; |
4 | | -use polkadot_sdk::frame_support::{assert_err, assert_ok}; |
5 | | -use polkadot_sdk::sp_runtime::BoundedVec; |
| 1 | +use pallet_emission0::PendingEmission; |
| 2 | +use pallet_governance::{ |
| 3 | + proposal::{Proposal, ProposalData, ProposalStatus}, |
| 4 | + DaoTreasuryAddress, Error, GlobalGovernanceConfig, Proposals, TreasuryEmissionFee, |
| 5 | +}; |
| 6 | +use pallet_governance_api::GovernanceApi; |
| 7 | +use polkadot_sdk::frame_support::assert_err; |
| 8 | +use polkadot_sdk::{frame_support::assert_ok, sp_runtime::Percent}; |
| 9 | +use polkadot_sdk::{frame_support::traits::Get, sp_runtime::BoundedVec}; |
6 | 10 | use test_utils::{ |
7 | | - add_balance, get_balance, get_origin, new_test_ext, to_nano, zero_min_burn, AccountId, Test, |
| 11 | + add_balance, get_balance, get_origin, new_test_ext, step_block, to_nano, zero_min_burn, |
| 12 | + AccountId, Governance, Test, |
8 | 13 | }; |
9 | 14 |
|
10 | 15 | fn register(account: AccountId, _unused: u16, module: AccountId, stake: u128) { |
@@ -74,7 +79,49 @@ fn removes_vote_correctly() { |
74 | 79 | const FOR: u32 = 0; |
75 | 80 | const AGAINST: u32 = 1; |
76 | 81 |
|
| 82 | + let key = 0; |
| 83 | + |
77 | 84 | register(FOR, 0, 0, to_nano(10)); |
| 85 | + register(AGAINST, 0, 1, to_nano(5)); |
| 86 | + |
| 87 | + config(1, 100); |
| 88 | + |
| 89 | + add_balance(key, 1); |
| 90 | + assert_ok!( |
| 91 | + pallet_governance::Pallet::<Test>::add_global_custom_proposal( |
| 92 | + get_origin(key), |
| 93 | + b"metadata".to_vec() |
| 94 | + ) |
| 95 | + ); |
| 96 | + |
| 97 | + vote(FOR, 0, true); |
| 98 | + vote(AGAINST, 0, false); |
| 99 | + |
| 100 | + step_block(100); |
| 101 | + |
| 102 | + assert_eq!( |
| 103 | + Proposals::<Test>::get(0).unwrap().status, |
| 104 | + ProposalStatus::Accepted { |
| 105 | + block: 100, |
| 106 | + stake_for: to_nano(10), |
| 107 | + stake_against: to_nano(5), |
| 108 | + } |
| 109 | + ); |
| 110 | + }); |
| 111 | +} |
| 112 | + |
| 113 | +#[test] |
| 114 | +fn global_proposal_is_refused_correctly() { |
| 115 | + new_test_ext().execute_with(|| { |
| 116 | + PendingEmission::<Test>::set(0); |
| 117 | + TreasuryEmissionFee::<Test>::set(Percent::zero()); |
| 118 | + let balance = get_balance(DaoTreasuryAddress::<Test>::get()); |
| 119 | + |
| 120 | + zero_min_burn(); |
| 121 | + const FOR: u32 = 0; |
| 122 | + const AGAINST: u32 = 1; |
| 123 | + |
| 124 | + register(FOR, 0, 0, to_nano(5)); |
78 | 125 | register(AGAINST, 0, 1, to_nano(10)); |
79 | 126 |
|
80 | 127 | config(1, 100); |
@@ -103,6 +150,11 @@ fn removes_vote_correctly() { |
103 | 150 | } |
104 | 151 | _ => unreachable!(), |
105 | 152 | } |
| 153 | + |
| 154 | + assert_eq!( |
| 155 | + get_balance(Governance::dao_treasury_address()), |
| 156 | + balance + crate::GlobalGovernanceConfig::<Test>::get().proposal_cost |
| 157 | + ); |
106 | 158 | }); |
107 | 159 | } |
108 | 160 |
|
@@ -149,27 +201,80 @@ fn ensures_proposal_exists() { |
149 | 201 | zero_min_burn(); |
150 | 202 |
|
151 | 203 | const MODULE: u32 = 0; |
| 204 | + PendingEmission::<Test>::set(0); |
| 205 | + TreasuryEmissionFee::<Test>::set(Percent::zero()); |
| 206 | + let balance = get_balance(DaoTreasuryAddress::<Test>::get()); |
152 | 207 |
|
153 | | - register(MODULE, 0, 0, to_nano(10)); |
| 208 | + let min_stake: u128 = <Test as pallet_torus0::Config>::DefaultMinAllowedStake::get(); |
| 209 | + let default_proposal_expiration: u64 = |
| 210 | + <Test as pallet_governance::Config>::DefaultProposalExpiration::get(); |
154 | 211 |
|
155 | 212 | config(1, 100); |
156 | 213 |
|
| 214 | + let origin = get_origin(0); |
| 215 | + add_balance(0, to_nano(2)); |
| 216 | + register(0, 0, 0, to_nano(1) - min_stake); |
| 217 | + |
157 | 218 | if pallet_torus0::stake::sum_staked_by::<Test>(&MODULE) < 1 { |
158 | 219 | stake(MODULE, MODULE, to_nano(1)); |
159 | 220 | } |
160 | 221 |
|
| 222 | + let _ = pallet_governance::roles::penalize_agent::<Test>(0, 100); |
| 223 | + pallet_torus0::TotalStake::<Test>::set(to_nano(10)); |
| 224 | + |
| 225 | + assert_ok!(pallet_governance::Pallet::<Test>::add_emission_proposal( |
| 226 | + origin.clone(), |
| 227 | + Percent::from_parts(20), |
| 228 | + Percent::from_parts(20), |
| 229 | + Percent::from_parts(20), |
| 230 | + vec![b'0'; 64], |
| 231 | + )); |
| 232 | + |
| 233 | + vote(0, 0, true); |
| 234 | + |
| 235 | + step_block(default_proposal_expiration); |
| 236 | + |
| 237 | + assert_eq!( |
| 238 | + Proposals::<Test>::get(0).unwrap().status, |
| 239 | + ProposalStatus::Expired |
| 240 | + ); |
| 241 | + assert_eq!( |
| 242 | + get_balance(Governance::dao_treasury_address()), |
| 243 | + balance + crate::GlobalGovernanceConfig::<Test>::get().proposal_cost |
| 244 | + ); |
| 245 | + }); |
| 246 | +} |
| 247 | + |
| 248 | +#[test] |
| 249 | +fn creates_emission_proposal_with_invalid_params_and_it_fails() { |
| 250 | + new_test_ext().execute_with(|| { |
| 251 | + const MODULE: AccountId = 0; |
| 252 | + |
| 253 | + zero_min_burn(); |
| 254 | + |
| 255 | + let default_proposal_expiration: u64 = |
| 256 | + <Test as pallet_governance::Config>::DefaultProposalExpiration::get(); |
| 257 | + |
| 258 | + let min_stake: u128 = <Test as pallet_torus0::Config>::DefaultMinAllowedStake::get(); |
| 259 | + |
| 260 | + config(1, default_proposal_expiration); |
| 261 | + |
| 262 | + let origin = get_origin(MODULE); |
| 263 | + add_balance(MODULE, to_nano(2)); |
| 264 | + register(MODULE, 0, MODULE, to_nano(1) - min_stake); |
| 265 | + |
161 | 266 | assert_err!( |
162 | | - pallet_governance::Pallet::<Test>::vote_proposal(get_origin(MODULE), 0, true), |
| 267 | + pallet_governance::Pallet::<Test>::vote_proposal(origin.clone(), 0, true), |
163 | 268 | Error::<Test>::ProposalNotFound |
164 | 269 | ); |
165 | 270 |
|
166 | 271 | assert_err!( |
167 | | - pallet_governance::Pallet::<Test>::vote_proposal(get_origin(MODULE), 0, false), |
| 272 | + pallet_governance::Pallet::<Test>::vote_proposal(origin.clone(), 0, false), |
168 | 273 | Error::<Test>::ProposalNotFound |
169 | 274 | ); |
170 | 275 |
|
171 | 276 | assert_err!( |
172 | | - pallet_governance::Pallet::<Test>::remove_vote_proposal(get_origin(MODULE), 0), |
| 277 | + pallet_governance::Pallet::<Test>::remove_vote_proposal(origin, 0), |
173 | 278 | Error::<Test>::ProposalNotFound |
174 | 279 | ); |
175 | 280 | }); |
|
0 commit comments