[pallet_collective] Enforce prime is a valid member of collective in set_members extrinsic (#14354)

* Updated set_members extrinsic to enforce prime is valid member of collective

* Added additional tests for set_members extrinsic

* applied the code review suggestions
This commit is contained in:
Toufeeq Pasha
2023-07-12 21:31:08 +05:30
committed by GitHub
parent d3c42b2e8d
commit 0457c1a9e3
2 changed files with 24 additions and 0 deletions
+5
View File
@@ -346,6 +346,8 @@ pub mod pallet {
WrongProposalWeight,
/// The given length bound for the proposal was too low.
WrongProposalLength,
/// Prime account is not a member
PrimeAccountNotMember,
}
#[pallet::hooks]
@@ -417,6 +419,9 @@ pub mod pallet {
old.len(),
);
}
if let Some(p) = &prime {
ensure!(new_members.contains(p), Error::<T, I>::PrimeAccountNotMember);
}
let mut new_members = new_members;
new_members.sort();
<Self as ChangeMembers<T::AccountId>>::set_members_sorted(&new_members, &old);
+19
View File
@@ -236,6 +236,25 @@ fn initialize_members_sorts_members() {
});
}
#[test]
fn set_members_with_prime_works() {
ExtBuilder::default().build_and_execute(|| {
let members = vec![1, 2, 3];
assert_ok!(Collective::set_members(
RuntimeOrigin::root(),
members.clone(),
Some(3),
MaxMembers::get()
));
assert_eq!(Collective::members(), members.clone());
assert_eq!(Collective::prime(), Some(3));
assert_noop!(
Collective::set_members(RuntimeOrigin::root(), members, Some(4), MaxMembers::get()),
Error::<Test, Instance1>::PrimeAccountNotMember
);
});
}
#[test]
fn proposal_weight_limit_works() {
ExtBuilder::default().build_and_execute(|| {