injective_cosmwasm/
test_helpers.rs1#[cfg(not(target_arch = "wasm32"))]
2pub(crate) mod testing_helpers {
3
4 use std::marker::PhantomData;
5 use std::str::FromStr;
6 use std::string::ToString;
7
8 use cosmwasm_std::testing::{MockApi, MockStorage};
9 use cosmwasm_std::{
10 Addr, Api, BlockInfo, ContractInfo, CustomQuery, DepsMut, Env, OwnedDeps, Querier, QuerierWrapper, Storage, Timestamp, TransactionInfo,
11 };
12
13 use injective_math::FPDecimal;
14
15 use crate::MarketStatus;
16 use crate::{
17 exchange::{spot_market::SpotMarket, types::MarketId},
18 InjectiveQueryWrapper, WasmMockQuerier,
19 };
20
21 pub const TEST_CONTRACT_ADDR: &str = "inj14hj2tavq8fpesdwxxcu44rty3hh90vhujaxlnz";
22
23 pub const TEST_MARKET_ID_1: &str = "0xb0f0cd5dc3d18e0407b88a683871399d52483f06c757858a3a9f388877232b11";
24 pub const TEST_MARKET_ID_2: &str = "0xa815458b073ea303494e0c87f532483834f85622e1db1ad08e4ece2d360b248d";
25 pub const TEST_MARKET_ID_3: &str = "0x0fb00a5b353c58e92ec15e054473b04ecd80c6aec0294cd6702d45e53cdee791";
26 pub const TEST_MARKET_ID_4: &str = "0xcde25cd74f38858ac4514412da4363e162bf76f6ae8b462b02e0450d8c8ce78a";
27 pub const TEST_MARKET_ID_5: &str = "0x631000a7505094f18446cb6e29a47d1c2a10f44ddb57c021bc0f782adc5ae181";
28 pub const TEST_MARKET_ID_6: &str = "0xae28d026f7df038b4a91513181446b9985bdb532485c4d57c8d130d91ba9ce91";
29 pub const TEST_MARKET_ID_7: &str = "0x071e1baf54139efc4f4e7897412fde9d06836e12ecbe8b5736c954c0609514d7";
30 pub const TEST_MARKET_ID_8: &str = "0x2b0524a1b95942c28de4463d67bb24e0104fd853582a327b3af136d32a84f15d";
31 pub const TEST_MARKET_ID_9: &str = "0x92194a85e26a47057c0180465229803c41603b5e9db0dcb54ae4300b023369a4";
32 pub const TEST_MARKET_ID_10: &str = "0xc95810e76d34530ce1dc6ca25eb82123e49033f1e5e36db9a0639003267fac32";
33
34 pub fn test_market_ids() -> Vec<MarketId> {
35 vec![
36 MarketId::new(TEST_MARKET_ID_1.to_string()).unwrap(),
37 MarketId::new(TEST_MARKET_ID_2.to_string()).unwrap(),
38 MarketId::new(TEST_MARKET_ID_3.to_string()).unwrap(),
39 MarketId::new(TEST_MARKET_ID_4.to_string()).unwrap(),
40 MarketId::new(TEST_MARKET_ID_5.to_string()).unwrap(),
41 MarketId::new(TEST_MARKET_ID_6.to_string()).unwrap(),
42 MarketId::new(TEST_MARKET_ID_7.to_string()).unwrap(),
43 MarketId::new(TEST_MARKET_ID_8.to_string()).unwrap(),
44 MarketId::new(TEST_MARKET_ID_9.to_string()).unwrap(),
45 MarketId::new(TEST_MARKET_ID_10.to_string()).unwrap(),
46 ]
47 }
48
49 pub fn inj_mock_env() -> Env {
50 Env {
51 block: BlockInfo {
52 height: 12_345,
53 time: Timestamp::from_nanos(1_571_797_419_879_305_533),
54 chain_id: "cosmos-testnet-14002".to_string(),
55 },
56 transaction: Some(TransactionInfo { index: 3 }),
57 contract: ContractInfo {
58 address: Addr::unchecked(TEST_CONTRACT_ADDR),
59 },
60 }
61 }
62
63 pub trait OwnedDepsExt<S, A, Q, C>
64 where
65 C: CustomQuery,
66 {
67 fn as_mut_deps(&mut self) -> DepsMut<C>;
68 }
69
70 impl<S, A, Q, C> OwnedDepsExt<S, A, Q, C> for OwnedDeps<S, A, Q, C>
71 where
72 S: Storage,
73 A: Api,
74 Q: Querier,
75 C: CustomQuery,
76 {
77 fn as_mut_deps(&mut self) -> DepsMut<C> {
78 DepsMut {
79 storage: &mut self.storage,
80 api: &self.api,
81 querier: QuerierWrapper::new(&self.querier),
82 }
83 }
84 }
85
86 pub fn inj_mock_deps<F>(handlers_callback: F) -> OwnedDeps<MockStorage, MockApi, WasmMockQuerier, InjectiveQueryWrapper>
87 where
88 F: FnOnce(&mut WasmMockQuerier),
89 {
90 let mut custom_querier: WasmMockQuerier = WasmMockQuerier::new();
91 handlers_callback(&mut custom_querier);
92 OwnedDeps {
93 api: MockApi::default(),
94 storage: MockStorage::default(),
95 querier: custom_querier,
96 custom_query_type: PhantomData,
97 }
98 }
99
100 pub fn create_mock_spot_market(base: &str, idx: u32) -> SpotMarket {
101 SpotMarket {
102 ticker: format!("{base}usdt"),
103 base_denom: base.to_string(),
104 quote_denom: "usdt".to_string(),
105 maker_fee_rate: FPDecimal::from_str("0.001").unwrap(),
106 taker_fee_rate: FPDecimal::from_str("0.002").unwrap(),
107 relayer_fee_share_rate: FPDecimal::from_str("0.4").unwrap(),
108 market_id: test_market_ids()[idx as usize].clone(),
109 status: MarketStatus::Active,
110 min_price_tick_size: FPDecimal::from_str("0.01").unwrap(),
111 min_quantity_tick_size: FPDecimal::from_str("0.01").unwrap(),
112 min_notional: FPDecimal::from_str("0.01").unwrap(),
113 }
114 }
115}