use crate::{addresses::*, mock_ans::MockAnsHost, MockQuerierBuilder};
use abstract_core::objects::common_namespace::OWNERSHIP_STORAGE_KEY;
use abstract_core::{
ans_host::state::ASSET_ADDRESSES,
objects::{account_id::ACCOUNT_ID, common_namespace::ADMIN_NAMESPACE, AssetEntry},
version_control::{state::ACCOUNT_ADDRESSES, AccountBase},
};
use cosmwasm_std::{testing::MockQuerier, Addr};
use cw_asset::AssetInfo;
use cw_ownable::Ownership;
use cw_storage_plus::Item;
pub fn mocked_account_querier_builder() -> AbstractMockQuerierBuilder {
AbstractMockQuerierBuilder::default().account(TEST_MANAGER, TEST_PROXY, TEST_ACCOUNT_ID)
}
pub struct AbstractMockQuerierBuilder {
builder: MockQuerierBuilder,
version_control: &'static str,
}
impl Default for AbstractMockQuerierBuilder {
fn default() -> Self {
Self {
builder: MockQuerierBuilder::default(),
version_control: TEST_VERSION_CONTROL,
}
}
}
impl AbstractMockQuerierBuilder {
pub fn account(mut self, manager: &str, proxy: &str, account_id: u32) -> Self {
self.builder = self
.builder
.with_contract_item(proxy, ACCOUNT_ID, &account_id)
.with_contract_item(manager, ACCOUNT_ID, &account_id)
.with_contract_item(
proxy,
Item::new(ADMIN_NAMESPACE),
&Some(Addr::unchecked(manager)),
)
.with_contract_item(
manager,
Item::new(OWNERSHIP_STORAGE_KEY),
&Some(Ownership {
owner: Some(Addr::unchecked(TEST_OWNER)),
pending_owner: None,
pending_expiry: None,
}),
)
.with_contract_map_entry(
self.version_control,
ACCOUNT_ADDRESSES,
(
account_id,
AccountBase {
manager: Addr::unchecked(manager),
proxy: Addr::unchecked(proxy),
},
),
);
self
}
pub fn assets(mut self, assets: Vec<(&AssetEntry, AssetInfo)>) -> Self {
self.builder =
self.builder
.with_contract_map_entries(TEST_ANS_HOST, ASSET_ADDRESSES, assets);
self
}
pub fn set_version_control(mut self, version_control: &'static str) -> Self {
self.version_control = version_control;
self
}
pub fn ans(self, _ans: MockAnsHost) -> Self {
self
}
pub fn builder(self) -> MockQuerierBuilder {
self.builder
}
pub fn build(self) -> MockQuerier {
self.builder.build()
}
}