1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
use num_traits::identities::Zero;
use engine_core::engine_state::genesis::{GenesisAccount, GenesisConfig};
use engine_shared::motes::Motes;
use types::{AccessRights, Key, URef, U512};
use crate::{
internal::{InMemoryWasmTestBuilder, DEFAULT_GENESIS_CONFIG},
Error, PublicKey, Result, Session, URefAddr, Value,
};
pub struct TestContext {
inner: InMemoryWasmTestBuilder,
}
impl TestContext {
pub fn run(&mut self, session: Session) -> &mut Self {
self.inner
.exec(session.inner)
.expect_success()
.commit()
.expect_success();
self
}
pub fn query<T: AsRef<str>>(&self, key: PublicKey, path: &[T]) -> Result<Value> {
let path = path.iter().map(AsRef::as_ref).collect::<Vec<_>>();
self.inner
.query(None, Key::Account(key), &path)
.map(Value::new)
.map_err(Error::from)
}
pub fn get_balance(&self, purse_addr: URefAddr) -> U512 {
let purse = URef::new(purse_addr, AccessRights::READ);
self.inner.get_purse_balance(purse)
}
}
pub struct TestContextBuilder {
genesis_config: GenesisConfig,
}
impl TestContextBuilder {
pub fn new() -> Self {
TestContextBuilder {
genesis_config: DEFAULT_GENESIS_CONFIG.clone(),
}
}
pub fn with_account(mut self, address: PublicKey, initial_balance: U512) -> Self {
let new_account = GenesisAccount::new(address, Motes::new(initial_balance), Motes::zero());
self.genesis_config.push_account(new_account);
self
}
pub fn build(self) -> TestContext {
let mut inner = InMemoryWasmTestBuilder::default();
inner.run_genesis(&self.genesis_config);
TestContext { inner }
}
}
impl Default for TestContextBuilder {
fn default() -> Self {
TestContextBuilder::new()
}
}