Alliance pallet: retirement notice call (#11970)

* Alliance pallet: retirement notice

* add alliance pallet to benchmark list for dev chain

* fix type

* ".git/.scripts/bench-bot.sh" pallet dev pallet_alliance

* ".git/.scripts/bench-bot.sh" pallet dev pallet_alliance

* link weight generated by bench for retirement_notice method

* migration to clear UpForKicking storage prefix

* rename migration from v1 to v0_to_v1

* Apply suggestions from code review

Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com>

* rename `retirement-notice to give-retirement-notice

* Apply suggestions from code review

Co-authored-by: Squirrel <gilescope@gmail.com>

* review fixes: update doc, saturating add, BlockNumber type alias

* add suffix to duratin consts *_IN_BLOCKS

* ".git/.scripts/bench-bot.sh" pallet dev pallet_alliance

* add negative tests (#11995)

* add negative tests

* remove tests powerless asserts checking against announcment origin

* assert bad origin from announcement origin checks

Co-authored-by: muharem <ismailov.m.h@gmail.com>

Co-authored-by: command-bot <>
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com>
Co-authored-by: Squirrel <gilescope@gmail.com>
This commit is contained in:
Muharem Ismailov
2022-08-29 18:02:23 +02:00
committed by GitHub
parent b922a25ccd
commit b74fba5dac
8 changed files with 561 additions and 292 deletions
+91 -23
View File
@@ -19,7 +19,7 @@
use sp_runtime::traits::Hash;
use frame_support::{assert_noop, assert_ok, Hashable};
use frame_support::{assert_noop, assert_ok, error::BadOrigin, Hashable};
use frame_system::{EventRecord, Phase};
use super::*;
@@ -241,6 +241,9 @@ fn set_rule_works() {
fn announce_works() {
new_test_ext().execute_with(|| {
let cid = test_cid();
assert_noop!(Alliance::announce(Origin::signed(2), cid.clone()), BadOrigin);
assert_ok!(Alliance::announce(Origin::signed(3), cid.clone()));
assert_eq!(Alliance::announcements(), vec![cid.clone()]);
@@ -390,48 +393,111 @@ fn elevate_ally_works() {
}
#[test]
fn retire_works() {
fn give_retirement_notice_work() {
new_test_ext().execute_with(|| {
let proposal = make_kick_member_proposal(2);
let proposal_len: u32 = proposal.using_encoded(|p| p.len() as u32);
assert_ok!(Alliance::propose(
Origin::signed(1),
3,
Box::new(proposal.clone()),
proposal_len
));
assert_noop!(Alliance::retire(Origin::signed(2)), Error::<Test, ()>::UpForKicking);
assert_noop!(Alliance::retire(Origin::signed(4)), Error::<Test, ()>::NotMember);
assert_noop!(
Alliance::give_retirement_notice(Origin::signed(4)),
Error::<Test, ()>::NotMember
);
assert_eq!(Alliance::members(MemberRole::Fellow), vec![3]);
assert_ok!(Alliance::give_retirement_notice(Origin::signed(3)));
assert_eq!(Alliance::members(MemberRole::Fellow), Vec::<u64>::new());
assert_eq!(Alliance::members(MemberRole::Retiring), vec![3]);
System::assert_last_event(mock::Event::Alliance(
crate::Event::MemberRetirementPeriodStarted { member: (3) },
));
assert_noop!(
Alliance::give_retirement_notice(Origin::signed(3)),
Error::<Test, ()>::AlreadyRetiring
);
});
}
#[test]
fn retire_works() {
new_test_ext().execute_with(|| {
assert_noop!(
Alliance::retire(Origin::signed(2)),
Error::<Test, ()>::RetirementNoticeNotGiven
);
assert_noop!(
Alliance::retire(Origin::signed(4)),
Error::<Test, ()>::RetirementNoticeNotGiven
);
assert_eq!(Alliance::members(MemberRole::Fellow), vec![3]);
assert_ok!(Alliance::give_retirement_notice(Origin::signed(3)));
assert_noop!(
Alliance::retire(Origin::signed(3)),
Error::<Test, ()>::RetirementPeriodNotPassed
);
System::set_block_number(System::block_number() + RetirementPeriod::get());
assert_ok!(Alliance::retire(Origin::signed(3)));
assert_eq!(Alliance::members(MemberRole::Fellow), Vec::<u64>::new());
System::assert_last_event(mock::Event::Alliance(crate::Event::MemberRetired {
member: (3),
unreserved: None,
}));
// Move time on:
System::set_block_number(System::block_number() + RetirementPeriod::get());
assert_powerless(Origin::signed(3));
});
}
fn assert_powerless(user: Origin) {
//vote / veto with a valid propsal
let cid = test_cid();
let proposal = make_proposal(42);
assert_noop!(Alliance::init_members(user.clone(), vec![], vec![], vec![]), BadOrigin);
assert_noop!(Alliance::set_rule(user.clone(), cid.clone()), BadOrigin);
assert_noop!(Alliance::retire(user.clone()), Error::<Test, ()>::RetirementNoticeNotGiven);
assert_noop!(Alliance::give_retirement_notice(user.clone()), Error::<Test, ()>::NotMember);
assert_noop!(Alliance::elevate_ally(user.clone(), 4), BadOrigin);
assert_noop!(Alliance::kick_member(user.clone(), 1), BadOrigin);
assert_noop!(Alliance::nominate_ally(user.clone(), 4), Error::<Test, ()>::NoVotingRights);
assert_noop!(
Alliance::propose(user.clone(), 5, Box::new(proposal), 1000),
Error::<Test, ()>::NoVotingRights
);
}
#[test]
fn kick_member_works() {
new_test_ext().execute_with(|| {
let proposal = make_kick_member_proposal(2);
let proposal_len: u32 = proposal.using_encoded(|p| p.len() as u32);
assert_ok!(Alliance::propose(
Origin::signed(1),
3,
Box::new(proposal.clone()),
proposal_len
));
assert_eq!(Alliance::up_for_kicking(2), true);
assert_eq!(Alliance::members(MemberRole::Founder), vec![1, 2]);
assert_noop!(Alliance::kick_member(Origin::signed(4), 4), BadOrigin);
assert_noop!(Alliance::kick_member(Origin::signed(2), 4), Error::<Test, ()>::NotMember);
<DepositOf<Test, ()>>::insert(2, 25);
assert_eq!(Alliance::members(MemberRole::Founder), vec![1, 2]);
assert_ok!(Alliance::kick_member(Origin::signed(2), 2));
assert_eq!(Alliance::members(MemberRole::Founder), vec![1]);
assert_eq!(<DepositOf<Test, ()>>::get(2), None);
System::assert_last_event(mock::Event::Alliance(crate::Event::MemberKicked {
member: (2),
slashed: Some(25),
}));
});
}
#[test]
fn add_unscrupulous_items_works() {
new_test_ext().execute_with(|| {
assert_noop!(Alliance::add_unscrupulous_items(Origin::signed(2), vec![]), BadOrigin);
assert_ok!(Alliance::add_unscrupulous_items(
Origin::signed(3),
vec![
@@ -455,6 +521,8 @@ fn add_unscrupulous_items_works() {
#[test]
fn remove_unscrupulous_items_works() {
new_test_ext().execute_with(|| {
assert_noop!(Alliance::remove_unscrupulous_items(Origin::signed(2), vec![]), BadOrigin);
assert_noop!(
Alliance::remove_unscrupulous_items(
Origin::signed(3),