Pallet assets improvements (#13543)

This commit is contained in:
Dino Pačandi
2023-03-13 16:44:47 +01:00
committed by GitHub
parent 2009821cde
commit efd5d98e10
4 changed files with 85 additions and 18 deletions
+38 -8
View File
@@ -1261,28 +1261,58 @@ fn querying_roles_should_work() {
#[test]
fn normal_asset_create_and_destroy_callbacks_should_work() {
new_test_ext().execute_with(|| {
assert!(storage::get(b"asset_created").is_none());
assert!(storage::get(b"asset_destroyed").is_none());
assert!(storage::get(AssetsCallbackHandle::CREATED.as_bytes()).is_none());
assert!(storage::get(AssetsCallbackHandle::DESTROYED.as_bytes()).is_none());
Balances::make_free_balance_be(&1, 100);
assert_ok!(Assets::create(RuntimeOrigin::signed(1), 0, 1, 1));
assert!(storage::get(b"asset_created").is_some());
assert!(storage::get(b"asset_destroyed").is_none());
assert!(storage::get(AssetsCallbackHandle::CREATED.as_bytes()).is_some());
assert!(storage::get(AssetsCallbackHandle::DESTROYED.as_bytes()).is_none());
assert_ok!(Assets::start_destroy(RuntimeOrigin::signed(1), 0));
assert_ok!(Assets::destroy_accounts(RuntimeOrigin::signed(1), 0));
assert_ok!(Assets::destroy_approvals(RuntimeOrigin::signed(1), 0));
// Callback still hasn't been invoked
assert!(storage::get(AssetsCallbackHandle::DESTROYED.as_bytes()).is_none());
assert_ok!(Assets::finish_destroy(RuntimeOrigin::signed(1), 0));
assert!(storage::get(b"asset_destroyed").is_some());
assert!(storage::get(AssetsCallbackHandle::DESTROYED.as_bytes()).is_some());
});
}
#[test]
fn root_asset_create_should_work() {
new_test_ext().execute_with(|| {
assert!(storage::get(b"asset_created").is_none());
assert!(storage::get(AssetsCallbackHandle::CREATED.as_bytes()).is_none());
assert_ok!(Assets::force_create(RuntimeOrigin::root(), 0, 1, true, 1));
assert!(storage::get(b"asset_created").is_some());
assert!(storage::get(b"asset_destroyed").is_none());
assert!(storage::get(AssetsCallbackHandle::CREATED.as_bytes()).is_some());
assert!(storage::get(AssetsCallbackHandle::DESTROYED.as_bytes()).is_none());
});
}
#[test]
fn asset_create_and_destroy_is_reverted_if_callback_fails() {
new_test_ext().execute_with(|| {
// Asset creation fails due to callback failure
AssetsCallbackHandle::set_return_error();
Balances::make_free_balance_be(&1, 100);
assert_noop!(
Assets::create(RuntimeOrigin::signed(1), 0, 1, 1),
Error::<Test>::CallbackFailed
);
// Callback succeeds, so asset creation succeeds
AssetsCallbackHandle::set_return_ok();
assert_ok!(Assets::create(RuntimeOrigin::signed(1), 0, 1, 1));
// Asset destroy should fail due to callback failure
AssetsCallbackHandle::set_return_error();
assert_ok!(Assets::start_destroy(RuntimeOrigin::signed(1), 0));
assert_ok!(Assets::destroy_accounts(RuntimeOrigin::signed(1), 0));
assert_ok!(Assets::destroy_approvals(RuntimeOrigin::signed(1), 0));
assert_noop!(
Assets::finish_destroy(RuntimeOrigin::signed(1), 0),
Error::<Test>::CallbackFailed
);
});
}