#![cfg(feature = "integration-tests")]
use anyhow::Result;
use pop_common::{format_type, test_env::shared_substrate_ws_url};
use subxt::{OnlineClient, SubstrateConfig};
#[tokio::test]
async fn format_type_works() -> Result<()> {
let node_url = shared_substrate_ws_url().await;
let client = OnlineClient::<SubstrateConfig>::from_url(&node_url).await?;
let metadata = client.metadata();
let registry = metadata.types();
let assets_create_extrinsic = metadata
.pallet_by_name("Assets")
.unwrap()
.call_variant_by_name("create")
.unwrap();
let assets_create_types: Vec<String> = assets_create_extrinsic
.fields
.iter()
.map(|field| {
let type_info = registry.resolve(field.ty.id).unwrap();
format_type(type_info, registry)
})
.collect();
assert_eq!(assets_create_types.len(), 3);
assert_eq!(assets_create_types[0], "Compact<u32>"); assert_eq!(
assets_create_types[1],
"MultiAddress<AccountId32 ([u8;32]), ()>: Id(AccountId32 ([u8;32])), Index(Compact<()>), Raw([u8]), Address32([u8;32]), Address20([u8;20])"
); assert_eq!(assets_create_types[2], "u128");
let system_remark_extrinsic = metadata
.pallet_by_name("System")
.unwrap()
.call_variant_by_name("remark")
.unwrap();
let system_remark_types: Vec<String> = system_remark_extrinsic
.fields
.iter()
.map(|field| {
let type_info = registry.resolve(field.ty.id).unwrap();
format_type(type_info, registry)
})
.collect();
assert_eq!(system_remark_types.len(), 1);
assert_eq!(system_remark_types[0], "[u8]");
let system_set_storage_extrinsic = metadata
.pallet_by_name("System")
.unwrap()
.call_variant_by_name("set_storage")
.unwrap();
let system_set_storage_types: Vec<String> = system_set_storage_extrinsic
.fields
.iter()
.map(|field| {
let type_info = registry.resolve(field.ty.id).unwrap();
format_type(type_info, registry)
})
.collect();
assert_eq!(system_set_storage_types.len(), 1);
assert_eq!(system_set_storage_types[0], "[([u8], [u8])]");
Ok(())
}