1
use crate::{
2
    contract::execute,
3
    msg::{ExecuteMsg, FeeRecipient},
4
    state::CONFIG,
5
    testing::test_utils::{TEST_CONTRACT_ADDR, TEST_USER_ADDR},
6
    types::Config,
7
};
8

            
9
use cosmwasm_std::testing::{message_info, mock_env};
10
use cosmwasm_std::{coins, Addr};
11

            
12
use injective_cosmwasm::{inj_mock_deps, OwnedDepsExt};
13

            
14
#[test]
15
2
pub fn admin_can_update_config() {
16
3
    let mut deps = inj_mock_deps(|_| {});
17
2

            
18
2
    let config = Config {
19
2
        fee_recipient: Addr::unchecked(TEST_CONTRACT_ADDR),
20
2
        admin: Addr::unchecked(TEST_USER_ADDR),
21
2
    };
22
2
    CONFIG.save(deps.as_mut_deps().storage, &config).expect("could not save config");
23
2

            
24
2
    let new_admin = Addr::unchecked("new_admin");
25
2
    let new_fee_recipient = Addr::unchecked("new_fee_recipient");
26
2

            
27
2
    let info = message_info(&Addr::unchecked(TEST_USER_ADDR), &coins(12, "eth"));
28
2

            
29
2
    let msg = ExecuteMsg::UpdateConfig {
30
2
        admin: Some(new_admin.clone()),
31
2
        fee_recipient: Some(FeeRecipient::Address(new_fee_recipient.clone())),
32
2
    };
33
2

            
34
2
    let res = execute(deps.as_mut(), mock_env(), info, msg).unwrap();
35
2
    assert_eq!(0, res.messages.len(), "no messages expected");
36

            
37
2
    let config = CONFIG.load(deps.as_mut_deps().storage).unwrap();
38
2
    assert_eq!(config.admin, new_admin, "admin was not updated");
39
2
    assert_eq!(config.fee_recipient, new_fee_recipient, "fee_recipient was not updated");
40

            
41
2
    res.events
42
2
        .iter()
43
3
        .find(|e| e.ty == "config_updated")
44
2
        .expect("update_config event expected")
45
2
        .attributes
46
2
        .iter()
47
3
        .find(|a| a.key == "admin" && a.value == new_admin.to_string())
48
2
        .expect("admin attribute expected");
49
2

            
50
2
    res.events
51
2
        .iter()
52
3
        .find(|e| e.ty == "config_updated")
53
2
        .expect("update_config event expected")
54
2
        .attributes
55
2
        .iter()
56
5
        .find(|a| a.key == "fee_recipient" && a.value == new_fee_recipient.to_string())
57
2
        .expect("fee_recipient attribute expected");
58
2
}
59

            
60
#[test]
61
2
pub fn non_admin_cannot_update_config() {
62
3
    let mut deps = inj_mock_deps(|_| {});
63
2

            
64
2
    let config = Config {
65
2
        fee_recipient: Addr::unchecked(TEST_CONTRACT_ADDR),
66
2
        admin: Addr::unchecked(TEST_USER_ADDR),
67
2
    };
68
2
    CONFIG.save(deps.as_mut_deps().storage, &config).expect("could not save config");
69
2

            
70
2
    let new_admin = Addr::unchecked("new_admin");
71
2
    let new_fee_recipient = Addr::unchecked("new_fee_recipient");
72
2

            
73
2
    let info = message_info(&Addr::unchecked("non_admin"), &coins(12, "eth"));
74
2

            
75
2
    let msg = ExecuteMsg::UpdateConfig {
76
2
        admin: Some(new_admin),
77
2
        fee_recipient: Some(FeeRecipient::Address(new_fee_recipient)),
78
2
    };
79
2

            
80
2
    let res = execute(deps.as_mut(), mock_env(), info, msg);
81
2
    assert!(res.is_err(), "expected error on non-admin update config");
82
2
}