From 8883b586b16ec50d397e0abe2ea9b82d0fc8a3c2 Mon Sep 17 00:00:00 2001
From: bgallois <benjamin@gallois.cc>
Date: Thu, 6 Feb 2025 15:39:38 +0100
Subject: [PATCH] test refund by status
---
runtime/gdev/tests/xt_tests.rs | 97 ++++++++++++++++++++++++++++++++++
1 file changed, 97 insertions(+)
diff --git a/runtime/gdev/tests/xt_tests.rs b/runtime/gdev/tests/xt_tests.rs
index 6fcc2060c..efac8a18f 100644
--- a/runtime/gdev/tests/xt_tests.rs
+++ b/runtime/gdev/tests/xt_tests.rs
@@ -207,3 +207,100 @@ fn test_refund_reaped_linked_account() {
assert!(pallet_quota::RefundQueue::<Runtime>::get().is_empty());
})
}
+
+/// test no refund on_idle when account is not a member
+#[test]
+fn test_no_member_no_refund() {
+ ExtBuilder::new(1, 3, 4)
+ .with_initial_balances(vec![
+ (AccountKeyring::Alice.to_account_id(), 10_000),
+ (AccountKeyring::Bob.to_account_id(), 10_000),
+ ])
+ .build()
+ .execute_with(|| {
+ // Revoked identities are not eligible for a refund
+ let revocation_payload = pallet_identity::RevocationPayload {
+ idty_index: 2u32,
+ genesis_hash: System::block_hash(0),
+ };
+ let signature = AccountKeyring::Bob.sign(
+ &(
+ pallet_identity::REVOCATION_PAYLOAD_PREFIX,
+ revocation_payload,
+ )
+ .encode(),
+ );
+ assert_ok!(Identity::revoke_identity(
+ RuntimeOrigin::signed(AccountKeyring::Bob.to_account_id()),
+ 2,
+ AccountKeyring::Bob.to_account_id(),
+ signature.into()
+ ));
+ assert_eq!(
+ pallet_identity::Identities::<Runtime>::get(&2)
+ .unwrap()
+ .status,
+ pallet_identity::IdtyStatus::Revoked
+ );
+ let call = RuntimeCall::Balances(BalancesCall::transfer_allow_death {
+ dest: AccountKeyring::Ferdie.to_account_id().into(),
+ value: 500,
+ });
+ let xt = get_unchecked_extrinsic(call, 4u64, 8u64, AccountKeyring::Bob, 0u64, 0);
+ assert_ok!(Executive::apply_extrinsic(xt));
+ assert!(pallet_quota::RefundQueue::<Runtime>::get().is_empty());
+
+ // Unconfirmed identities are not eligible for a refund
+ assert_ok!(Identity::create_identity(
+ RuntimeOrigin::signed(AccountKeyring::Alice.to_account_id()),
+ AccountKeyring::Ferdie.to_account_id(),
+ ));
+ assert_eq!(
+ pallet_identity::Identities::<Runtime>::get(&5)
+ .unwrap()
+ .status,
+ pallet_identity::IdtyStatus::Unconfirmed
+ );
+ let call = RuntimeCall::Balances(BalancesCall::transfer_allow_death {
+ dest: AccountKeyring::Alice.to_account_id().into(),
+ value: 500,
+ });
+ let xt =
+ get_unchecked_extrinsic(call.clone(), 4u64, 8u64, AccountKeyring::Ferdie, 0u64, 0);
+ assert_ok!(Executive::apply_extrinsic(xt));
+ assert!(pallet_quota::RefundQueue::<Runtime>::get().is_empty());
+
+ // Unvalidated identities are not eligible for a refund
+ assert_ok!(Identity::confirm_identity(
+ RuntimeOrigin::signed(AccountKeyring::Ferdie.to_account_id()),
+ "ferdie".into(),
+ ));
+ assert_eq!(
+ pallet_identity::Identities::<Runtime>::get(&5)
+ .unwrap()
+ .status,
+ pallet_identity::IdtyStatus::Unvalidated
+ );
+ let xt =
+ get_unchecked_extrinsic(call.clone(), 4u64, 8u64, AccountKeyring::Ferdie, 0u64, 1);
+ assert_ok!(Executive::apply_extrinsic(xt));
+ assert!(pallet_quota::RefundQueue::<Runtime>::get().is_empty());
+
+ // NotMember identities are not eligible for a refund
+ pallet_identity::Pallet::<Runtime>::membership_removed(1);
+ assert_eq!(
+ pallet_identity::Identities::<Runtime>::get(&1)
+ .unwrap()
+ .status,
+ pallet_identity::IdtyStatus::NotMember
+ );
+ let call = RuntimeCall::Balances(BalancesCall::transfer_allow_death {
+ dest: AccountKeyring::Bob.to_account_id().into(),
+ value: 500,
+ });
+ let xt =
+ get_unchecked_extrinsic(call.clone(), 4u64, 8u64, AccountKeyring::Alice, 0u64, 0);
+ assert_ok!(Executive::apply_extrinsic(xt));
+ assert!(pallet_quota::RefundQueue::<Runtime>::get().is_empty());
+ })
+}
--
GitLab