git.delta.rocks / unique-network / refs/commits / cb6e27c9e5e2

difftreelog

feat add testUtils batchAll

Daniel Shiposha2022-10-28parent: #ea5b83e.patch.diff
in: master

4 files changed

modifiedCargo.lockdiffbeforeafterboth
6729 "pallet-unique-scheduler-v2",6729 "pallet-unique-scheduler-v2",
6730 "parity-scale-codec 3.2.1",6730 "parity-scale-codec 3.2.1",
6731 "scale-info",6731 "scale-info",
6732 "sp-std",
6732]6733]
67336734
6734[[package]]6735[[package]]
modifiedruntime/common/config/test_pallets.rsdiffbeforeafterboth
14// You should have received a copy of the GNU General Public License14// You should have received a copy of the GNU General Public License
15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
1616
17use crate::{Runtime, RuntimeEvent};17use crate::{Runtime, RuntimeEvent, RuntimeCall};
1818
19impl pallet_test_utils::Config for Runtime {19impl pallet_test_utils::Config for Runtime {
20 type RuntimeEvent = RuntimeEvent;20 type RuntimeEvent = RuntimeEvent;
21 type RuntimeCall = RuntimeCall;
21}22}
2223
modifiedtest-pallets/utils/Cargo.tomldiffbeforeafterboth
12frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }12frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
13# pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }13# pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }
14pallet-unique-scheduler-v2 = { path = '../../pallets/scheduler-v2', default-features = false }14pallet-unique-scheduler-v2 = { path = '../../pallets/scheduler-v2', default-features = false }
15sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
1516
16[features]17[features]
17default = ["std"]18default = ["std"]
21 "frame-support/std",22 "frame-support/std",
22 "frame-system/std",23 "frame-system/std",
23 "pallet-unique-scheduler-v2/std",24 "pallet-unique-scheduler-v2/std",
25 "sp-std/std",
24]26]
25try-runtime = ["frame-support/try-runtime", "pallet-unique-scheduler/try-runtime"]27try-runtime = ["frame-support/try-runtime", "pallet-unique-scheduler/try-runtime"]
2628
modifiedtest-pallets/utils/src/lib.rsdiffbeforeafterboth
2222
23#[frame_support::pallet]23#[frame_support::pallet]
24pub mod pallet {24pub mod pallet {
25 use frame_support::pallet_prelude::*;25 use frame_support::{pallet_prelude::*, dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}, traits::{UnfilteredDispatchable, IsSubType, OriginTrait}};
26 use frame_system::pallet_prelude::*;26 use frame_system::pallet_prelude::*;
27 use sp_std::vec::Vec;
27 use pallet_unique_scheduler_v2::{TaskName, Pallet as SchedulerPallet};28 use pallet_unique_scheduler_v2::{TaskName, Pallet as SchedulerPallet};
2829
29 #[pallet::config]30 #[pallet::config]
30 pub trait Config: frame_system::Config + pallet_unique_scheduler_v2::Config {31 pub trait Config: frame_system::Config + pallet_unique_scheduler_v2::Config {
31 type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;32 type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
33
34 /// The overarching call type.
35 type RuntimeCall: Parameter
36 + Dispatchable<RuntimeOrigin = <Self as frame_system::Config>::RuntimeOrigin, PostInfo = PostDispatchInfo>
37 + GetDispatchInfo
38 + From<frame_system::Call<Self>>
39 + UnfilteredDispatchable<RuntimeOrigin = <Self as frame_system::Config>::RuntimeOrigin>
40 + IsSubType<Call<Self>>
41 + IsType<<Self as frame_system::Config>::RuntimeCall>;
32 }42 }
3343
34 #[pallet::event]44 #[pallet::event]
35 #[pallet::generate_deposit(pub(super) fn deposit_event)]45 #[pallet::generate_deposit(pub(super) fn deposit_event)]
36 pub enum Event<T: Config> {46 pub enum Event<T: Config> {
37 ValueIsSet,47 ValueIsSet,
38 ShouldRollback,48 ShouldRollback,
49 BatchCompleted,
39 }50 }
4051
41 #[pallet::pallet]52 #[pallet::pallet]
113 Ok(())124 Ok(())
114 }125 }
126
127 #[pallet::weight(10_000)]
128 pub fn batch_all(
129 origin: OriginFor<T>,
130 calls: Vec<<T as Config>::RuntimeCall>,
131 ) -> DispatchResultWithPostInfo {
132 Self::ensure_origin_and_enabled(origin.clone())?;
133
134 let is_root = ensure_root(origin.clone()).is_ok();
135
136 for call in calls {
137 if is_root {
138 call.dispatch_bypass_filter(origin.clone())?;
139 } else {
140 let mut filtered_origin = origin.clone();
141 // Don't allow users to nest `batch_all` calls.
142 filtered_origin.add_filter(
143 move |c: &<T as frame_system::Config>::RuntimeCall| {
144 let c = <T as Config>::RuntimeCall::from_ref(c);
145 !matches!(c.is_sub_type(), Some(Call::batch_all { .. }))
146 },
147 );
148 call.dispatch(filtered_origin)?;
149 }
150 }
151
152 Self::deposit_event(Event::BatchCompleted);
153 Ok(None::<Weight>.into())
154 }
115 }155 }
116}156}
117157