1#![cfg_attr(all(coverage_nightly, test), feature(coverage_attribute))]
2
3pub mod config;
4pub mod contract;
5pub mod error;
6pub mod execution;
7pub mod migrate;
8pub mod modules;
9pub mod queries;
10pub mod reply;
11pub mod sub_account;
12pub mod versioning;
13
14pub mod state {
15 pub use abstract_std::account::state::*;
16
17 #[cfg(feature = "xion")]
18 pub use abstract_xion::state::*;
19}
20
21#[cfg(feature = "xion")]
23pub use abstract_xion;
24
25pub mod msg {
27 pub use abstract_std::account::{MigrateMsg, QueryMsg};
28
29 #[cfg(feature = "xion")]
30 pub type Authenticator = crate::abstract_xion::AddAuthenticator;
31 #[cfg(not(feature = "xion"))]
32 pub type Authenticator = cosmwasm_std::Empty;
33
34 pub type ExecuteMsg = abstract_std::account::ExecuteMsg<Authenticator>;
35 pub type InstantiateMsg = abstract_std::account::InstantiateMsg<Authenticator>;
36}
37
38#[cfg(test)]
39mod test_common {
40 use abstract_std::{
41 account::{self},
42 objects::{account::AccountTrace, gov_type::GovernanceDetails, ownership, AccountId},
43 };
44 use abstract_testing::prelude::*;
45 use cosmwasm_std::{testing::*, Addr, Empty, OwnedDeps};
46
47 use crate::{contract::AccountResult, error::AccountError, msg::ExecuteMsg};
48
49 pub(crate) fn mock_init(
51 deps: &mut OwnedDeps<MockStorage, MockApi, MockQuerier, Empty>,
52 ) -> AccountResult {
53 let abstr = AbstractMockAddrs::new(deps.api);
54
55 let info = message_info(&abstr.owner, &[]);
56 let env = mock_env_validated(deps.api);
57
58 crate::contract::instantiate(
59 deps.as_mut(),
60 env,
61 info,
62 account::InstantiateMsg {
63 code_id: 1,
64 account_id: Some(AccountId::new(1, AccountTrace::Local).unwrap()),
65 owner: Some(GovernanceDetails::Monarchy {
66 monarch: abstr.owner.to_string(),
67 }),
68 namespace: None,
69 name: Some("test".to_string()),
70 description: None,
71 link: None,
72 install_modules: vec![],
73 authenticator: None,
74 },
75 )
76 }
77
78 pub fn test_only_owner(msg: ExecuteMsg) -> anyhow::Result<()> {
79 let mut deps = mock_dependencies();
80 deps.querier = abstract_mock_querier(deps.api);
81 let not_owner = deps.api.addr_make("not_owner");
82 mock_init(&mut deps)?;
83
84 let res = execute_as(&mut deps, ¬_owner, msg);
85 assert_eq!(
86 res,
87 Err(AccountError::Ownership(
88 ownership::GovOwnershipError::NotOwner,
89 ))
90 );
91
92 Ok(())
93 }
94
95 pub fn execute_as(deps: &mut MockDeps, sender: &Addr, msg: ExecuteMsg) -> AccountResult {
96 let env = mock_env_validated(deps.api);
97 crate::contract::execute(deps.as_mut(), env, message_info(sender, &[]), msg)
98 }
99
100 pub fn execute_as_admin(deps: &mut MockDeps, msg: ExecuteMsg) -> AccountResult {
101 let abstr = AbstractMockAddrs::new(deps.api);
102 let info = message_info(&abstr.owner, &[]);
103 let env = mock_env_validated(deps.api);
104 crate::contract::execute(deps.as_mut(), env, info, msg)
105 }
106}