//! Mocks for the currencies module. #![cfg(test)] use super::*; use frame_support::{construct_runtime, parameter_types, PalletId}; use orml_traits::parameter_type_with_key; use sp_core::H256; use sp_runtime::{ testing::Header, traits::{AccountIdConversion, IdentityLookup}, AccountId32, }; use crate as currencies; parameter_types! { pub const BlockHashCount: u64 = 250; } pub type AccountId = AccountId32; impl frame_system::Config for Runtime { type Origin = Origin; type Call = Call; type Index = u64; type BlockNumber = u64; type Hash = H256; type Hashing = ::sp_runtime::traits::BlakeTwo256; type AccountId = AccountId; type Lookup = IdentityLookup<Self::AccountId>; type Header = Header; type Event = Event; type BlockHashCount = BlockHashCount; type BlockWeights = (); type BlockLength = (); type Version = (); type PalletInfo = PalletInfo; type AccountData = pallet_balances::AccountData<u64>; type OnNewAccount = (); type OnKilledAccount = (); type DbWeight = (); type BaseCallFilter = (); type SystemWeightInfo = (); type SS58Prefix = (); type OnSetCode = (); } type CurrencyId = u32; type Balance = u64; parameter_types! { pub const ExistentialDeposit: u64 = 1; } impl pallet_balances::Config for Runtime { type Balance = Balance; type DustRemoval = (); type Event = Event; type ExistentialDeposit = ExistentialDeposit; type AccountStore = frame_system::Pallet<Runtime>; type MaxLocks = (); type WeightInfo = (); } parameter_type_with_key! { pub ExistentialDeposits: |_currency_id: CurrencyId| -> Balance { Default::default() }; } parameter_types! { pub DustAccount: AccountId = PalletId(*b"orml/dst").into_account(); pub MaxLocks: u32 = 100_000; } impl orml_tokens::Config for Runtime { type Event = Event; type Balance = Balance; type Amount = i64; type CurrencyId = CurrencyId; type WeightInfo = (); type ExistentialDeposits = ExistentialDeposits; type OnDust = orml_tokens::TransferDust<Runtime, DustAccount>; type MaxLocks = MaxLocks; } pub const NATIVE_CURRENCY_ID: CurrencyId = 1; pub const X_TOKEN_ID: CurrencyId = 2; parameter_types! { pub const GetNativeCurrencyId: CurrencyId = NATIVE_CURRENCY_ID; } impl Config for Runtime { type Event = Event; type MultiCurrency = Tokens; type NativeCurrency = AdaptedBasicCurrency; type GetNativeCurrencyId = GetNativeCurrencyId; type WeightInfo = (); } pub type NativeCurrency = NativeCurrencyOf<Runtime>; pub type AdaptedBasicCurrency = BasicCurrencyAdapter<Runtime, PalletBalances, i64, u64>; type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Runtime>; type Block = frame_system::mocking::MockBlock<Runtime>; construct_runtime!( pub enum Runtime where Block = Block, NodeBlock = Block, UncheckedExtrinsic = UncheckedExtrinsic, { System: frame_system::{Pallet, Call, Storage, Config, Event<T>}, Currencies: currencies::{Pallet, Call, Event<T>}, Tokens: orml_tokens::{Pallet, Storage, Event<T>, Config<T>}, PalletBalances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>}, } ); pub const ALICE: AccountId = AccountId32::new([1u8; 32]); pub const BOB: AccountId = AccountId32::new([2u8; 32]); pub const EVA: AccountId = AccountId32::new([5u8; 32]); pub const ID_1: LockIdentifier = *b"1 "; pub struct ExtBuilder { endowed_accounts: Vec<(AccountId, CurrencyId, Balance)>, } impl Default for ExtBuilder { fn default() -> Self { Self { endowed_accounts: vec![], } } } impl ExtBuilder { pub fn balances(mut self, endowed_accounts: Vec<(AccountId, CurrencyId, Balance)>) -> Self { self.endowed_accounts = endowed_accounts; self } pub fn one_hundred_for_alice_n_bob(self) -> Self { self.balances(vec![ (ALICE, NATIVE_CURRENCY_ID, 100), (BOB, NATIVE_CURRENCY_ID, 100), (ALICE, X_TOKEN_ID, 100), (BOB, X_TOKEN_ID, 100), ]) } pub fn build(self) -> sp_io::TestExternalities { let mut t = frame_system::GenesisConfig::default() .build_storage::<Runtime>() .unwrap(); pallet_balances::GenesisConfig::<Runtime> { balances: self .endowed_accounts .clone() .into_iter() .filter(|(_, currency_id, _)| *currency_id == NATIVE_CURRENCY_ID) .map(|(account_id, _, initial_balance)| (account_id, initial_balance)) .collect::<Vec<_>>(), } .assimilate_storage(&mut t) .unwrap(); orml_tokens::GenesisConfig::<Runtime> { endowed_accounts: self .endowed_accounts .into_iter() .filter(|(_, currency_id, _)| *currency_id != NATIVE_CURRENCY_ID) .collect::<Vec<_>>(), } .assimilate_storage(&mut t) .unwrap(); t.into() } }