diff --git a/runtime/gdev/tests/balance_tests.rs b/runtime/gdev/tests/balance_tests.rs index de2ac25c859473ec5cdba1842c30ae23b700e934..85c3b0ae374626dbeaae4eeded7bc03e63f5f84d 100644 --- a/runtime/gdev/tests/balance_tests.rs +++ b/runtime/gdev/tests/balance_tests.rs @@ -19,9 +19,12 @@ mod common; use common::*; +use frame_support::traits::StoredMap; use frame_support::{assert_noop, assert_ok}; use gdev_runtime::*; +use sp_core::Encode; use sp_keyring::AccountKeyring; +use sp_runtime::MultiAddress; /// test currency transfer /// (does not take fees into account because it's only calls, not extrinsics) @@ -115,3 +118,46 @@ fn test_transfer_funds_unavailable() { ); }) } + +/// test balance transfer all with linked account not member +#[test] +fn test_transfer_all_linked_no_member() { + ExtBuilder::new(1, 3, 4) + .with_initial_balances(vec![(AccountKeyring::Alice.to_account_id(), 5_000)]) + .build() + .execute_with(|| { + run_to_block(1); + + let genesis_hash = System::block_hash(0); + let alice = AccountKeyring::Alice.to_account_id(); + let ferdie = AccountKeyring::Ferdie.to_account_id(); + let payload = (b"link", genesis_hash, 1u32, ferdie.clone()).encode(); + let signature = AccountKeyring::Ferdie.sign(&payload); + + assert_ok!(Balances::transfer_allow_death( + frame_system::RawOrigin::Signed(alice.clone()).into(), + MultiAddress::Id(ferdie.clone()), + 1_000 + )); + // Ferdie's account can be linked to Alice identity + assert_ok!(Identity::link_account( + frame_system::RawOrigin::Signed(alice).into(), + ferdie.clone(), + signature.into() + )); + assert_eq!( + frame_system::Pallet::<Runtime>::get(&ferdie).linked_idty, + Some(1) + ); + assert_ok!(Balances::transfer_all( + frame_system::RawOrigin::Signed(ferdie.clone()).into(), + AccountKeyring::Bob.to_account_id().into(), + false + ),); + assert_eq!(Balances::free_balance(ferdie.clone()), 0); + // During reaping the account is unlinked + assert!(frame_system::Pallet::<Runtime>::get(&ferdie) + .linked_idty + .is_none()); + }) +}