frame_support_test/
lib.rs1#![warn(missing_docs)]
22#![deny(warnings)]
23
24pub use frame_support::dispatch::RawOrigin;
25use frame_system::pallet_prelude::BlockNumberFor;
26
27pub use self::pallet::*;
28
29#[frame_support::pallet(dev_mode)]
30pub mod pallet {
31 use super::*;
32 use crate::{self as frame_system, pallet_prelude::*};
33 use frame_support::pallet_prelude::*;
34
35 #[pallet::pallet]
36 pub struct Pallet<T>(_);
37
38 #[pallet::config(frame_system_config)]
40 #[pallet::disable_frame_system_supertrait_check]
41 pub trait Config: 'static + Eq + Clone {
42 type BlockNumber: Parameter + Member + Default + MaybeSerializeDeserialize + MaxEncodedLen;
44 type AccountId: Parameter + Member + MaxEncodedLen;
46 type BaseCallFilter: frame_support::traits::Contains<Self::RuntimeCall>;
48 type RuntimeOrigin: Into<Result<RawOrigin<Self::AccountId>, Self::RuntimeOrigin>>
50 + From<RawOrigin<Self::AccountId>>;
51 type RuntimeCall;
53 type RuntimeTask;
55 type RuntimeEvent: Parameter
57 + Member
58 + IsType<<Self as frame_system::Config>::RuntimeEvent>
59 + From<Event<Self>>;
60 type PalletInfo: frame_support::traits::PalletInfo;
62 type DbWeight: Get<frame_support::weights::RuntimeDbWeight>;
64 }
65
66 #[pallet::call]
67 impl<T: Config> Pallet<T> {
68 pub fn noop(_origin: OriginFor<T>) -> DispatchResult {
70 Ok(())
71 }
72 }
73
74 impl<T: Config> Pallet<T> {
75 pub fn deposit_event(_event: impl Into<T::RuntimeEvent>) {}
77 }
78
79 #[pallet::origin]
81 pub type Origin<T> = RawOrigin<<T as Config>::AccountId>;
82
83 #[pallet::error]
85 pub enum Error<T> {
86 TestError,
88 AnotherError,
91 CallFiltered,
93 }
94
95 #[pallet::event]
97 pub enum Event<T: Config> {
98 ExtrinsicSuccess,
100 ExtrinsicFailed,
102 Ignore(<T as Config>::BlockNumber),
104 }
105}
106
107pub fn ensure_root<OuterOrigin, AccountId>(o: OuterOrigin) -> Result<(), &'static str>
109where
110 OuterOrigin: Into<Result<RawOrigin<AccountId>, OuterOrigin>>,
111{
112 o.into().map(|_| ()).map_err(|_| "bad origin: expected to be a root origin")
113}
114
115pub mod pallet_prelude {
119 pub use crate::ensure_root;
120
121 pub type OriginFor<T> = <T as crate::Config>::RuntimeOrigin;
123
124 pub type BlockNumberFor<T> = <T as super::Config>::BlockNumber;
126}
127
128pub struct TestRandomness<T>(core::marker::PhantomData<T>);
131
132impl<Output: codec::Decode + Default, T>
133 frame_support::traits::Randomness<Output, BlockNumberFor<T>> for TestRandomness<T>
134where
135 T: frame_system::Config,
136{
137 fn random(subject: &[u8]) -> (Output, BlockNumberFor<T>) {
138 use sp_runtime::traits::TrailingZeroInput;
139
140 (
141 Output::decode(&mut TrailingZeroInput::new(subject)).unwrap_or_default(),
142 frame_system::Pallet::<T>::block_number(),
143 )
144 }
145}