mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 18:07:58 +00:00
Test pallet owner calls using macro
Define macro that generates tests for set_owner() and set_operating_mode() in order to avoid duplicate code. Signed-off-by: Serban Iorga <serban@parity.io>
This commit is contained in:
committed by
Bastian Köcher
parent
6b67d6b262
commit
ec76490ddb
@@ -210,3 +210,92 @@ pub fn test_header<H: HeaderT>(number: H::Number) -> H {
|
||||
pub fn header_id<H: HeaderT>(index: u8) -> (H::Hash, H::Number) {
|
||||
(test_header::<H>(index.into()).hash(), index.into())
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
/// Adds methods for testing the `set_owner()` and `set_operating_mode()` for a pallet.
|
||||
/// Some values are hardcoded like:
|
||||
/// - `run_test()`
|
||||
/// - `Pallet::<TestRuntime>`
|
||||
/// - `PalletOwner::<TestRuntime>`
|
||||
/// - `PalletOperatingMode::<TestRuntime>`
|
||||
/// While this is not ideal, all the pallets use the same names, so it works for the moment.
|
||||
/// We can revisit this in the future if anything changes.
|
||||
macro_rules! generate_owned_bridge_module_tests {
|
||||
($normal_operating_mode: expr, $halted_operating_mode: expr) => {
|
||||
#[test]
|
||||
fn test_set_owner() {
|
||||
run_test(|| {
|
||||
PalletOwner::<TestRuntime>::put(1);
|
||||
|
||||
// The root should be able to change the owner.
|
||||
assert_ok!(Pallet::<TestRuntime>::set_owner(Origin::root(), Some(2)));
|
||||
assert_eq!(PalletOwner::<TestRuntime>::get(), Some(2));
|
||||
|
||||
// The owner should be able to change the owner.
|
||||
assert_ok!(Pallet::<TestRuntime>::set_owner(Origin::signed(2), Some(3)));
|
||||
assert_eq!(PalletOwner::<TestRuntime>::get(), Some(3));
|
||||
|
||||
// Other users shouldn't be able to change the owner.
|
||||
assert_noop!(
|
||||
Pallet::<TestRuntime>::set_owner(Origin::signed(1), Some(4)),
|
||||
DispatchError::BadOrigin
|
||||
);
|
||||
assert_eq!(PalletOwner::<TestRuntime>::get(), Some(3));
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_set_operating_mode() {
|
||||
run_test(|| {
|
||||
PalletOwner::<TestRuntime>::put(1);
|
||||
PalletOperatingMode::<TestRuntime>::put($normal_operating_mode);
|
||||
|
||||
// The root should be able to halt the pallet.
|
||||
assert_ok!(Pallet::<TestRuntime>::set_operating_mode(
|
||||
Origin::root(),
|
||||
$halted_operating_mode
|
||||
));
|
||||
assert_eq!(PalletOperatingMode::<TestRuntime>::get(), $halted_operating_mode);
|
||||
// The root should be able to resume the pallet.
|
||||
assert_ok!(Pallet::<TestRuntime>::set_operating_mode(
|
||||
Origin::root(),
|
||||
$normal_operating_mode
|
||||
));
|
||||
assert_eq!(PalletOperatingMode::<TestRuntime>::get(), $normal_operating_mode);
|
||||
|
||||
// The owner should be able to halt the pallet.
|
||||
assert_ok!(Pallet::<TestRuntime>::set_operating_mode(
|
||||
Origin::signed(1),
|
||||
$halted_operating_mode
|
||||
));
|
||||
assert_eq!(PalletOperatingMode::<TestRuntime>::get(), $halted_operating_mode);
|
||||
// The owner should be able to resume the pallet.
|
||||
assert_ok!(Pallet::<TestRuntime>::set_operating_mode(
|
||||
Origin::signed(1),
|
||||
$normal_operating_mode
|
||||
));
|
||||
assert_eq!(PalletOperatingMode::<TestRuntime>::get(), $normal_operating_mode);
|
||||
|
||||
// Other users shouldn't be able to halt the pallet.
|
||||
assert_noop!(
|
||||
Pallet::<TestRuntime>::set_operating_mode(
|
||||
Origin::signed(2),
|
||||
$halted_operating_mode
|
||||
),
|
||||
DispatchError::BadOrigin
|
||||
);
|
||||
assert_eq!(PalletOperatingMode::<TestRuntime>::get(), $normal_operating_mode);
|
||||
// Other users shouldn't be able to resume the pallet.
|
||||
PalletOperatingMode::<TestRuntime>::put($halted_operating_mode);
|
||||
assert_noop!(
|
||||
Pallet::<TestRuntime>::set_operating_mode(
|
||||
Origin::signed(2),
|
||||
$normal_operating_mode
|
||||
),
|
||||
DispatchError::BadOrigin
|
||||
);
|
||||
assert_eq!(PalletOperatingMode::<TestRuntime>::get(), $halted_operating_mode);
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user