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}