cosmwasm_std/testing/
message_info.rs

1use crate::{Addr, Coin, MessageInfo};
2
3/// A constructor function for [`MessageInfo`].
4///
5/// This is designed for writing contract tests.
6/// It lives in `cosmwasm_std::testing` because constructing MessageInfo
7/// objects is not something that you usually need in contract code.
8///
9/// ## Examples
10///
11/// ```
12/// # use cosmwasm_std::{DepsMut, Env, Response, MessageInfo, StdResult};
13/// # struct InstantiateMsg {
14/// #     pub verifier: String,
15/// #     pub beneficiary: String,
16/// # }
17/// # pub fn instantiate(
18/// #     _deps: DepsMut,
19/// #     _env: Env,
20/// #     _info: MessageInfo,
21/// #     _msg: InstantiateMsg,
22/// # ) -> StdResult<Response> {
23/// #     Ok(Response::new().add_attribute("action", "instantiate"))
24/// # }
25/// use cosmwasm_std::coins;
26/// use cosmwasm_std::testing::{message_info, mock_dependencies, mock_env};
27///
28/// let mut deps = mock_dependencies();
29///
30/// // Create some Addr instances for testing
31/// let creator = deps.api.addr_make("creator");
32/// let verifier = deps.api.addr_make("verifies");
33/// let beneficiary = deps.api.addr_make("benefits");
34///
35/// let msg = InstantiateMsg {
36///     verifier: verifier.to_string(),
37///     beneficiary: beneficiary.to_string(),
38/// };
39/// let info = message_info(&creator, &coins(1000, "earth"));
40/// let response = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap();
41/// assert_eq!(response.messages.len(), 0);
42/// ```
43pub fn message_info(sender: &Addr, funds: &[Coin]) -> MessageInfo {
44    MessageInfo {
45        sender: sender.clone(),
46        funds: funds.to_vec(),
47    }
48}
49
50#[cfg(test)]
51mod tests {
52    use crate::{coins, Uint256};
53
54    use super::*;
55
56    #[test]
57    fn message_info_works() {
58        let addr = Addr::unchecked("cosmwasm1...");
59
60        let info = message_info(&addr, &[]);
61        assert_eq!(
62            info,
63            MessageInfo {
64                sender: addr.clone(),
65                funds: vec![],
66            }
67        );
68
69        let info = message_info(&addr, &coins(123, "foo"));
70        assert_eq!(
71            info,
72            MessageInfo {
73                sender: addr.clone(),
74                funds: vec![Coin {
75                    amount: Uint256::new(123),
76                    denom: "foo".to_string(),
77                }],
78            }
79        );
80    }
81}