Newer
Older
//! Mocks for the tokens module.
#![cfg(test)]
traits::{ChangeMembers, ContainsLengthBound, SaturatingCurrencyToVote, SortedMembers},
use orml_traits::parameter_type_with_key;
use sp_runtime::{testing::Header, traits::IdentityLookup, AccountId32, Permill};
pub type AccountId = AccountId32;
pub type CurrencyId = u32;
pub type Balance = u64;
pub const DOT: CurrencyId = 1;
pub const BTC: CurrencyId = 2;
pub const ETH: CurrencyId = 3;
pub const ALICE: AccountId = AccountId32::new([0u8; 32]);
pub const BOB: AccountId = AccountId32::new([1u8; 32]);
pub const TREASURY_ACCOUNT: AccountId = AccountId32::new([2u8; 32]);
pub const ID_1: LockIdentifier = *b"1 ";
pub const ID_2: LockIdentifier = *b"2 ";
pub const ID_3: LockIdentifier = *b"3 ";
parameter_types! {
pub const BlockHashCount: u64 = 250;
}
type Index = u64;
type BlockNumber = u64;
type Hash = H256;
type AccountId = AccountId;
type Lookup = IdentityLookup<Self::AccountId>;
type Header = Header;
type BlockWeights = ();
type BlockLength = ();
static TEN_TO_FOURTEEN: RefCell<Vec<AccountId>> = RefCell::new(vec![
AccountId32::new([10u8; 32]),
AccountId32::new([11u8; 32]),
AccountId32::new([12u8; 32]),
AccountId32::new([13u8; 32]),
AccountId32::new([14u8; 32]),
]);
impl SortedMembers<AccountId> for TenToFourteen {
TEN_TO_FOURTEEN.with(|v| v.borrow().clone())
}
#[cfg(feature = "runtime-benchmarks")]
TEN_TO_FOURTEEN.with(|v| {
let mut members = v.borrow_mut();
impl ContainsLengthBound for TenToFourteen {
fn max_len() -> usize {
TEN_TO_FOURTEEN.with(|v| v.borrow().len())
}
fn min_len() -> usize {
0
}
}
parameter_types! {
pub const ProposalBond: Permill = Permill::from_percent(5);
pub const ProposalBondMinimum: u64 = 1;
pub const SpendPeriod: u64 = 2;
pub const Burn: Permill = Permill::from_percent(50);
pub const TreasuryPalletId: PalletId = PalletId(*b"py/trsry");
type Currency = CurrencyAdapter<Runtime, GetTokenId>;
type ApproveOrigin = frame_system::EnsureRoot<AccountId>;
type RejectOrigin = frame_system::EnsureRoot<AccountId>;
type ProposalBond = ProposalBond;
type ProposalBondMinimum = ProposalBondMinimum;
type SpendPeriod = SpendPeriod;
type Burn = Burn;
pub static MEMBERS: RefCell<Vec<AccountId>> = RefCell::new(vec![]);
pub static PRIME: RefCell<Option<AccountId>> = RefCell::new(None);
impl ChangeMembers<AccountId> for TestChangeMembers {
fn change_members_sorted(incoming: &[AccountId], outgoing: &[AccountId], new: &[AccountId]) {
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
// new, incoming, outgoing must be sorted.
let mut new_sorted = new.to_vec();
new_sorted.sort();
assert_eq!(new, &new_sorted[..]);
let mut incoming_sorted = incoming.to_vec();
incoming_sorted.sort();
assert_eq!(incoming, &incoming_sorted[..]);
let mut outgoing_sorted = outgoing.to_vec();
outgoing_sorted.sort();
assert_eq!(outgoing, &outgoing_sorted[..]);
// incoming and outgoing must be disjoint
for x in incoming.iter() {
assert!(outgoing.binary_search(x).is_err());
}
let mut old_plus_incoming = MEMBERS.with(|m| m.borrow().to_vec());
old_plus_incoming.extend_from_slice(incoming);
old_plus_incoming.sort();
let mut new_plus_outgoing = new.to_vec();
new_plus_outgoing.extend_from_slice(outgoing);
new_plus_outgoing.sort();
assert_eq!(
old_plus_incoming, new_plus_outgoing,
"change members call is incorrect!"
);
MEMBERS.with(|m| *m.borrow_mut() = new.to_vec());
PRIME.with(|p| *p.borrow_mut() = None);
}
PRIME.with(|p| *p.borrow_mut() = who);
}
}
parameter_types! {
pub const ElectionsPhragmenPalletId: LockIdentifier = *b"phrelect";
pub const CandidacyBond: u64 = 3;
pub const VotingBond: u64 = 2;
pub const DesiredMembers: u32 = 2;
pub const DesiredRunnersUp: u32 = 2;
pub const TermDuration: u64 = 5;
pub const VotingBondBase: u64 = 2;
pub const VotingBondFactor: u64 = 0;
impl pallet_elections_phragmen::Config for Runtime {
type Currency = CurrencyAdapter<Runtime, GetTokenId>;
type ChangeMembers = TestChangeMembers;
type InitializeMembers = ();
type CandidacyBond = CandidacyBond;
type VotingBondBase = VotingBondBase;
type VotingBondFactor = VotingBondFactor;
type TermDuration = TermDuration;
type DesiredMembers = DesiredMembers;
type DesiredRunnersUp = DesiredRunnersUp;
type LoserCandidate = ();
type KickedMember = ();
type WeightInfo = ();
}
pub ExistentialDeposits: |currency_id: CurrencyId| -> Balance {
match currency_id {
&BTC => 1,
&DOT => 2,
_ => 0,
}
};
}
parameter_types! {
pub DustAccount: AccountId = PalletId(*b"orml/dst").into_account();
type ExistentialDeposits = ExistentialDeposits;
type OnDust = TransferDust<Runtime, DustAccount>;
pub type TreasuryCurrencyAdapter = <Runtime as pallet_treasury::Config>::Currency;
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>},
Tokens: tokens::{Pallet, Storage, Event<T>, Config<T>},
Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>},
ElectionsPhragmen: pallet_elections_phragmen::{Pallet, Call, Storage, Event<T>},
endowed_accounts: Vec<(AccountId, CurrencyId, Balance)>,
}
impl Default for ExtBuilder {
fn default() -> Self {
Self {
endowed_accounts: vec![],
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, DOT, 100), (BOB, DOT, 100)])
pub fn one_hundred_for_treasury_account(mut self) -> Self {
self.treasury_genesis = true;
.build_storage::<Runtime>()
.unwrap();
balances: self.endowed_accounts,
}
.assimilate_storage(&mut t)
.unwrap();
if self.treasury_genesis {
pallet_treasury::GenesisConfig::default()
.unwrap();
pallet_elections_phragmen::GenesisConfig::<Runtime> {
members: vec![(TREASURY_ACCOUNT, 10)],
}
.assimilate_storage(&mut t)
.unwrap();
}
let mut ext = sp_io::TestExternalities::new(t);
ext.execute_with(|| System::set_block_number(1));
ext