Add proper test Custom values (#1147)

* add proper tests for custom values

* remove try operators

* use sustrate compat for import of hash

* add license and hex

* add script to artifacts.sh

* custom values with ids not in metadata can be accessed in static interface

* fmt and clippy

* access bytes of custom values directly, even if type id wrong

* final fixes

* removing substrate-compat flag from ui tests

* Update subxt/src/custom_values/custom_values_client.rs

Co-authored-by: James Wilson <james@jsdw.me>

* remove types access in type generator

* 2 extra lines

---------

Co-authored-by: James Wilson <james@jsdw.me>
This commit is contained in:
Tadeo Hepperle
2023-09-12 15:46:12 +02:00
committed by GitHub
parent 022d709d02
commit c8462defab
22 changed files with 208 additions and 44 deletions
@@ -0,0 +1,47 @@
use codec::{Decode};
use subxt::{config::substrate::H256, OfflineClient, PolkadotConfig};
use subxt_metadata::Metadata;
#[subxt::subxt(runtime_metadata_path = "../../../../artifacts/metadata_with_custom_values.scale", derive_for_all_types = "Eq, PartialEq")]
pub mod node {}
use node::runtime_types::generate_custom_metadata::Foo;
fn main() {
let api = construct_offline_client();
let expected_foo = Foo {
a: 42,
b: "Have a great day!".into(),
};
// static query:
let foo_address = node::custom().foo();
let foo = api.custom_values().at(&foo_address).unwrap();
assert_eq!(foo, expected_foo);
// dynamic query:
let foo_value = api.custom_values().at("Foo").unwrap();
let foo: Foo = foo_value.as_type().unwrap();
assert_eq!(foo, expected_foo);
// static query for some custom value that has an invalid type id: (we can still access the bytes)
let custom_bytes = api.custom_values().bytes_at("InvalidTypeId").unwrap();
assert_eq!(vec![0,1,2,3], custom_bytes);
}
fn construct_offline_client() -> OfflineClient<PolkadotConfig> {
let genesis_hash = {
let h = "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3";
let bytes = hex::decode(h).unwrap();
H256::from_slice(&bytes)
};
let runtime_version = subxt::backend::RuntimeVersion {
spec_version: 9370,
transaction_version: 20,
};
let metadata = {
let bytes = std::fs::read("../../../../artifacts/metadata_with_custom_values.scale").unwrap();
Metadata::decode(&mut &*bytes).unwrap()
};
OfflineClient::<PolkadotConfig>::new(genesis_hash, runtime_version, metadata)
}