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}