diff --git a/runtime/gdev/tests/integration_tests.rs b/runtime/gdev/tests/integration_tests.rs index 62d0c5288f5c0708c61398e0655161cd94a6b282..aa5073139354aa1a80339bfd8a78adacd7b7b835 100644 --- a/runtime/gdev/tests/integration_tests.rs +++ b/runtime/gdev/tests/integration_tests.rs @@ -23,6 +23,7 @@ use frame_support::traits::{Get, PalletInfo, StorageInfo, StorageInfoTrait}; use frame_support::{assert_err, assert_noop, assert_ok}; use frame_support::{StorageHasher, Twox128}; use gdev_runtime::*; +use pallet_identity::{RevocationPayload, REVOCATION_PAYLOAD_PREFIX}; use pallet_membership::MembershipRemovalReason; use pallet_smith_members::{SmithMeta, SmithStatus}; use sp_core::Encode; @@ -1335,6 +1336,63 @@ fn test_change_owner_key() { }) } +/// members of the smith subwot can revoke their identity +#[test] +fn test_smith_member_can_revoke_its_idty() { + ExtBuilder::new(1, 3, 4).build().execute_with(|| { + run_to_block(2); + + // Charlie goes online + frame_system::Pallet::<Runtime>::inc_providers(&AccountKeyring::Charlie.to_account_id()); + assert_ok!(AuthorityMembers::set_session_keys( + frame_system::RawOrigin::Signed(AccountKeyring::Charlie.to_account_id()).into(), + create_dummy_session_keys() + )); + assert_ok!(AuthorityMembers::go_online( + frame_system::RawOrigin::Signed(AccountKeyring::Charlie.to_account_id()).into() + )); + + run_to_block(25); + + // Charlie is in the authority members + System::assert_has_event(RuntimeEvent::AuthorityMembers( + pallet_authority_members::Event::IncomingAuthorities { members: vec![3] }, + )); + // Charlie is not going out + assert_eq!( + pallet_authority_members::OutgoingAuthorities::<Runtime>::get().contains(&3), + false + ); + + let revocation_payload = RevocationPayload { + idty_index: 3u32, + genesis_hash: System::block_hash(0), + }; + let signature = + AccountKeyring::Charlie.sign(&(REVOCATION_PAYLOAD_PREFIX, revocation_payload).encode()); + + assert_ok!(Identity::revoke_identity( + frame_system::RawOrigin::Signed(AccountKeyring::Charlie.to_account_id()).into(), + 3, + AccountKeyring::Charlie.to_account_id(), + signature.into() + )); + // membership should be removed + System::assert_has_event(RuntimeEvent::Membership( + pallet_membership::Event::MembershipRemoved { + member: 3, + reason: MembershipRemovalReason::Revoked, + }, + )); + // smith membership should be removed as well + System::assert_has_event(RuntimeEvent::SmithMembers( + pallet_smith_members::Event::SmithExcluded { idty_index: 3 }, + )); + // Now Charlie is going out + assert!(pallet_authority_members::OutgoingAuthorities::<Runtime>::get().contains(&3)); + }); +} + /// test genesis account of identity is linked to identity // (and account without identity is not linked) #[test] @@ -1446,7 +1504,6 @@ fn test_killed_account() { }) } -// TODO: test_smith_member_can_revoke_its_idty // TODO: test_revoke_idty // TODO: test_non_smith_can_not_issue_smith_cert // TODO: test_non_smith_can_not_issue_smith_cert