abstract_sdk/base/features/
identification.rs1use abstract_std::{account::state::ACCOUNT_ID, registry::Account};
2use cosmwasm_std::Deps;
3
4use crate::std::objects::AccountId;
5use crate::AbstractSdkResult;
7
8pub trait AccountIdentification: Sized {
11 fn account(&self, deps: Deps) -> AbstractSdkResult<Account>;
13
14 fn account_id(&self, deps: Deps) -> AbstractSdkResult<AccountId> {
16 ACCOUNT_ID
17 .query(&deps.querier, self.account(deps)?.into_addr())
18 .map_err(Into::into)
19 }
20}
21
22#[cfg(test)]
23mod test {
24 #![allow(clippy::needless_borrows_for_generic_args)]
25 use abstract_testing::prelude::*;
26 use cosmwasm_std::testing::MockApi;
27
28 use super::*;
29
30 struct MockBinding {
31 mock_api: MockApi,
32 }
33
34 impl AccountIdentification for MockBinding {
35 fn account(&self, _deps: Deps) -> AbstractSdkResult<Account> {
36 let account = test_account(self.mock_api);
37 Ok(account)
38 }
39 }
40
41 mod account {
42 use cosmwasm_std::testing::mock_dependencies;
43
44 use super::*;
45
46 #[coverage_helper::test]
47 fn test_account_address() {
48 let deps = mock_dependencies();
49 let binding = MockBinding { mock_api: deps.api };
50
51 let account = test_account(deps.api);
52
53 let res = binding.account(deps.as_ref());
54 assert_eq!(res, Ok(account));
55 }
56
57 #[coverage_helper::test]
58 fn account_id() {
59 let mut deps = mock_dependencies();
60 let account = test_account(deps.api);
61
62 deps.querier = MockQuerierBuilder::default()
63 .with_contract_item(account.addr(), ACCOUNT_ID, &TEST_ACCOUNT_ID)
64 .build();
65
66 let binding = MockBinding { mock_api: deps.api };
67 assert_eq!(binding.account_id(deps.as_ref()), Ok(TEST_ACCOUNT_ID));
68 }
69 }
70}