mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 09:21: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
@@ -43,7 +43,7 @@ use sp_runtime::{
|
||||
traits::{StaticLookup, EnsureOrigin, Zero}
|
||||
};
|
||||
use frame_support::{
|
||||
decl_module, decl_event, decl_storage, ensure,
|
||||
decl_module, decl_event, decl_storage, ensure, decl_error,
|
||||
traits::{Currency, ReservableCurrency, OnUnbalanced, Get},
|
||||
weights::SimpleDispatchInfo,
|
||||
};
|
||||
@@ -97,9 +97,23 @@ decl_event!(
|
||||
}
|
||||
);
|
||||
|
||||
decl_error! {
|
||||
/// Error for the nicks module.
|
||||
pub enum Error for Module<T: Trait> {
|
||||
/// A name is too short.
|
||||
TooShort,
|
||||
/// A name is too long.
|
||||
TooLong,
|
||||
/// An account in't named.
|
||||
Unnamed,
|
||||
}
|
||||
}
|
||||
|
||||
decl_module! {
|
||||
// Simple declaration of the `Module` type. Lets the macro know what it's working on.
|
||||
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
|
||||
type Error = Error<T>;
|
||||
|
||||
fn deposit_event() = default;
|
||||
|
||||
/// Reservation fee.
|
||||
@@ -131,8 +145,8 @@ decl_module! {
|
||||
fn set_name(origin, name: Vec<u8>) {
|
||||
let sender = ensure_signed(origin)?;
|
||||
|
||||
ensure!(name.len() >= T::MinLength::get(), "Name too short");
|
||||
ensure!(name.len() <= T::MaxLength::get(), "Name too long");
|
||||
ensure!(name.len() >= T::MinLength::get(), Error::<T>::TooShort,);
|
||||
ensure!(name.len() <= T::MaxLength::get(), Error::<T>::TooLong);
|
||||
|
||||
let deposit = if let Some((_, deposit)) = <NameOf<T>>::get(&sender) {
|
||||
Self::deposit_event(RawEvent::NameSet(sender.clone()));
|
||||
@@ -160,7 +174,7 @@ decl_module! {
|
||||
fn clear_name(origin) {
|
||||
let sender = ensure_signed(origin)?;
|
||||
|
||||
let deposit = <NameOf<T>>::take(&sender).ok_or("Not named")?.1;
|
||||
let deposit = <NameOf<T>>::take(&sender).ok_or(Error::<T>::Unnamed)?.1;
|
||||
|
||||
let _ = T::Currency::unreserve(&sender, deposit.clone());
|
||||
|
||||
@@ -184,13 +198,12 @@ decl_module! {
|
||||
fn kill_name(origin, target: <T::Lookup as StaticLookup>::Source) {
|
||||
T::ForceOrigin::try_origin(origin)
|
||||
.map(|_| ())
|
||||
.or_else(ensure_root)
|
||||
.map_err(|_| "bad origin")?;
|
||||
.or_else(ensure_root)?;
|
||||
|
||||
// Figure out who we're meant to be clearing.
|
||||
let target = T::Lookup::lookup(target)?;
|
||||
// Grab their deposit (and check that they have one).
|
||||
let deposit = <NameOf<T>>::take(&target).ok_or("Not named")?.1;
|
||||
let deposit = <NameOf<T>>::take(&target).ok_or(Error::<T>::Unnamed)?.1;
|
||||
// Slash their deposit from them.
|
||||
T::Slashed::on_unbalanced(T::Currency::slash_reserved(&target, deposit.clone()).0);
|
||||
|
||||
@@ -213,8 +226,7 @@ decl_module! {
|
||||
fn force_name(origin, target: <T::Lookup as StaticLookup>::Source, name: Vec<u8>) {
|
||||
T::ForceOrigin::try_origin(origin)
|
||||
.map(|_| ())
|
||||
.or_else(ensure_root)
|
||||
.map_err(|_| "bad origin")?;
|
||||
.or_else(ensure_root)?;
|
||||
|
||||
let target = T::Lookup::lookup(target)?;
|
||||
let deposit = <NameOf<T>>::get(&target).map(|x| x.1).unwrap_or_else(Zero::zero);
|
||||
@@ -235,7 +247,7 @@ mod tests {
|
||||
// The testing primitives are very useful for avoiding having to work with signatures
|
||||
// or public keys. `u64` is used as the `AccountId` and no `Signature`s are required.
|
||||
use sp_runtime::{
|
||||
Perbill, testing::Header, traits::{BlakeTwo256, IdentityLookup},
|
||||
Perbill, testing::Header, traits::{BlakeTwo256, IdentityLookup, BadOrigin},
|
||||
};
|
||||
|
||||
impl_outer_origin! {
|
||||
@@ -336,7 +348,7 @@ mod tests {
|
||||
new_test_ext().execute_with(|| {
|
||||
assert_noop!(
|
||||
Nicks::set_name(Origin::signed(2), b"Dr. David Brubeck, III".to_vec()),
|
||||
"Name too long"
|
||||
Error::<Test>::TooLong,
|
||||
);
|
||||
|
||||
assert_ok!(Nicks::set_name(Origin::signed(2), b"Dave".to_vec()));
|
||||
@@ -369,18 +381,18 @@ mod tests {
|
||||
#[test]
|
||||
fn error_catching_should_work() {
|
||||
new_test_ext().execute_with(|| {
|
||||
assert_noop!(Nicks::clear_name(Origin::signed(1)), "Not named");
|
||||
assert_noop!(Nicks::clear_name(Origin::signed(1)), Error::<Test>::Unnamed);
|
||||
|
||||
assert_noop!(Nicks::set_name(Origin::signed(3), b"Dave".to_vec()), "not enough free funds");
|
||||
|
||||
assert_noop!(Nicks::set_name(Origin::signed(1), b"Ga".to_vec()), "Name too short");
|
||||
assert_noop!(Nicks::set_name(Origin::signed(1), b"Ga".to_vec()), Error::<Test>::TooShort);
|
||||
assert_noop!(
|
||||
Nicks::set_name(Origin::signed(1), b"Gavin James Wood, Esquire".to_vec()),
|
||||
"Name too long"
|
||||
Error::<Test>::TooLong
|
||||
);
|
||||
assert_ok!(Nicks::set_name(Origin::signed(1), b"Dave".to_vec()));
|
||||
assert_noop!(Nicks::kill_name(Origin::signed(2), 1), "bad origin");
|
||||
assert_noop!(Nicks::force_name(Origin::signed(2), 1, b"Whatever".to_vec()), "bad origin");
|
||||
assert_noop!(Nicks::kill_name(Origin::signed(2), 1), BadOrigin);
|
||||
assert_noop!(Nicks::force_name(Origin::signed(2), 1, b"Whatever".to_vec()), BadOrigin);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user