mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 21:31:02 +00:00
Tests for referenda.
This commit is contained in:
@@ -48,9 +48,7 @@ pub mod public {
|
|||||||
.fold((0, 0), |(a, b), (c, d)| (a + c, b + d))
|
.fold((0, 0), |(a, b), (c, d)| (a + c, b + d))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Propose a sensitive action to be taken. Any action that is enactable by `Proposal` is valid.
|
/// Propose a sensitive action to be taken.
|
||||||
/// Proposal is by the `transactor` and will automatically count as an approval. Transactor must
|
|
||||||
/// be a current validator. It is illegal to propose when there is already a proposal in effect.
|
|
||||||
pub fn propose(validator: &AccountId, proposal: &Proposal) {
|
pub fn propose(validator: &AccountId, proposal: &Proposal) {
|
||||||
if storage::exists(CURRENT_PROPOSAL) {
|
if storage::exists(CURRENT_PROPOSAL) {
|
||||||
panic!("there may only be one proposal per era.");
|
panic!("there may only be one proposal per era.");
|
||||||
@@ -58,8 +56,7 @@ pub mod public {
|
|||||||
storage::put(CURRENT_PROPOSAL, proposal);
|
storage::put(CURRENT_PROPOSAL, proposal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Approve the current era's proposal. Transactor must be a validator. This may not be done more
|
/// Vote for or against the proposal.
|
||||||
/// than once for any validator in an era.
|
|
||||||
pub fn vote(who: &AccountId, era_index: BlockNumber, way: bool) {
|
pub fn vote(who: &AccountId, era_index: BlockNumber, way: bool) {
|
||||||
if era_index != staking::current_era() {
|
if era_index != staking::current_era() {
|
||||||
panic!("approval vote applied on non-current era.")
|
panic!("approval vote applied on non-current era.")
|
||||||
@@ -131,6 +128,7 @@ mod tests {
|
|||||||
let dave = Keyring::Dave.to_raw_public();
|
let dave = Keyring::Dave.to_raw_public();
|
||||||
let eve = Keyring::Eve.to_raw_public();
|
let eve = Keyring::Eve.to_raw_public();
|
||||||
let ferdie = Keyring::Ferdie.to_raw_public();
|
let ferdie = Keyring::Ferdie.to_raw_public();
|
||||||
|
let one = Keyring::One.to_raw_public();
|
||||||
|
|
||||||
map![
|
map![
|
||||||
twox_128(b"ses:len").to_vec() => vec![].and(&1u64),
|
twox_128(b"ses:len").to_vec() => vec![].and(&1u64),
|
||||||
@@ -148,6 +146,7 @@ mod tests {
|
|||||||
twox_128(&dave.to_keyed_vec(b"sta:bal:")).to_vec() => vec![].and(&40u64),
|
twox_128(&dave.to_keyed_vec(b"sta:bal:")).to_vec() => vec![].and(&40u64),
|
||||||
twox_128(&eve.to_keyed_vec(b"sta:bal:")).to_vec() => vec![].and(&50u64),
|
twox_128(&eve.to_keyed_vec(b"sta:bal:")).to_vec() => vec![].and(&50u64),
|
||||||
twox_128(&ferdie.to_keyed_vec(b"sta:bal:")).to_vec() => vec![].and(&60u64),
|
twox_128(&ferdie.to_keyed_vec(b"sta:bal:")).to_vec() => vec![].and(&60u64),
|
||||||
|
twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![].and(&1u64),
|
||||||
twox_128(b"sta:tot").to_vec() => vec![].and(&210u64),
|
twox_128(b"sta:tot").to_vec() => vec![].and(&210u64),
|
||||||
twox_128(b"sta:spe").to_vec() => vec![].and(&1u64),
|
twox_128(b"sta:spe").to_vec() => vec![].and(&1u64),
|
||||||
twox_128(b"sta:vac").to_vec() => vec![].and(&3u64),
|
twox_128(b"sta:vac").to_vec() => vec![].and(&3u64),
|
||||||
@@ -156,25 +155,133 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn majority_voting_should_work() {
|
fn simple_passing_should_work() {
|
||||||
let alice = Keyring::Alice.to_raw_public();
|
let alice = Keyring::Alice.to_raw_public();
|
||||||
let bob = Keyring::Bob.to_raw_public();
|
|
||||||
let charlie = Keyring::Charlie.to_raw_public();
|
|
||||||
let dave = Keyring::Dave.to_raw_public();
|
|
||||||
let eve = Keyring::Eve.to_raw_public();
|
|
||||||
let ferdie = Keyring::Ferdie.to_raw_public();
|
|
||||||
let mut t = new_test_ext();
|
let mut t = new_test_ext();
|
||||||
|
|
||||||
with_externalities(&mut t, || {
|
with_externalities(&mut t, || {
|
||||||
assert_eq!(staking::era_length(), 1u64);
|
assert_eq!(staking::era_length(), 1u64);
|
||||||
assert_eq!(staking::total_stake(), 210u64);
|
assert_eq!(staking::total_stake(), 210u64);
|
||||||
|
|
||||||
// Block 1: Make proposal. Approve it. Era length changes.
|
|
||||||
with_env(|e| e.block_number = 1);
|
with_env(|e| e.block_number = 1);
|
||||||
public::propose(&alice, &Proposal::StakingSetSessionsPerEra(2));
|
public::propose(&alice, &Proposal::StakingSetSessionsPerEra(2));
|
||||||
|
public::vote(&alice, 1, true);
|
||||||
|
|
||||||
|
assert_eq!(public::tally(), (10, 0));
|
||||||
|
|
||||||
|
democracy::internal::end_of_an_era();
|
||||||
|
staking::internal::check_new_era();
|
||||||
|
|
||||||
|
assert_eq!(staking::era_length(), 2u64);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn simple_failing_should_work() {
|
||||||
|
let alice = Keyring::Alice.to_raw_public();
|
||||||
|
let mut t = new_test_ext();
|
||||||
|
|
||||||
|
with_externalities(&mut t, || {
|
||||||
|
assert_eq!(staking::era_length(), 1u64);
|
||||||
|
assert_eq!(staking::total_stake(), 210u64);
|
||||||
|
|
||||||
|
with_env(|e| e.block_number = 1);
|
||||||
|
public::propose(&alice, &Proposal::StakingSetSessionsPerEra(2));
|
||||||
|
public::vote(&alice, 1, false);
|
||||||
|
|
||||||
|
assert_eq!(public::tally(), (0, 10));
|
||||||
|
|
||||||
|
democracy::internal::end_of_an_era();
|
||||||
|
staking::internal::check_new_era();
|
||||||
|
|
||||||
|
assert_eq!(staking::era_length(), 1u64);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn controversial_voting_should_work() {
|
||||||
|
let alice = Keyring::Alice.to_raw_public();
|
||||||
|
let bob = Keyring::Bob.to_raw_public();
|
||||||
|
let charlie = Keyring::Charlie.to_raw_public();
|
||||||
|
let dave = Keyring::Dave.to_raw_public();
|
||||||
|
let eve = Keyring::Eve.to_raw_public();
|
||||||
|
let ferdie = Keyring::Ferdie.to_raw_public();
|
||||||
|
let one = Keyring::One.to_raw_public();
|
||||||
|
let mut t = new_test_ext();
|
||||||
|
|
||||||
|
with_externalities(&mut t, || {
|
||||||
|
assert_eq!(staking::era_length(), 1u64);
|
||||||
|
assert_eq!(staking::total_stake(), 210u64);
|
||||||
|
|
||||||
|
with_env(|e| e.block_number = 1);
|
||||||
|
public::propose(&alice, &Proposal::StakingSetSessionsPerEra(2));
|
||||||
|
public::vote(&alice, 1, true);
|
||||||
|
public::vote(&bob, 1, false);
|
||||||
|
public::vote(&charlie, 1, false);
|
||||||
|
public::vote(&dave, 1, true);
|
||||||
|
public::vote(&eve, 1, false);
|
||||||
public::vote(&ferdie, 1, true);
|
public::vote(&ferdie, 1, true);
|
||||||
|
|
||||||
assert_eq!(public::tally(), (60, 0));
|
assert_eq!(public::tally(), (110, 100));
|
||||||
|
|
||||||
|
democracy::internal::end_of_an_era();
|
||||||
|
staking::internal::check_new_era();
|
||||||
|
|
||||||
|
assert_eq!(staking::era_length(), 2u64);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn controversial_low_turnout_voting_should_work() {
|
||||||
|
let alice = Keyring::Alice.to_raw_public();
|
||||||
|
let bob = Keyring::Bob.to_raw_public();
|
||||||
|
let charlie = Keyring::Charlie.to_raw_public();
|
||||||
|
let dave = Keyring::Dave.to_raw_public();
|
||||||
|
let eve = Keyring::Eve.to_raw_public();
|
||||||
|
let ferdie = Keyring::Ferdie.to_raw_public();
|
||||||
|
let one = Keyring::One.to_raw_public();
|
||||||
|
let mut t = new_test_ext();
|
||||||
|
|
||||||
|
with_externalities(&mut t, || {
|
||||||
|
assert_eq!(staking::era_length(), 1u64);
|
||||||
|
assert_eq!(staking::total_stake(), 210u64);
|
||||||
|
|
||||||
|
with_env(|e| e.block_number = 1);
|
||||||
|
public::propose(&alice, &Proposal::StakingSetSessionsPerEra(2));
|
||||||
|
public::vote(&eve, 1, false);
|
||||||
|
public::vote(&ferdie, 1, true);
|
||||||
|
|
||||||
|
assert_eq!(public::tally(), (60, 50));
|
||||||
|
|
||||||
|
democracy::internal::end_of_an_era();
|
||||||
|
staking::internal::check_new_era();
|
||||||
|
|
||||||
|
assert_eq!(staking::era_length(), 1u64);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn passing_low_turnout_voting_should_work() {
|
||||||
|
let alice = Keyring::Alice.to_raw_public();
|
||||||
|
let bob = Keyring::Bob.to_raw_public();
|
||||||
|
let charlie = Keyring::Charlie.to_raw_public();
|
||||||
|
let dave = Keyring::Dave.to_raw_public();
|
||||||
|
let eve = Keyring::Eve.to_raw_public();
|
||||||
|
let ferdie = Keyring::Ferdie.to_raw_public();
|
||||||
|
let one = Keyring::One.to_raw_public();
|
||||||
|
let mut t = new_test_ext();
|
||||||
|
|
||||||
|
with_externalities(&mut t, || {
|
||||||
|
assert_eq!(staking::era_length(), 1u64);
|
||||||
|
assert_eq!(staking::total_stake(), 210u64);
|
||||||
|
|
||||||
|
with_env(|e| e.block_number = 1);
|
||||||
|
public::propose(&alice, &Proposal::StakingSetSessionsPerEra(2));
|
||||||
|
public::vote(&dave, 1, true);
|
||||||
|
public::vote(&eve, 1, false);
|
||||||
|
public::vote(&ferdie, 1, true);
|
||||||
|
|
||||||
|
assert_eq!(public::tally(), (100, 50));
|
||||||
|
|
||||||
democracy::internal::end_of_an_era();
|
democracy::internal::end_of_an_era();
|
||||||
staking::internal::check_new_era();
|
staking::internal::check_new_era();
|
||||||
|
|||||||
Reference in New Issue
Block a user