From 54ed0a6bf2de53cedbc1bb72e0253f4e2fecadd8 Mon Sep 17 00:00:00 2001
From: bgallois <benjamin@gallois.cc>
Date: Mon, 4 Mar 2024 15:20:30 +0100
Subject: [PATCH] add test empty linked account

---
 runtime/gdev/tests/balance_tests.rs | 46 +++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/runtime/gdev/tests/balance_tests.rs b/runtime/gdev/tests/balance_tests.rs
index de2ac25c8..85c3b0ae3 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());
+        })
+}
-- 
GitLab