From 3283b0fa0a14faff6c13812a37b4aa9ee33e5248 Mon Sep 17 00:00:00 2001 From: cgeek <cem.moreau@gmail.com> Date: Tue, 19 Dec 2023 13:07:37 +0100 Subject: [PATCH] feat(smith-members): check IsWoTMember --- pallets/smith-members/src/lib.rs | 7 +++++++ pallets/smith-members/src/mock.rs | 2 +- pallets/smith-members/src/tests.rs | 22 ++++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/pallets/smith-members/src/lib.rs b/pallets/smith-members/src/lib.rs index 68221c0cf..90882404d 100644 --- a/pallets/smith-members/src/lib.rs +++ b/pallets/smith-members/src/lib.rs @@ -33,6 +33,7 @@ use frame_support::{ensure, RuntimeDebug}; use frame_system::ensure_signed; use frame_system::pallet_prelude::OriginFor; use sp_runtime::traits::AtLeast32BitUnsigned; +use sp_runtime::traits::IsMember; use sp_std::fmt::Debug; use sp_std::prelude::*; @@ -235,6 +236,8 @@ pub mod pallet { InvitationAlreadyAccepted, /// Invitation of an already known smith is forbidden except if it has been excluded InvitationOfNonExcluded, + /// Invitation of a non-member (of the WoT) is forbidden + InvitationOfNonMember, /// Certification cannot be made on someone who has not accepted an invitation CertificationMustBeAgreed, /// Certification cannot be made on excluded @@ -310,6 +313,10 @@ impl<T: Config> Pallet<T> { Error::<T>::InvitationOfNonExcluded ); } + ensure!( + T::IsWoTMember::is_member(&receiver), + Error::<T>::InvitationOfNonMember + ); Ok(().into()) } diff --git a/pallets/smith-members/src/mock.rs b/pallets/smith-members/src/mock.rs index 09faf0cda..c8f700312 100644 --- a/pallets/smith-members/src/mock.rs +++ b/pallets/smith-members/src/mock.rs @@ -80,7 +80,7 @@ impl frame_system::Config for Runtime { pub struct EveryoneExceptIdZero; impl IsMember<u64> for EveryoneExceptIdZero { fn is_member(member_id: &u64) -> bool { - member_id != &0 + member_id != &0 && member_id != &10 } } diff --git a/pallets/smith-members/src/tests.rs b/pallets/smith-members/src/tests.rs index 0d8eaabd1..caed26b8c 100644 --- a/pallets/smith-members/src/tests.rs +++ b/pallets/smith-members/src/tests.rs @@ -464,3 +464,25 @@ fn certifying_on_different_status() { ); }); } + +#[test] +fn invitation_on_non_wot_member() { + new_test_ext(GenesisConfig { + certs_by_receiver: btreemap![ + 1 => vec![2, 3, 4], + 2 => vec![3, 4], + 3 => vec![1, 2], + 4 => vec![], + ], + }) + .execute_with(|| { + // State before + assert_eq!(Smiths::<Runtime>::get(10), None); + + // After invitation + assert_err!( + Pallet::<Runtime>::invite_smith(RuntimeOrigin::signed(1), 10), + Error::<Runtime>::InvitationOfNonMember + ); + }); +} -- GitLab