abstract_sdk/base/features/
identification.rs

1use abstract_std::{account::state::ACCOUNT_ID, registry::Account};
2use cosmwasm_std::Deps;
3
4use crate::std::objects::AccountId;
5// see std::account::state::ADMIN
6use crate::AbstractSdkResult;
7
8/// Retrieve identifying information about an Account.
9/// This includes the account and account_id.
10pub trait AccountIdentification: Sized {
11    /// Get the account address
12    fn account(&self, deps: Deps) -> AbstractSdkResult<Account>;
13
14    /// Get the Account id for the current account.
15    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}