pryzm_testing/
querier.rs

1use cosmwasm_std::{
2    to_json_binary, to_json_vec, ContractResult, Querier as CWStdQuerier, QuerierResult,
3    SystemResult, WasmQuery,
4};
5use cosmwasm_std::{Empty, QueryRequest};
6use mockall::predicate::*;
7use mockall::*;
8use serde::Serialize;
9
10mock! {
11    StdQuerier {}
12    impl CWStdQuerier for StdQuerier {
13        fn raw_query(&self, bin_request: &[u8]) -> QuerierResult;
14    }
15}
16
17pub struct MockQuerier {
18    inner_mock: MockStdQuerier,
19}
20
21impl CWStdQuerier for MockQuerier {
22    fn raw_query(&self, bin_request: &[u8]) -> QuerierResult {
23        self.inner_mock.raw_query(bin_request)
24    }
25}
26
27impl Default for MockQuerier {
28    fn default() -> Self {
29        Self::new()
30    }
31}
32
33impl MockQuerier {
34    pub fn new() -> Self {
35        Self {
36            inner_mock: MockStdQuerier::new(),
37        }
38    }
39
40    pub fn mock_query<T>(&mut self, request: QueryRequest<Empty>, response: &T)
41    where
42        T: Serialize + ?Sized,
43    {
44        self.inner_mock
45            .expect_raw_query()
46            .with(eq(to_json_vec(&request).unwrap()))
47            .return_const(SystemResult::Ok(ContractResult::Ok(
48                to_json_binary(response).unwrap(),
49            )));
50    }
51
52    pub fn mock_query_wasm<T>(&mut self, contract_addr: String, msg: &impl Serialize, response: &T)
53    where
54        T: Serialize + ?Sized,
55    {
56        self.mock_query(
57            QueryRequest::Wasm(WasmQuery::Smart {
58                contract_addr,
59                msg: to_json_binary(msg).unwrap(),
60            }),
61            response,
62        );
63    }
64}