mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 21:01:05 +00:00
Migrate membership, nicks, scored-pool and session to decl_error (#4463)
* Migrate membership, nicks, scored-pool and session to decl_error * Fix tests * Update frame/scored-pool/src/tests.rs Co-Authored-By: Shawn Tabrizi <shawntabrizi@gmail.com> * Remove InsufficientBalance error from scored-pool * Replace Error::<Test, DefaultInstance> with Error::<Test, _> Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
This commit is contained in:
committed by
Shawn Tabrizi
parent
9950ea98fc
commit
328563f8d4
@@ -94,7 +94,7 @@ use sp_std::{
|
||||
prelude::*,
|
||||
};
|
||||
use frame_support::{
|
||||
decl_module, decl_storage, decl_event, ensure,
|
||||
decl_module, decl_storage, decl_event, ensure, decl_error,
|
||||
traits::{ChangeMembers, InitializeMembers, Currency, Get, ReservableCurrency},
|
||||
};
|
||||
use frame_system::{self as system, ensure_root, ensure_signed};
|
||||
@@ -222,11 +222,25 @@ decl_event!(
|
||||
}
|
||||
);
|
||||
|
||||
decl_error! {
|
||||
/// Error for the scored-pool module.
|
||||
pub enum Error for Module<T: Trait<I>, I: Instance> {
|
||||
/// Already a member.
|
||||
AlreadyInPool,
|
||||
/// Index out of bounds.
|
||||
InvalidIndex,
|
||||
/// Index does not match requested account.
|
||||
WrongAccountIndex,
|
||||
}
|
||||
}
|
||||
|
||||
decl_module! {
|
||||
pub struct Module<T: Trait<I>, I: Instance=DefaultInstance>
|
||||
for enum Call
|
||||
where origin: T::Origin
|
||||
{
|
||||
type Error = Error<T, I>;
|
||||
|
||||
fn deposit_event() = default;
|
||||
|
||||
/// Every `Period` blocks the `Members` set is refreshed from the
|
||||
@@ -251,11 +265,10 @@ decl_module! {
|
||||
/// the index of the transactor in the `Pool`.
|
||||
pub fn submit_candidacy(origin) {
|
||||
let who = ensure_signed(origin)?;
|
||||
ensure!(!<CandidateExists<T, I>>::exists(&who), "already a member");
|
||||
ensure!(!<CandidateExists<T, I>>::exists(&who), Error::<T, I>::AlreadyInPool);
|
||||
|
||||
let deposit = T::CandidateDeposit::get();
|
||||
T::Currency::reserve(&who, deposit)
|
||||
.map_err(|_| "balance too low to submit candidacy")?;
|
||||
T::Currency::reserve(&who, deposit)?;
|
||||
|
||||
// can be inserted as last element in pool, since entities with
|
||||
// `None` are always sorted to the end.
|
||||
@@ -305,8 +318,7 @@ decl_module! {
|
||||
) {
|
||||
T::KickOrigin::try_origin(origin)
|
||||
.map(|_| ())
|
||||
.or_else(ensure_root)
|
||||
.map_err(|_| "bad origin")?;
|
||||
.or_else(ensure_root)?;
|
||||
|
||||
let who = T::Lookup::lookup(dest)?;
|
||||
|
||||
@@ -331,8 +343,7 @@ decl_module! {
|
||||
) {
|
||||
T::ScoreOrigin::try_origin(origin)
|
||||
.map(|_| ())
|
||||
.or_else(ensure_root)
|
||||
.map_err(|_| "bad origin")?;
|
||||
.or_else(ensure_root)?;
|
||||
|
||||
let who = T::Lookup::lookup(dest)?;
|
||||
|
||||
@@ -414,7 +425,7 @@ impl<T: Trait<I>, I: Instance> Module<T, I> {
|
||||
mut pool: PoolT<T, I>,
|
||||
remove: T::AccountId,
|
||||
index: u32
|
||||
) -> Result<(), &'static str> {
|
||||
) -> Result<(), Error<T, I>> {
|
||||
// all callers of this function in this module also check
|
||||
// the index for validity before calling this function.
|
||||
// nevertheless we check again here, to assert that there was
|
||||
@@ -444,11 +455,11 @@ impl<T: Trait<I>, I: Instance> Module<T, I> {
|
||||
pool: &PoolT<T, I>,
|
||||
who: &T::AccountId,
|
||||
index: u32
|
||||
) -> Result<(), &'static str> {
|
||||
ensure!(index < pool.len() as u32, "index out of bounds");
|
||||
) -> Result<(), Error<T, I>> {
|
||||
ensure!(index < pool.len() as u32, Error::<T, I>::InvalidIndex);
|
||||
|
||||
let (index_who, _index_score) = &pool[index as usize];
|
||||
ensure!(index_who == who, "index does not match requested account");
|
||||
ensure!(index_who == who, Error::<T, I>::WrongAccountIndex);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -20,15 +20,12 @@ use super::*;
|
||||
use mock::*;
|
||||
|
||||
use frame_support::{assert_ok, assert_noop};
|
||||
use sp_runtime::traits::OnInitialize;
|
||||
use sp_runtime::traits::{OnInitialize, BadOrigin};
|
||||
|
||||
type ScoredPool = Module<Test>;
|
||||
type System = frame_system::Module<Test>;
|
||||
type Balances = pallet_balances::Module<Test>;
|
||||
|
||||
const OOB_ERR: &str = "index out of bounds";
|
||||
const INDEX_ERR: &str = "index does not match requested account";
|
||||
|
||||
#[test]
|
||||
fn query_membership_works() {
|
||||
new_test_ext().execute_with(|| {
|
||||
@@ -44,11 +41,11 @@ fn submit_candidacy_must_not_work() {
|
||||
new_test_ext().execute_with(|| {
|
||||
assert_noop!(
|
||||
ScoredPool::submit_candidacy(Origin::signed(99)),
|
||||
"balance too low to submit candidacy"
|
||||
"not enough free funds"
|
||||
);
|
||||
assert_noop!(
|
||||
ScoredPool::submit_candidacy(Origin::signed(40)),
|
||||
"already a member"
|
||||
Error::<Test, _>::AlreadyInPool
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -111,7 +108,7 @@ fn kicking_works_only_for_authorized() {
|
||||
new_test_ext().execute_with(|| {
|
||||
let who = 40;
|
||||
let index = find_in_pool(who).expect("entity must be in pool") as u32;
|
||||
assert_noop!(ScoredPool::kick(Origin::signed(99), who, index), "bad origin");
|
||||
assert_noop!(ScoredPool::kick(Origin::signed(99), who, index), BadOrigin);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -203,7 +200,7 @@ fn withdraw_candidacy_must_only_work_for_members() {
|
||||
new_test_ext().execute_with(|| {
|
||||
let who = 77;
|
||||
let index = 0;
|
||||
assert_noop!( ScoredPool::withdraw_candidacy(Origin::signed(who), index), INDEX_ERR);
|
||||
assert_noop!( ScoredPool::withdraw_candidacy(Origin::signed(who), index), Error::<Test, _>::WrongAccountIndex);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -212,9 +209,9 @@ fn oob_index_should_abort() {
|
||||
new_test_ext().execute_with(|| {
|
||||
let who = 40;
|
||||
let oob_index = ScoredPool::pool().len() as u32;
|
||||
assert_noop!(ScoredPool::withdraw_candidacy(Origin::signed(who), oob_index), OOB_ERR);
|
||||
assert_noop!(ScoredPool::score(Origin::signed(ScoreOrigin::get()), who, oob_index, 99), OOB_ERR);
|
||||
assert_noop!(ScoredPool::kick(Origin::signed(KickOrigin::get()), who, oob_index), OOB_ERR);
|
||||
assert_noop!(ScoredPool::withdraw_candidacy(Origin::signed(who), oob_index), Error::<Test, _>::InvalidIndex);
|
||||
assert_noop!(ScoredPool::score(Origin::signed(ScoreOrigin::get()), who, oob_index, 99), Error::<Test, _>::InvalidIndex);
|
||||
assert_noop!(ScoredPool::kick(Origin::signed(KickOrigin::get()), who, oob_index), Error::<Test, _>::InvalidIndex);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -223,9 +220,9 @@ fn index_mismatches_should_abort() {
|
||||
new_test_ext().execute_with(|| {
|
||||
let who = 40;
|
||||
let index = 3;
|
||||
assert_noop!(ScoredPool::withdraw_candidacy(Origin::signed(who), index), INDEX_ERR);
|
||||
assert_noop!(ScoredPool::score(Origin::signed(ScoreOrigin::get()), who, index, 99), INDEX_ERR);
|
||||
assert_noop!(ScoredPool::kick(Origin::signed(KickOrigin::get()), who, index), INDEX_ERR);
|
||||
assert_noop!(ScoredPool::withdraw_candidacy(Origin::signed(who), index), Error::<Test, _>::WrongAccountIndex);
|
||||
assert_noop!(ScoredPool::score(Origin::signed(ScoreOrigin::get()), who, index, 99), Error::<Test, _>::WrongAccountIndex);
|
||||
assert_noop!(ScoredPool::kick(Origin::signed(KickOrigin::get()), who, index), Error::<Test, _>::WrongAccountIndex);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user