abstract_sdk/base/features/
identification.rsuse abstract_std::{account::state::ACCOUNT_ID, registry::Account};
use cosmwasm_std::Deps;
use crate::std::objects::AccountId;
use crate::AbstractSdkResult;
pub trait AccountIdentification: Sized {
fn account(&self, deps: Deps) -> AbstractSdkResult<Account>;
fn account_id(&self, deps: Deps) -> AbstractSdkResult<AccountId> {
ACCOUNT_ID
.query(&deps.querier, self.account(deps)?.into_addr())
.map_err(Into::into)
}
}
#[cfg(test)]
mod test {
#![allow(clippy::needless_borrows_for_generic_args)]
use abstract_testing::prelude::*;
use cosmwasm_std::testing::MockApi;
use super::*;
struct MockBinding {
mock_api: MockApi,
}
impl AccountIdentification for MockBinding {
fn account(&self, _deps: Deps) -> AbstractSdkResult<Account> {
let account = test_account(self.mock_api);
Ok(account)
}
}
mod account {
use cosmwasm_std::testing::mock_dependencies;
use super::*;
#[coverage_helper::test]
fn test_account_address() {
let deps = mock_dependencies();
let binding = MockBinding { mock_api: deps.api };
let account = test_account(deps.api);
let res = binding.account(deps.as_ref());
assert_eq!(res, Ok(account));
}
#[coverage_helper::test]
fn account_id() {
let mut deps = mock_dependencies();
let account = test_account(deps.api);
deps.querier = MockQuerierBuilder::default()
.with_contract_item(account.addr(), ACCOUNT_ID, &TEST_ACCOUNT_ID)
.build();
let binding = MockBinding { mock_api: deps.api };
assert_eq!(binding.account_id(deps.as_ref()), Ok(TEST_ACCOUNT_ID));
}
}
}