injective_cosmwasm/
test_helpers.rs

1#[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}