something_for_tests/
state.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use cosmwasm_std::{Addr, Uint128};
5use cw_storage_plus::{Item, Map};
6
7use cw20::AllowanceResponse;
8
9#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
10#[serde(rename_all = "snake_case")]
11pub struct TokenInfo {
12    pub name: String,
13    pub symbol: String,
14    pub decimals: u8,
15    pub total_supply: Uint128,
16    pub mint: Option<MinterData>,
17}
18
19#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
20pub struct MinterData {
21    pub minter: Addr,
22    /// cap is how many more tokens can be issued by the minter
23    pub cap: Option<Uint128>,
24}
25
26impl TokenInfo {
27    pub fn get_cap(&self) -> Option<Uint128> {
28        self.mint.as_ref().and_then(|v| v.cap)
29    }
30}
31
32pub const TOKEN_INFO: Item<TokenInfo> = Item::new("\u{0}\ntoken_info");
33pub const BALANCES: Map<&Addr, Uint128> = Map::new("balance");
34pub const ALLOWANCES: Map<(&Addr, &Addr), AllowanceResponse> = Map::new("allowance");
35
36
37#[cfg(test)]
38mod test {
39    use super::*;
40
41    use cosmwasm_std::testing::mock_dependencies;
42    use cosmwasm_std::{StdResult, Storage};
43    use cosmwasm_storage::{singleton, singleton_read};
44
45    pub static TOKEN_INFO_KEY: &[u8] = b"token_info";
46
47    pub fn store_token_info(storage: &mut dyn Storage, token_info: &TokenInfo) -> StdResult<()> {
48        singleton(storage, TOKEN_INFO_KEY).save(token_info)
49    }
50    pub fn read_token_info(storage: &dyn Storage) -> StdResult<TokenInfo> {
51        singleton_read(storage, TOKEN_INFO_KEY).load()
52    }
53
54    #[test]
55    fn token_info_legacy_compatibility() {
56        let mut deps = mock_dependencies(&[]);
57        store_token_info(
58            &mut deps.storage,
59           &TokenInfo{
60               name: "test".to_string(),
61               symbol: "TEST".to_string(),
62               decimals: 6,
63               total_supply: Default::default(),
64               mint: None
65           }
66        )
67            .unwrap();
68
69        assert_eq!(
70            TOKEN_INFO.load(&deps.storage).unwrap(),
71            read_token_info(&deps.storage).unwrap()
72        );
73    }
74}