Newer
Older
//! Unit tests for the gradually-update module.
#![cfg(test)]
use super::*;
use frame_support::{assert_noop, assert_ok, traits::OnInitialize};
use mock::{BalancesCall, Call, ExtBuilder, Origin, Runtime, ScheduleUpdateModule, System, TestEvent};
#[test]
fn schedule_dispatch_should_work() {
ExtBuilder::default().build().execute_with(|| {
// NormalDispatches
let call = Call::Balances(BalancesCall::transfer(2, 11));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::signed(1),
DelayedDispatchTime::At(2)
));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatch(2, 0));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
// OperationalDispatches
let call = Call::Balances(BalancesCall::set_balance(1, 10, 11));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::ROOT,
DelayedDispatchTime::After(3)
));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatch(4, 1));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
});
}
#[test]
fn schedule_dispatch_should_fail() {
ExtBuilder::default().build().execute_with(|| {
let call = Call::Balances(BalancesCall::transfer(2, 11));
assert_noop!(
ScheduleUpdateModule::schedule_dispatch(Origin::signed(1), Box::new(call), DelayedDispatchTime::At(0)),
Error::<Runtime>::InvalidDelayedDispatchTime
);
});
}
#[test]
fn cancel_deplayed_dispatch_should_work() {
ExtBuilder::default().build().execute_with(|| {
// NormalDispatches
let call = Call::Balances(BalancesCall::transfer(2, 11));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::signed(1),
DelayedDispatchTime::At(2)
));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatch(2, 0));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
assert_ok!(ScheduleUpdateModule::cancel_deplayed_dispatch(Origin::signed(1), 2, 0));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::CancelDeplayedDispatch(0));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
// root cancel NormalDispatches
let call = Call::Balances(BalancesCall::transfer(2, 12));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::signed(1),
DelayedDispatchTime::After(3)
));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatch(4, 1));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
assert_ok!(ScheduleUpdateModule::cancel_deplayed_dispatch(Origin::ROOT, 4, 1));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::CancelDeplayedDispatch(1));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
// OperationalDispatches
let call = Call::Balances(BalancesCall::set_balance(2, 10, 13));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::ROOT,
DelayedDispatchTime::At(5)
));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatch(5, 2));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
assert_ok!(ScheduleUpdateModule::cancel_deplayed_dispatch(Origin::ROOT, 5, 2));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::CancelDeplayedDispatch(2));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
});
}
#[test]
fn cancel_deplayed_dispatch_should_fail() {
ExtBuilder::default().build().execute_with(|| {
assert_noop!(
ScheduleUpdateModule::cancel_deplayed_dispatch(Origin::signed(1), 2, 0),
Error::<Runtime>::DispatchNotExisted
);
// NormalDispatches
let call = Call::Balances(BalancesCall::transfer(2, 11));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::signed(1),
DelayedDispatchTime::At(2)
));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatch(2, 0));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
assert_noop!(
ScheduleUpdateModule::cancel_deplayed_dispatch(Origin::signed(2), 2, 0),
Error::<Runtime>::NoPermission
);
// OperationalDispatches
let call = Call::Balances(BalancesCall::set_balance(2, 10, 13));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::ROOT,
DelayedDispatchTime::At(5)
));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatch(5, 1));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
assert_noop!(
ScheduleUpdateModule::cancel_deplayed_dispatch(Origin::signed(2), 5, 1),
Error::<Runtime>::NoPermission
);
});
}
#[test]
fn on_initialize_should_work() {
ExtBuilder::default().build().execute_with(|| {
// NormalDispatches
let call = Call::Balances(BalancesCall::transfer(2, 11));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::signed(1),
DelayedDispatchTime::At(2)
));
let call = Call::Balances(BalancesCall::transfer(2, 12));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::signed(1),
ScheduleUpdateModule::on_initialize(2);
println!("{:?}", System::events());
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatchSuccess(2, 0));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
ScheduleUpdateModule::on_initialize(3);
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatchSuccess(3, 1));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
// OperationalDispatches
let call = Call::Balances(BalancesCall::set_balance(3, 10, 11));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::ROOT,
DelayedDispatchTime::After(10)
));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatch(11, 2));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
let call = Call::Balances(BalancesCall::set_balance(3, 20, 21));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::ROOT,
DelayedDispatchTime::After(12)
));
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatch(13, 3));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
ScheduleUpdateModule::on_initialize(11);
println!("{:?}", System::events());
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatchSuccess(11, 2));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
ScheduleUpdateModule::on_initialize(13);
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatchSuccess(13, 3));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
});
}
#[test]
fn on_initialize_should_fail() {
ExtBuilder::default().build().execute_with(|| {
// NormalDispatches balance not enough
let call = Call::Balances(BalancesCall::transfer(2, 110));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::signed(1),
ScheduleUpdateModule::on_initialize(2);
println!("{:?}", System::events());
//TODO hold the error
let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatchFail(
0,
DispatchError::Module {
index: 0,
error: 3,
message: None,
},
));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
// OperationalDispatches not root
let call = Call::Balances(BalancesCall::set_balance(3, 10, 11));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::signed(1),
ScheduleUpdateModule::on_initialize(11);
println!("{:?}", System::events());
let schedule_dispatch_event =
TestEvent::schedule_update(RawEvent::ScheduleDispatchFail(1, DispatchError::BadOrigin));
assert!(System::events()
.iter()
.any(|record| record.event == schedule_dispatch_event));
});
}
#[test]
fn on_initialize_weight_exceed() {
ExtBuilder::default().build().execute_with(|| {
// NormalDispatches
let call = Call::Balances(BalancesCall::transfer(2, 11));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::signed(1),
DelayedDispatchTime::At(2)
));
let call = Call::Balances(BalancesCall::transfer(2, 12));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::signed(1),
DelayedDispatchTime::At(2)
));
let call = Call::Balances(BalancesCall::transfer(2, 13));
assert_ok!(ScheduleUpdateModule::schedule_dispatch(
Origin::signed(1),
ScheduleUpdateModule::on_initialize(2);
println!("{:?}", System::events());
// TODO on_initialize should be sorted
//let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatchSuccess(0, 2));
//assert!(System::events().iter().any(|record| record.event == schedule_dispatch_event));
//let schedule_dispatch_event = TestEvent::schedule_update(RawEvent::ScheduleDispatchSuccess(2, 2));
//assert!(System::events().iter().any(|record| record.event == schedule_dispatch_event));
ScheduleUpdateModule::on_initialize(3);