difftreelog
fix unit tests for polkadot-1.9
in: master
3 files changed
pallets/collator-selection/src/mock.rsdiffbeforeafterboth--- a/pallets/collator-selection/src/mock.rs
+++ b/pallets/collator-selection/src/mock.rs
@@ -91,6 +91,12 @@
type SS58Prefix = SS58Prefix;
type OnSetCode = ();
type MaxConsumers = ConstU32<16>;
+ type RuntimeTask = ();
+ type PreInherents = ();
+ type PostInherents = ();
+ type PostTransactions = ();
+ type SingleBlockMigrations = ();
+ type MultiBlockMigrator = ();
}
parameter_types! {
@@ -111,7 +117,6 @@
type MaxReserves = MaxReserves;
type ReserveIdentifier = [u8; 8];
type FreezeIdentifier = [u8; 16];
- type MaxHolds = MaxHolds;
type MaxFreezes = MaxFreezes;
type RuntimeHoldReason = RuntimeHoldReason;
type RuntimeFreezeReason = RuntimeFreezeReason;
pallets/identity/src/tests.rsdiffbeforeafterboth1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617// Original license:18// This file is part of Substrate.1920// Copyright (C) 2019-2022 Parity Technologies (UK) Ltd.21// SPDX-License-Identifier: Apache-2.02223// Licensed under the Apache License, Version 2.0 (the "License");24// you may not use this file except in compliance with the License.25// You may obtain a copy of the License at26//27// http://www.apache.org/licenses/LICENSE-2.028//29// Unless required by applicable law or agreed to in writing, software30// distributed under the License is distributed on an "AS IS" BASIS,31// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.32// See the License for the specific language governing permissions and33// limitations under the License.3435// Tests for Identity Pallet3637use frame_support::{38 assert_noop, assert_ok, ord_parameter_types, parameter_types,39 traits::{ConstU32, ConstU64, EitherOfDiverse},40 BoundedVec,41};42use frame_system::{EnsureRoot, EnsureSignedBy};43use parity_scale_codec::{Decode, Encode};44use sp_core::H256;45use sp_runtime::{46 traits::{BadOrigin, BlakeTwo256, IdentityLookup},47 BuildStorage,48};4950use super::*;51use crate as pallet_identity;5253type Block = frame_system::mocking::MockBlockU32<Test>;5455frame_support::construct_runtime!(56 pub enum Test {57 System: frame_system,58 Balances: pallet_balances,59 Identity: pallet_identity,60 }61);6263parameter_types! {64 pub BlockWeights: frame_system::limits::BlockWeights =65 frame_system::limits::BlockWeights::simple_max(frame_support::weights::Weight::from_parts(1024, 0));66}67impl frame_system::Config for Test {68 type BaseCallFilter = frame_support::traits::Everything;69 type Block = Block;70 type BlockWeights = ();71 type BlockLength = ();72 type RuntimeOrigin = RuntimeOrigin;73 type Nonce = u64;74 type Hash = H256;75 type RuntimeCall = RuntimeCall;76 type Hashing = BlakeTwo256;77 type AccountId = u64;78 type Lookup = IdentityLookup<Self::AccountId>;79 type RuntimeEvent = RuntimeEvent;80 type BlockHashCount = ConstU32<250>;81 type DbWeight = ();82 type Version = ();83 type PalletInfo = PalletInfo;84 type AccountData = pallet_balances::AccountData<u64>;85 type OnNewAccount = ();86 type OnKilledAccount = ();87 type SystemWeightInfo = ();88 type SS58Prefix = ();89 type OnSetCode = ();90 type MaxConsumers = ConstU32<16>;91}9293impl pallet_balances::Config for Test {94 type Balance = u64;95 type RuntimeEvent = RuntimeEvent;96 type DustRemoval = ();97 type ExistentialDeposit = ConstU64<1>;98 type AccountStore = System;99 type MaxLocks = ();100 type MaxReserves = ();101 type ReserveIdentifier = [u8; 8];102 type WeightInfo = ();103 type RuntimeHoldReason = RuntimeHoldReason;104 type RuntimeFreezeReason = RuntimeFreezeReason;105 type FreezeIdentifier = ();106 type MaxHolds = ();107 type MaxFreezes = ();108}109110parameter_types! {111 pub const MaxAdditionalFields: u32 = 2;112 pub const MaxRegistrars: u32 = 20;113}114115ord_parameter_types! {116 pub const One: u64 = 1;117 pub const Two: u64 = 2;118}119type EnsureOneOrRoot = EitherOfDiverse<EnsureRoot<u64>, EnsureSignedBy<One, u64>>;120type EnsureTwoOrRoot = EitherOfDiverse<EnsureRoot<u64>, EnsureSignedBy<Two, u64>>;121impl pallet_identity::Config for Test {122 type RuntimeEvent = RuntimeEvent;123 type Currency = Balances;124 type Slashed = ();125 type BasicDeposit = ConstU64<10>;126 type FieldDeposit = ConstU64<10>;127 type SubAccountDeposit = ConstU64<10>;128 type MaxSubAccounts = ConstU32<2>;129 type MaxAdditionalFields = MaxAdditionalFields;130 type MaxRegistrars = MaxRegistrars;131 type RegistrarOrigin = EnsureOneOrRoot;132 type ForceOrigin = EnsureTwoOrRoot;133 type WeightInfo = ();134}135136pub fn new_test_ext() -> sp_io::TestExternalities {137 let mut t = <frame_system::GenesisConfig<Test>>::default()138 .build_storage()139 .unwrap();140 pallet_balances::GenesisConfig::<Test> {141 balances: vec![(1, 10), (2, 10), (3, 10), (10, 100), (20, 100), (30, 100)],142 }143 .assimilate_storage(&mut t)144 .unwrap();145 t.into()146}147148fn ten() -> IdentityInfo<MaxAdditionalFields> {149 IdentityInfo {150 display: Data::Raw(b"ten".to_vec().try_into().unwrap()),151 legal: Data::Raw(b"The Right Ordinal Ten, Esq.".to_vec().try_into().unwrap()),152 ..Default::default()153 }154}155156fn twenty() -> IdentityInfo<MaxAdditionalFields> {157 IdentityInfo {158 display: Data::Raw(b"twenty".to_vec().try_into().unwrap()),159 legal: Data::Raw(160 b"The Right Ordinal Twenty, Esq."161 .to_vec()162 .try_into()163 .unwrap(),164 ),165 ..Default::default()166 }167}168169#[test]170fn editing_subaccounts_should_work() {171 new_test_ext().execute_with(|| {172 let data = |x| Data::Raw(vec![x; 1].try_into().unwrap());173174 assert_noop!(175 Identity::add_sub(RuntimeOrigin::signed(10), 20, data(1)),176 Error::<Test>::NoIdentity177 );178179 assert_ok!(Identity::set_identity(180 RuntimeOrigin::signed(10),181 Box::new(ten())182 ));183184 // first sub account185 assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 1, data(1)));186 assert_eq!(SuperOf::<Test>::get(1), Some((10, data(1))));187 assert_eq!(Balances::free_balance(10), 80);188189 // second sub account190 assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 2, data(2)));191 assert_eq!(SuperOf::<Test>::get(1), Some((10, data(1))));192 assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));193 assert_eq!(Balances::free_balance(10), 70);194195 // third sub account is too many196 assert_noop!(197 Identity::add_sub(RuntimeOrigin::signed(10), 3, data(3)),198 Error::<Test>::TooManySubAccounts199 );200201 // rename first sub account202 assert_ok!(Identity::rename_sub(RuntimeOrigin::signed(10), 1, data(11)));203 assert_eq!(SuperOf::<Test>::get(1), Some((10, data(11))));204 assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));205 assert_eq!(Balances::free_balance(10), 70);206207 // remove first sub account208 assert_ok!(Identity::remove_sub(RuntimeOrigin::signed(10), 1));209 assert_eq!(SuperOf::<Test>::get(1), None);210 assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));211 assert_eq!(Balances::free_balance(10), 80);212213 // add third sub account214 assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 3, data(3)));215 assert_eq!(SuperOf::<Test>::get(1), None);216 assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));217 assert_eq!(SuperOf::<Test>::get(3), Some((10, data(3))));218 assert_eq!(Balances::free_balance(10), 70);219 });220}221222#[test]223fn resolving_subaccount_ownership_works() {224 new_test_ext().execute_with(|| {225 let data = |x| Data::Raw(vec![x; 1].try_into().unwrap());226227 assert_ok!(Identity::set_identity(228 RuntimeOrigin::signed(10),229 Box::new(ten())230 ));231 assert_ok!(Identity::set_identity(232 RuntimeOrigin::signed(20),233 Box::new(twenty())234 ));235236 // 10 claims 1 as a subaccount237 assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 1, data(1)));238 assert_eq!(Balances::free_balance(1), 10);239 assert_eq!(Balances::free_balance(10), 80);240 assert_eq!(Balances::reserved_balance(10), 20);241 // 20 cannot claim 1 now242 assert_noop!(243 Identity::add_sub(RuntimeOrigin::signed(20), 1, data(1)),244 Error::<Test>::AlreadyClaimed245 );246 // 1 wants to be with 20 so it quits from 10247 assert_ok!(Identity::quit_sub(RuntimeOrigin::signed(1)));248 // 1 gets the 10 that 10 paid.249 assert_eq!(Balances::free_balance(1), 20);250 assert_eq!(Balances::free_balance(10), 80);251 assert_eq!(Balances::reserved_balance(10), 10);252 // 20 can claim 1 now253 assert_ok!(Identity::add_sub(RuntimeOrigin::signed(20), 1, data(1)));254 });255}256257#[test]258fn trailing_zeros_decodes_into_default_data() {259 let encoded = Data::Raw(b"Hello".to_vec().try_into().unwrap()).encode();260 assert!(<(Data, Data)>::decode(&mut &encoded[..]).is_err());261 let input = &mut &encoded[..];262 let (a, b) = <(Data, Data)>::decode(&mut AppendZerosInput::new(input)).unwrap();263 assert_eq!(a, Data::Raw(b"Hello".to_vec().try_into().unwrap()));264 assert_eq!(b, Data::None);265}266267#[test]268fn adding_registrar_should_work() {269 new_test_ext().execute_with(|| {270 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));271 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));272 let fields = IdentityFields(IdentityField::Display | IdentityField::Legal);273 assert_ok!(Identity::set_fields(RuntimeOrigin::signed(3), 0, fields));274 assert_eq!(275 Identity::registrars(),276 vec![Some(RegistrarInfo {277 account: 3,278 fee: 10,279 fields280 })]281 );282 });283}284285#[test]286fn amount_of_registrars_is_limited() {287 new_test_ext().execute_with(|| {288 for i in 1..MaxRegistrars::get() + 1 {289 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), i as u64));290 }291 let last_registrar = MaxRegistrars::get() as u64 + 1;292 assert_noop!(293 Identity::add_registrar(RuntimeOrigin::signed(1), last_registrar),294 Error::<Test>::TooManyRegistrars295 );296 });297}298299#[test]300fn registration_should_work() {301 new_test_ext().execute_with(|| {302 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));303 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));304 let mut three_fields = ten();305 three_fields306 .additional307 .try_push(Default::default())308 .unwrap();309 three_fields310 .additional311 .try_push(Default::default())312 .unwrap();313 assert!(three_fields314 .additional315 .try_push(Default::default())316 .is_err());317 assert_ok!(Identity::set_identity(318 RuntimeOrigin::signed(10),319 Box::new(ten())320 ));321 assert_eq!(Identity::identity(10).unwrap().info, ten());322 assert_eq!(Balances::free_balance(10), 90);323 assert_ok!(Identity::clear_identity(RuntimeOrigin::signed(10)));324 assert_eq!(Balances::free_balance(10), 100);325 assert_noop!(326 Identity::clear_identity(RuntimeOrigin::signed(10)),327 Error::<Test>::NotNamed328 );329 });330}331332#[test]333fn uninvited_judgement_should_work() {334 new_test_ext().execute_with(|| {335 assert_noop!(336 Identity::provide_judgement(337 RuntimeOrigin::signed(3),338 0,339 10,340 Judgement::Reasonable,341 H256::random()342 ),343 Error::<Test>::InvalidIndex344 );345346 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));347 assert_noop!(348 Identity::provide_judgement(349 RuntimeOrigin::signed(3),350 0,351 10,352 Judgement::Reasonable,353 H256::random()354 ),355 Error::<Test>::InvalidTarget356 );357358 assert_ok!(Identity::set_identity(359 RuntimeOrigin::signed(10),360 Box::new(ten())361 ));362 assert_noop!(363 Identity::provide_judgement(364 RuntimeOrigin::signed(3),365 0,366 10,367 Judgement::Reasonable,368 H256::random()369 ),370 Error::<Test>::JudgementForDifferentIdentity371 );372373 let identity_hash = BlakeTwo256::hash_of(&ten());374375 assert_noop!(376 Identity::provide_judgement(377 RuntimeOrigin::signed(10),378 0,379 10,380 Judgement::Reasonable,381 identity_hash382 ),383 Error::<Test>::InvalidIndex384 );385 assert_noop!(386 Identity::provide_judgement(387 RuntimeOrigin::signed(3),388 0,389 10,390 Judgement::FeePaid(1),391 identity_hash392 ),393 Error::<Test>::InvalidJudgement394 );395396 assert_ok!(Identity::provide_judgement(397 RuntimeOrigin::signed(3),398 0,399 10,400 Judgement::Reasonable,401 identity_hash402 ));403 assert_eq!(404 Identity::identity(10).unwrap().judgements,405 vec![(0, Judgement::Reasonable)]406 );407 });408}409410#[test]411fn clearing_judgement_should_work() {412 new_test_ext().execute_with(|| {413 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));414 assert_ok!(Identity::set_identity(415 RuntimeOrigin::signed(10),416 Box::new(ten())417 ));418 assert_ok!(Identity::provide_judgement(419 RuntimeOrigin::signed(3),420 0,421 10,422 Judgement::Reasonable,423 BlakeTwo256::hash_of(&ten())424 ));425 assert_ok!(Identity::clear_identity(RuntimeOrigin::signed(10)));426 assert_eq!(Identity::identity(10), None);427 });428}429430#[test]431fn killing_slashing_should_work() {432 new_test_ext().execute_with(|| {433 assert_ok!(Identity::set_identity(434 RuntimeOrigin::signed(10),435 Box::new(ten())436 ));437 assert_noop!(438 Identity::kill_identity(RuntimeOrigin::signed(1), 10),439 BadOrigin440 );441 assert_ok!(Identity::kill_identity(RuntimeOrigin::signed(2), 10));442 assert_eq!(Identity::identity(10), None);443 assert_eq!(Balances::free_balance(10), 90);444 assert_noop!(445 Identity::kill_identity(RuntimeOrigin::signed(2), 10),446 Error::<Test>::NotNamed447 );448 });449}450451#[test]452fn setting_subaccounts_should_work() {453 new_test_ext().execute_with(|| {454 let mut subs = vec![(20, Data::Raw(vec![40; 1].try_into().unwrap()))];455 assert_noop!(456 Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()),457 Error::<Test>::NotFound458 );459460 assert_ok!(Identity::set_identity(461 RuntimeOrigin::signed(10),462 Box::new(ten())463 ));464 assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()));465 assert_eq!(Balances::free_balance(10), 80);466 assert_eq!(Identity::subs_of(10), (10, vec![20].try_into().unwrap()));467 assert_eq!(468 Identity::super_of(20),469 Some((10, Data::Raw(vec![40; 1].try_into().unwrap())))470 );471472 // push another item and re-set it.473 subs.push((30, Data::Raw(vec![50; 1].try_into().unwrap())));474 assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()));475 assert_eq!(Balances::free_balance(10), 70);476 assert_eq!(477 Identity::subs_of(10),478 (20, vec![20, 30].try_into().unwrap())479 );480 assert_eq!(481 Identity::super_of(20),482 Some((10, Data::Raw(vec![40; 1].try_into().unwrap())))483 );484 assert_eq!(485 Identity::super_of(30),486 Some((10, Data::Raw(vec![50; 1].try_into().unwrap())))487 );488489 // switch out one of the items and re-set.490 subs[0] = (40, Data::Raw(vec![60; 1].try_into().unwrap()));491 assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()));492 assert_eq!(Balances::free_balance(10), 70); // no change in the balance493 assert_eq!(494 Identity::subs_of(10),495 (20, vec![40, 30].try_into().unwrap())496 );497 assert_eq!(Identity::super_of(20), None);498 assert_eq!(499 Identity::super_of(30),500 Some((10, Data::Raw(vec![50; 1].try_into().unwrap())))501 );502 assert_eq!(503 Identity::super_of(40),504 Some((10, Data::Raw(vec![60; 1].try_into().unwrap())))505 );506507 // clear508 assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), vec![]));509 assert_eq!(Balances::free_balance(10), 90);510 assert_eq!(Identity::subs_of(10), (0, BoundedVec::default()));511 assert_eq!(Identity::super_of(30), None);512 assert_eq!(Identity::super_of(40), None);513514 subs.push((20, Data::Raw(vec![40; 1].try_into().unwrap())));515 assert_noop!(516 Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()),517 Error::<Test>::TooManySubAccounts518 );519 });520}521522#[test]523fn clearing_account_should_remove_subaccounts_and_refund() {524 new_test_ext().execute_with(|| {525 assert_ok!(Identity::set_identity(526 RuntimeOrigin::signed(10),527 Box::new(ten())528 ));529 assert_ok!(Identity::set_subs(530 RuntimeOrigin::signed(10),531 vec![(20, Data::Raw(vec![40; 1].try_into().unwrap()))]532 ));533 assert_ok!(Identity::clear_identity(RuntimeOrigin::signed(10)));534 assert_eq!(Balances::free_balance(10), 100);535 assert!(Identity::super_of(20).is_none());536 });537}538539#[test]540fn killing_account_should_remove_subaccounts_and_not_refund() {541 new_test_ext().execute_with(|| {542 assert_ok!(Identity::set_identity(543 RuntimeOrigin::signed(10),544 Box::new(ten())545 ));546 assert_ok!(Identity::set_subs(547 RuntimeOrigin::signed(10),548 vec![(20, Data::Raw(vec![40; 1].try_into().unwrap()))]549 ));550 assert_ok!(Identity::kill_identity(RuntimeOrigin::signed(2), 10));551 assert_eq!(Balances::free_balance(10), 80);552 assert!(Identity::super_of(20).is_none());553 });554}555556#[test]557fn cancelling_requested_judgement_should_work() {558 new_test_ext().execute_with(|| {559 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));560 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));561 assert_noop!(562 Identity::cancel_request(RuntimeOrigin::signed(10), 0),563 Error::<Test>::NoIdentity564 );565 assert_ok!(Identity::set_identity(566 RuntimeOrigin::signed(10),567 Box::new(ten())568 ));569 assert_ok!(Identity::request_judgement(570 RuntimeOrigin::signed(10),571 0,572 10573 ));574 assert_ok!(Identity::cancel_request(RuntimeOrigin::signed(10), 0));575 assert_eq!(Balances::free_balance(10), 90);576 assert_noop!(577 Identity::cancel_request(RuntimeOrigin::signed(10), 0),578 Error::<Test>::NotFound579 );580581 assert_ok!(Identity::provide_judgement(582 RuntimeOrigin::signed(3),583 0,584 10,585 Judgement::Reasonable,586 BlakeTwo256::hash_of(&ten())587 ));588 assert_noop!(589 Identity::cancel_request(RuntimeOrigin::signed(10), 0),590 Error::<Test>::JudgementGiven591 );592 });593}594595#[test]596fn requesting_judgement_should_work() {597 new_test_ext().execute_with(|| {598 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));599 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));600 assert_ok!(Identity::set_identity(601 RuntimeOrigin::signed(10),602 Box::new(ten())603 ));604 assert_noop!(605 Identity::request_judgement(RuntimeOrigin::signed(10), 0, 9),606 Error::<Test>::FeeChanged607 );608 assert_ok!(Identity::request_judgement(609 RuntimeOrigin::signed(10),610 0,611 10612 ));613 // 10 for the judgement request, 10 for the identity.614 assert_eq!(Balances::free_balance(10), 80);615616 // Re-requesting won't work as we already paid.617 assert_noop!(618 Identity::request_judgement(RuntimeOrigin::signed(10), 0, 10),619 Error::<Test>::StickyJudgement620 );621 assert_ok!(Identity::provide_judgement(622 RuntimeOrigin::signed(3),623 0,624 10,625 Judgement::Erroneous,626 BlakeTwo256::hash_of(&ten())627 ));628 // Registrar got their payment now.629 assert_eq!(Balances::free_balance(3), 20);630631 // Re-requesting still won't work as it's erroneous.632 assert_noop!(633 Identity::request_judgement(RuntimeOrigin::signed(10), 0, 10),634 Error::<Test>::StickyJudgement635 );636637 // Requesting from a second registrar still works.638 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 4));639 assert_ok!(Identity::request_judgement(640 RuntimeOrigin::signed(10),641 1,642 10643 ));644645 // Re-requesting after the judgement has been reduced works.646 assert_ok!(Identity::provide_judgement(647 RuntimeOrigin::signed(3),648 0,649 10,650 Judgement::OutOfDate,651 BlakeTwo256::hash_of(&ten())652 ));653 assert_ok!(Identity::request_judgement(654 RuntimeOrigin::signed(10),655 0,656 10657 ));658 });659}660661#[test]662fn provide_judgement_should_return_judgement_payment_failed_error() {663 new_test_ext().execute_with(|| {664 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));665 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));666 assert_ok!(Identity::set_identity(667 RuntimeOrigin::signed(10),668 Box::new(ten())669 ));670 assert_ok!(Identity::request_judgement(671 RuntimeOrigin::signed(10),672 0,673 10674 ));675 // 10 for the judgement request, 10 for the identity.676 assert_eq!(Balances::free_balance(10), 80);677678 // This forces judgement payment failed error679 Balances::make_free_balance_be(&3, 0);680 assert_noop!(681 Identity::provide_judgement(682 RuntimeOrigin::signed(3),683 0,684 10,685 Judgement::Erroneous,686 BlakeTwo256::hash_of(&ten())687 ),688 Error::<Test>::JudgementPaymentFailed689 );690 });691}692693#[test]694fn field_deposit_should_work() {695 new_test_ext().execute_with(|| {696 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));697 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));698 assert_ok!(Identity::set_identity(699 RuntimeOrigin::signed(10),700 Box::new(IdentityInfo {701 additional: vec![702 (703 Data::Raw(b"number".to_vec().try_into().unwrap()),704 Data::Raw(10u32.encode().try_into().unwrap())705 ),706 (707 Data::Raw(b"text".to_vec().try_into().unwrap()),708 Data::Raw(b"10".to_vec().try_into().unwrap())709 ),710 ]711 .try_into()712 .unwrap(),713 ..Default::default()714 })715 ));716 assert_eq!(Balances::free_balance(10), 70);717 });718}719720#[test]721fn setting_account_id_should_work() {722 new_test_ext().execute_with(|| {723 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));724 // account 4 cannot change the first registrar's identity since it's owned by 3.725 assert_noop!(726 Identity::set_account_id(RuntimeOrigin::signed(4), 0, 3),727 Error::<Test>::InvalidIndex728 );729 // account 3 can, because that's the registrar's current account.730 assert_ok!(Identity::set_account_id(RuntimeOrigin::signed(3), 0, 4));731 // account 4 can now, because that's their new ID.732 assert_ok!(Identity::set_account_id(RuntimeOrigin::signed(4), 0, 3));733 });734}735736#[test]737fn test_has_identity() {738 new_test_ext().execute_with(|| {739 assert_ok!(Identity::set_identity(740 RuntimeOrigin::signed(10),741 Box::new(ten())742 ));743 assert!(Identity::has_identity(&10, IdentityField::Display as u64));744 assert!(Identity::has_identity(&10, IdentityField::Legal as u64));745 assert!(Identity::has_identity(746 &10,747 IdentityField::Display as u64 | IdentityField::Legal as u64748 ));749 assert!(!Identity::has_identity(750 &10,751 IdentityField::Display as u64 | IdentityField::Legal as u64 | IdentityField::Web as u64752 ));753 });754}1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617// Original license:18// This file is part of Substrate.1920// Copyright (C) 2019-2022 Parity Technologies (UK) Ltd.21// SPDX-License-Identifier: Apache-2.02223// Licensed under the Apache License, Version 2.0 (the "License");24// you may not use this file except in compliance with the License.25// You may obtain a copy of the License at26//27// http://www.apache.org/licenses/LICENSE-2.028//29// Unless required by applicable law or agreed to in writing, software30// distributed under the License is distributed on an "AS IS" BASIS,31// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.32// See the License for the specific language governing permissions and33// limitations under the License.3435// Tests for Identity Pallet3637use frame_support::{38 assert_noop, assert_ok, ord_parameter_types, parameter_types,39 traits::{ConstU32, ConstU64, EitherOfDiverse},40 BoundedVec,41};42use frame_system::{EnsureRoot, EnsureSignedBy};43use parity_scale_codec::{Decode, Encode};44use sp_core::H256;45use sp_runtime::{46 traits::{BadOrigin, BlakeTwo256, IdentityLookup},47 BuildStorage,48};4950use super::*;51use crate as pallet_identity;5253type Block = frame_system::mocking::MockBlockU32<Test>;5455frame_support::construct_runtime!(56 pub enum Test {57 System: frame_system,58 Balances: pallet_balances,59 Identity: pallet_identity,60 }61);6263parameter_types! {64 pub BlockWeights: frame_system::limits::BlockWeights =65 frame_system::limits::BlockWeights::simple_max(frame_support::weights::Weight::from_parts(1024, 0));66}67impl frame_system::Config for Test {68 type BaseCallFilter = frame_support::traits::Everything;69 type Block = Block;70 type BlockWeights = ();71 type BlockLength = ();72 type RuntimeOrigin = RuntimeOrigin;73 type Nonce = u64;74 type Hash = H256;75 type RuntimeCall = RuntimeCall;76 type Hashing = BlakeTwo256;77 type AccountId = u64;78 type Lookup = IdentityLookup<Self::AccountId>;79 type RuntimeEvent = RuntimeEvent;80 type BlockHashCount = ConstU32<250>;81 type DbWeight = ();82 type Version = ();83 type PalletInfo = PalletInfo;84 type AccountData = pallet_balances::AccountData<u64>;85 type OnNewAccount = ();86 type OnKilledAccount = ();87 type SystemWeightInfo = ();88 type SS58Prefix = ();89 type OnSetCode = ();90 type MaxConsumers = ConstU32<16>;91 type RuntimeTask = ();92 type PreInherents = ();93 type PostInherents = ();94 type PostTransactions = ();95 type SingleBlockMigrations = ();96 type MultiBlockMigrator = ();97}9899impl pallet_balances::Config for Test {100 type Balance = u64;101 type RuntimeEvent = RuntimeEvent;102 type DustRemoval = ();103 type ExistentialDeposit = ConstU64<1>;104 type AccountStore = System;105 type MaxLocks = ();106 type MaxReserves = ();107 type ReserveIdentifier = [u8; 8];108 type WeightInfo = ();109 type RuntimeHoldReason = RuntimeHoldReason;110 type RuntimeFreezeReason = RuntimeFreezeReason;111 type FreezeIdentifier = ();112 type MaxFreezes = ();113}114115parameter_types! {116 pub const MaxAdditionalFields: u32 = 2;117 pub const MaxRegistrars: u32 = 20;118}119120ord_parameter_types! {121 pub const One: u64 = 1;122 pub const Two: u64 = 2;123}124type EnsureOneOrRoot = EitherOfDiverse<EnsureRoot<u64>, EnsureSignedBy<One, u64>>;125type EnsureTwoOrRoot = EitherOfDiverse<EnsureRoot<u64>, EnsureSignedBy<Two, u64>>;126impl pallet_identity::Config for Test {127 type RuntimeEvent = RuntimeEvent;128 type Currency = Balances;129 type Slashed = ();130 type BasicDeposit = ConstU64<10>;131 type FieldDeposit = ConstU64<10>;132 type SubAccountDeposit = ConstU64<10>;133 type MaxSubAccounts = ConstU32<2>;134 type MaxAdditionalFields = MaxAdditionalFields;135 type MaxRegistrars = MaxRegistrars;136 type RegistrarOrigin = EnsureOneOrRoot;137 type ForceOrigin = EnsureTwoOrRoot;138 type WeightInfo = ();139}140141pub fn new_test_ext() -> sp_io::TestExternalities {142 let mut t = <frame_system::GenesisConfig<Test>>::default()143 .build_storage()144 .unwrap();145 pallet_balances::GenesisConfig::<Test> {146 balances: vec![(1, 10), (2, 10), (3, 10), (10, 100), (20, 100), (30, 100)],147 }148 .assimilate_storage(&mut t)149 .unwrap();150 t.into()151}152153fn ten() -> IdentityInfo<MaxAdditionalFields> {154 IdentityInfo {155 display: Data::Raw(b"ten".to_vec().try_into().unwrap()),156 legal: Data::Raw(b"The Right Ordinal Ten, Esq.".to_vec().try_into().unwrap()),157 ..Default::default()158 }159}160161fn twenty() -> IdentityInfo<MaxAdditionalFields> {162 IdentityInfo {163 display: Data::Raw(b"twenty".to_vec().try_into().unwrap()),164 legal: Data::Raw(165 b"The Right Ordinal Twenty, Esq."166 .to_vec()167 .try_into()168 .unwrap(),169 ),170 ..Default::default()171 }172}173174#[test]175fn editing_subaccounts_should_work() {176 new_test_ext().execute_with(|| {177 let data = |x| Data::Raw(vec![x; 1].try_into().unwrap());178179 assert_noop!(180 Identity::add_sub(RuntimeOrigin::signed(10), 20, data(1)),181 Error::<Test>::NoIdentity182 );183184 assert_ok!(Identity::set_identity(185 RuntimeOrigin::signed(10),186 Box::new(ten())187 ));188189 // first sub account190 assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 1, data(1)));191 assert_eq!(SuperOf::<Test>::get(1), Some((10, data(1))));192 assert_eq!(Balances::free_balance(10), 80);193194 // second sub account195 assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 2, data(2)));196 assert_eq!(SuperOf::<Test>::get(1), Some((10, data(1))));197 assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));198 assert_eq!(Balances::free_balance(10), 70);199200 // third sub account is too many201 assert_noop!(202 Identity::add_sub(RuntimeOrigin::signed(10), 3, data(3)),203 Error::<Test>::TooManySubAccounts204 );205206 // rename first sub account207 assert_ok!(Identity::rename_sub(RuntimeOrigin::signed(10), 1, data(11)));208 assert_eq!(SuperOf::<Test>::get(1), Some((10, data(11))));209 assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));210 assert_eq!(Balances::free_balance(10), 70);211212 // remove first sub account213 assert_ok!(Identity::remove_sub(RuntimeOrigin::signed(10), 1));214 assert_eq!(SuperOf::<Test>::get(1), None);215 assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));216 assert_eq!(Balances::free_balance(10), 80);217218 // add third sub account219 assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 3, data(3)));220 assert_eq!(SuperOf::<Test>::get(1), None);221 assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));222 assert_eq!(SuperOf::<Test>::get(3), Some((10, data(3))));223 assert_eq!(Balances::free_balance(10), 70);224 });225}226227#[test]228fn resolving_subaccount_ownership_works() {229 new_test_ext().execute_with(|| {230 let data = |x| Data::Raw(vec![x; 1].try_into().unwrap());231232 assert_ok!(Identity::set_identity(233 RuntimeOrigin::signed(10),234 Box::new(ten())235 ));236 assert_ok!(Identity::set_identity(237 RuntimeOrigin::signed(20),238 Box::new(twenty())239 ));240241 // 10 claims 1 as a subaccount242 assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 1, data(1)));243 assert_eq!(Balances::free_balance(1), 10);244 assert_eq!(Balances::free_balance(10), 80);245 assert_eq!(Balances::reserved_balance(10), 20);246 // 20 cannot claim 1 now247 assert_noop!(248 Identity::add_sub(RuntimeOrigin::signed(20), 1, data(1)),249 Error::<Test>::AlreadyClaimed250 );251 // 1 wants to be with 20 so it quits from 10252 assert_ok!(Identity::quit_sub(RuntimeOrigin::signed(1)));253 // 1 gets the 10 that 10 paid.254 assert_eq!(Balances::free_balance(1), 20);255 assert_eq!(Balances::free_balance(10), 80);256 assert_eq!(Balances::reserved_balance(10), 10);257 // 20 can claim 1 now258 assert_ok!(Identity::add_sub(RuntimeOrigin::signed(20), 1, data(1)));259 });260}261262#[test]263fn trailing_zeros_decodes_into_default_data() {264 let encoded = Data::Raw(b"Hello".to_vec().try_into().unwrap()).encode();265 assert!(<(Data, Data)>::decode(&mut &encoded[..]).is_err());266 let input = &mut &encoded[..];267 let (a, b) = <(Data, Data)>::decode(&mut AppendZerosInput::new(input)).unwrap();268 assert_eq!(a, Data::Raw(b"Hello".to_vec().try_into().unwrap()));269 assert_eq!(b, Data::None);270}271272#[test]273fn adding_registrar_should_work() {274 new_test_ext().execute_with(|| {275 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));276 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));277 let fields = IdentityFields(IdentityField::Display | IdentityField::Legal);278 assert_ok!(Identity::set_fields(RuntimeOrigin::signed(3), 0, fields));279 assert_eq!(280 Identity::registrars(),281 vec![Some(RegistrarInfo {282 account: 3,283 fee: 10,284 fields285 })]286 );287 });288}289290#[test]291fn amount_of_registrars_is_limited() {292 new_test_ext().execute_with(|| {293 for i in 1..MaxRegistrars::get() + 1 {294 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), i as u64));295 }296 let last_registrar = MaxRegistrars::get() as u64 + 1;297 assert_noop!(298 Identity::add_registrar(RuntimeOrigin::signed(1), last_registrar),299 Error::<Test>::TooManyRegistrars300 );301 });302}303304#[test]305fn registration_should_work() {306 new_test_ext().execute_with(|| {307 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));308 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));309 let mut three_fields = ten();310 three_fields311 .additional312 .try_push(Default::default())313 .unwrap();314 three_fields315 .additional316 .try_push(Default::default())317 .unwrap();318 assert!(three_fields319 .additional320 .try_push(Default::default())321 .is_err());322 assert_ok!(Identity::set_identity(323 RuntimeOrigin::signed(10),324 Box::new(ten())325 ));326 assert_eq!(Identity::identity(10).unwrap().info, ten());327 assert_eq!(Balances::free_balance(10), 90);328 assert_ok!(Identity::clear_identity(RuntimeOrigin::signed(10)));329 assert_eq!(Balances::free_balance(10), 100);330 assert_noop!(331 Identity::clear_identity(RuntimeOrigin::signed(10)),332 Error::<Test>::NotNamed333 );334 });335}336337#[test]338fn uninvited_judgement_should_work() {339 new_test_ext().execute_with(|| {340 assert_noop!(341 Identity::provide_judgement(342 RuntimeOrigin::signed(3),343 0,344 10,345 Judgement::Reasonable,346 H256::random()347 ),348 Error::<Test>::InvalidIndex349 );350351 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));352 assert_noop!(353 Identity::provide_judgement(354 RuntimeOrigin::signed(3),355 0,356 10,357 Judgement::Reasonable,358 H256::random()359 ),360 Error::<Test>::InvalidTarget361 );362363 assert_ok!(Identity::set_identity(364 RuntimeOrigin::signed(10),365 Box::new(ten())366 ));367 assert_noop!(368 Identity::provide_judgement(369 RuntimeOrigin::signed(3),370 0,371 10,372 Judgement::Reasonable,373 H256::random()374 ),375 Error::<Test>::JudgementForDifferentIdentity376 );377378 let identity_hash = BlakeTwo256::hash_of(&ten());379380 assert_noop!(381 Identity::provide_judgement(382 RuntimeOrigin::signed(10),383 0,384 10,385 Judgement::Reasonable,386 identity_hash387 ),388 Error::<Test>::InvalidIndex389 );390 assert_noop!(391 Identity::provide_judgement(392 RuntimeOrigin::signed(3),393 0,394 10,395 Judgement::FeePaid(1),396 identity_hash397 ),398 Error::<Test>::InvalidJudgement399 );400401 assert_ok!(Identity::provide_judgement(402 RuntimeOrigin::signed(3),403 0,404 10,405 Judgement::Reasonable,406 identity_hash407 ));408 assert_eq!(409 Identity::identity(10).unwrap().judgements,410 vec![(0, Judgement::Reasonable)]411 );412 });413}414415#[test]416fn clearing_judgement_should_work() {417 new_test_ext().execute_with(|| {418 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));419 assert_ok!(Identity::set_identity(420 RuntimeOrigin::signed(10),421 Box::new(ten())422 ));423 assert_ok!(Identity::provide_judgement(424 RuntimeOrigin::signed(3),425 0,426 10,427 Judgement::Reasonable,428 BlakeTwo256::hash_of(&ten())429 ));430 assert_ok!(Identity::clear_identity(RuntimeOrigin::signed(10)));431 assert_eq!(Identity::identity(10), None);432 });433}434435#[test]436fn killing_slashing_should_work() {437 new_test_ext().execute_with(|| {438 assert_ok!(Identity::set_identity(439 RuntimeOrigin::signed(10),440 Box::new(ten())441 ));442 assert_noop!(443 Identity::kill_identity(RuntimeOrigin::signed(1), 10),444 BadOrigin445 );446 assert_ok!(Identity::kill_identity(RuntimeOrigin::signed(2), 10));447 assert_eq!(Identity::identity(10), None);448 assert_eq!(Balances::free_balance(10), 90);449 assert_noop!(450 Identity::kill_identity(RuntimeOrigin::signed(2), 10),451 Error::<Test>::NotNamed452 );453 });454}455456#[test]457fn setting_subaccounts_should_work() {458 new_test_ext().execute_with(|| {459 let mut subs = vec![(20, Data::Raw(vec![40; 1].try_into().unwrap()))];460 assert_noop!(461 Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()),462 Error::<Test>::NotFound463 );464465 assert_ok!(Identity::set_identity(466 RuntimeOrigin::signed(10),467 Box::new(ten())468 ));469 assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()));470 assert_eq!(Balances::free_balance(10), 80);471 assert_eq!(Identity::subs_of(10), (10, vec![20].try_into().unwrap()));472 assert_eq!(473 Identity::super_of(20),474 Some((10, Data::Raw(vec![40; 1].try_into().unwrap())))475 );476477 // push another item and re-set it.478 subs.push((30, Data::Raw(vec![50; 1].try_into().unwrap())));479 assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()));480 assert_eq!(Balances::free_balance(10), 70);481 assert_eq!(482 Identity::subs_of(10),483 (20, vec![20, 30].try_into().unwrap())484 );485 assert_eq!(486 Identity::super_of(20),487 Some((10, Data::Raw(vec![40; 1].try_into().unwrap())))488 );489 assert_eq!(490 Identity::super_of(30),491 Some((10, Data::Raw(vec![50; 1].try_into().unwrap())))492 );493494 // switch out one of the items and re-set.495 subs[0] = (40, Data::Raw(vec![60; 1].try_into().unwrap()));496 assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()));497 assert_eq!(Balances::free_balance(10), 70); // no change in the balance498 assert_eq!(499 Identity::subs_of(10),500 (20, vec![40, 30].try_into().unwrap())501 );502 assert_eq!(Identity::super_of(20), None);503 assert_eq!(504 Identity::super_of(30),505 Some((10, Data::Raw(vec![50; 1].try_into().unwrap())))506 );507 assert_eq!(508 Identity::super_of(40),509 Some((10, Data::Raw(vec![60; 1].try_into().unwrap())))510 );511512 // clear513 assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), vec![]));514 assert_eq!(Balances::free_balance(10), 90);515 assert_eq!(Identity::subs_of(10), (0, BoundedVec::default()));516 assert_eq!(Identity::super_of(30), None);517 assert_eq!(Identity::super_of(40), None);518519 subs.push((20, Data::Raw(vec![40; 1].try_into().unwrap())));520 assert_noop!(521 Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()),522 Error::<Test>::TooManySubAccounts523 );524 });525}526527#[test]528fn clearing_account_should_remove_subaccounts_and_refund() {529 new_test_ext().execute_with(|| {530 assert_ok!(Identity::set_identity(531 RuntimeOrigin::signed(10),532 Box::new(ten())533 ));534 assert_ok!(Identity::set_subs(535 RuntimeOrigin::signed(10),536 vec![(20, Data::Raw(vec![40; 1].try_into().unwrap()))]537 ));538 assert_ok!(Identity::clear_identity(RuntimeOrigin::signed(10)));539 assert_eq!(Balances::free_balance(10), 100);540 assert!(Identity::super_of(20).is_none());541 });542}543544#[test]545fn killing_account_should_remove_subaccounts_and_not_refund() {546 new_test_ext().execute_with(|| {547 assert_ok!(Identity::set_identity(548 RuntimeOrigin::signed(10),549 Box::new(ten())550 ));551 assert_ok!(Identity::set_subs(552 RuntimeOrigin::signed(10),553 vec![(20, Data::Raw(vec![40; 1].try_into().unwrap()))]554 ));555 assert_ok!(Identity::kill_identity(RuntimeOrigin::signed(2), 10));556 assert_eq!(Balances::free_balance(10), 80);557 assert!(Identity::super_of(20).is_none());558 });559}560561#[test]562fn cancelling_requested_judgement_should_work() {563 new_test_ext().execute_with(|| {564 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));565 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));566 assert_noop!(567 Identity::cancel_request(RuntimeOrigin::signed(10), 0),568 Error::<Test>::NoIdentity569 );570 assert_ok!(Identity::set_identity(571 RuntimeOrigin::signed(10),572 Box::new(ten())573 ));574 assert_ok!(Identity::request_judgement(575 RuntimeOrigin::signed(10),576 0,577 10578 ));579 assert_ok!(Identity::cancel_request(RuntimeOrigin::signed(10), 0));580 assert_eq!(Balances::free_balance(10), 90);581 assert_noop!(582 Identity::cancel_request(RuntimeOrigin::signed(10), 0),583 Error::<Test>::NotFound584 );585586 assert_ok!(Identity::provide_judgement(587 RuntimeOrigin::signed(3),588 0,589 10,590 Judgement::Reasonable,591 BlakeTwo256::hash_of(&ten())592 ));593 assert_noop!(594 Identity::cancel_request(RuntimeOrigin::signed(10), 0),595 Error::<Test>::JudgementGiven596 );597 });598}599600#[test]601fn requesting_judgement_should_work() {602 new_test_ext().execute_with(|| {603 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));604 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));605 assert_ok!(Identity::set_identity(606 RuntimeOrigin::signed(10),607 Box::new(ten())608 ));609 assert_noop!(610 Identity::request_judgement(RuntimeOrigin::signed(10), 0, 9),611 Error::<Test>::FeeChanged612 );613 assert_ok!(Identity::request_judgement(614 RuntimeOrigin::signed(10),615 0,616 10617 ));618 // 10 for the judgement request, 10 for the identity.619 assert_eq!(Balances::free_balance(10), 80);620621 // Re-requesting won't work as we already paid.622 assert_noop!(623 Identity::request_judgement(RuntimeOrigin::signed(10), 0, 10),624 Error::<Test>::StickyJudgement625 );626 assert_ok!(Identity::provide_judgement(627 RuntimeOrigin::signed(3),628 0,629 10,630 Judgement::Erroneous,631 BlakeTwo256::hash_of(&ten())632 ));633 // Registrar got their payment now.634 assert_eq!(Balances::free_balance(3), 20);635636 // Re-requesting still won't work as it's erroneous.637 assert_noop!(638 Identity::request_judgement(RuntimeOrigin::signed(10), 0, 10),639 Error::<Test>::StickyJudgement640 );641642 // Requesting from a second registrar still works.643 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 4));644 assert_ok!(Identity::request_judgement(645 RuntimeOrigin::signed(10),646 1,647 10648 ));649650 // Re-requesting after the judgement has been reduced works.651 assert_ok!(Identity::provide_judgement(652 RuntimeOrigin::signed(3),653 0,654 10,655 Judgement::OutOfDate,656 BlakeTwo256::hash_of(&ten())657 ));658 assert_ok!(Identity::request_judgement(659 RuntimeOrigin::signed(10),660 0,661 10662 ));663 });664}665666#[test]667fn provide_judgement_should_return_judgement_payment_failed_error() {668 new_test_ext().execute_with(|| {669 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));670 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));671 assert_ok!(Identity::set_identity(672 RuntimeOrigin::signed(10),673 Box::new(ten())674 ));675 assert_ok!(Identity::request_judgement(676 RuntimeOrigin::signed(10),677 0,678 10679 ));680 // 10 for the judgement request, 10 for the identity.681 assert_eq!(Balances::free_balance(10), 80);682683 // This forces judgement payment failed error684 Balances::make_free_balance_be(&3, 0);685 assert_noop!(686 Identity::provide_judgement(687 RuntimeOrigin::signed(3),688 0,689 10,690 Judgement::Erroneous,691 BlakeTwo256::hash_of(&ten())692 ),693 Error::<Test>::JudgementPaymentFailed694 );695 });696}697698#[test]699fn field_deposit_should_work() {700 new_test_ext().execute_with(|| {701 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));702 assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));703 assert_ok!(Identity::set_identity(704 RuntimeOrigin::signed(10),705 Box::new(IdentityInfo {706 additional: vec![707 (708 Data::Raw(b"number".to_vec().try_into().unwrap()),709 Data::Raw(10u32.encode().try_into().unwrap())710 ),711 (712 Data::Raw(b"text".to_vec().try_into().unwrap()),713 Data::Raw(b"10".to_vec().try_into().unwrap())714 ),715 ]716 .try_into()717 .unwrap(),718 ..Default::default()719 })720 ));721 assert_eq!(Balances::free_balance(10), 70);722 });723}724725#[test]726fn setting_account_id_should_work() {727 new_test_ext().execute_with(|| {728 assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));729 // account 4 cannot change the first registrar's identity since it's owned by 3.730 assert_noop!(731 Identity::set_account_id(RuntimeOrigin::signed(4), 0, 3),732 Error::<Test>::InvalidIndex733 );734 // account 3 can, because that's the registrar's current account.735 assert_ok!(Identity::set_account_id(RuntimeOrigin::signed(3), 0, 4));736 // account 4 can now, because that's their new ID.737 assert_ok!(Identity::set_account_id(RuntimeOrigin::signed(4), 0, 3));738 });739}740741#[test]742fn test_has_identity() {743 new_test_ext().execute_with(|| {744 assert_ok!(Identity::set_identity(745 RuntimeOrigin::signed(10),746 Box::new(ten())747 ));748 assert!(Identity::has_identity(&10, IdentityField::Display as u64));749 assert!(Identity::has_identity(&10, IdentityField::Legal as u64));750 assert!(Identity::has_identity(751 &10,752 IdentityField::Display as u64 | IdentityField::Legal as u64753 ));754 assert!(!Identity::has_identity(755 &10,756 IdentityField::Display as u64 | IdentityField::Legal as u64 | IdentityField::Web as u64757 ));758 });759}pallets/inflation/src/tests.rsdiffbeforeafterboth--- a/pallets/inflation/src/tests.rs
+++ b/pallets/inflation/src/tests.rs
@@ -58,7 +58,6 @@
type MaxReserves = ();
type ReserveIdentifier = ();
type FreezeIdentifier = ();
- type MaxHolds = ();
type MaxFreezes = ();
type RuntimeHoldReason = RuntimeHoldReason;
type RuntimeFreezeReason = RuntimeFreezeReason;
@@ -103,6 +102,12 @@
type SS58Prefix = SS58Prefix;
type OnSetCode = ();
type MaxConsumers = ConstU32<16>;
+ type RuntimeTask = ();
+ type PreInherents = ();
+ type PostInherents = ();
+ type PostTransactions = ();
+ type SingleBlockMigrations = ();
+ type MultiBlockMigrator = ();
}
parameter_types! {