mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 13:27:57 +00:00
mutate_exists for StorageValue with ValueQuery (#13245)
* mutate_exists for StorageValue with ValueQuery Signed-off-by: muraca <mmuraca247@gmail.com> * added `#[crate::storage_alias]` to tests Signed-off-by: muraca <mmuraca247@gmail.com> * added StorageEntryMetadata Signed-off-by: muraca <mmuraca247@gmail.com> * Update frame/support/src/lib.rs --------- Signed-off-by: muraca <mmuraca247@gmail.com> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
This commit is contained in:
@@ -874,6 +874,7 @@ pub mod tests {
|
||||
|
||||
decl_storage! {
|
||||
trait Store for Module<T: Config> as Test {
|
||||
pub Value get(fn value): u64;
|
||||
pub Data get(fn data) build(|_| vec![(15u32, 42u64)]):
|
||||
map hasher(twox_64_concat) u32 => u64;
|
||||
pub OptionLinkedMap: map hasher(blake2_128_concat) u32 => Option<u32>;
|
||||
@@ -946,6 +947,61 @@ pub mod tests {
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn storage_value_mutate_exists_should_work() {
|
||||
new_test_ext().execute_with(|| {
|
||||
#[crate::storage_alias]
|
||||
pub type Value = StorageValue<Test, u32>;
|
||||
|
||||
assert!(!Value::exists());
|
||||
|
||||
Value::mutate_exists(|v| *v = Some(1));
|
||||
assert!(Value::exists());
|
||||
assert_eq!(Value::get(), Some(1));
|
||||
|
||||
// removed if mutated to `None`
|
||||
Value::mutate_exists(|v| *v = None);
|
||||
assert!(!Value::exists());
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn storage_value_try_mutate_exists_should_work() {
|
||||
new_test_ext().execute_with(|| {
|
||||
#[crate::storage_alias]
|
||||
pub type Value = StorageValue<Test, u32>;
|
||||
|
||||
type TestResult = result::Result<(), &'static str>;
|
||||
|
||||
assert!(!Value::exists());
|
||||
|
||||
// mutated if `Ok`
|
||||
assert_ok!(Value::try_mutate_exists(|v| -> TestResult {
|
||||
*v = Some(1);
|
||||
Ok(())
|
||||
}));
|
||||
assert!(Value::exists());
|
||||
assert_eq!(Value::get(), Some(1));
|
||||
|
||||
// no-op if `Err`
|
||||
assert_noop!(
|
||||
Value::try_mutate_exists(|v| -> TestResult {
|
||||
*v = Some(2);
|
||||
Err("nah")
|
||||
}),
|
||||
"nah"
|
||||
);
|
||||
assert_eq!(Value::get(), Some(1));
|
||||
|
||||
// removed if mutated to`None`
|
||||
assert_ok!(Value::try_mutate_exists(|v| -> TestResult {
|
||||
*v = None;
|
||||
Ok(())
|
||||
}));
|
||||
assert!(!Value::exists());
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn map_issue_3318() {
|
||||
new_test_ext().execute_with(|| {
|
||||
@@ -1257,6 +1313,13 @@ pub mod tests {
|
||||
PalletStorageMetadata {
|
||||
prefix: "Test",
|
||||
entries: vec![
|
||||
StorageEntryMetadata {
|
||||
name: "Value",
|
||||
modifier: StorageEntryModifier::Default,
|
||||
ty: StorageEntryType::Plain(scale_info::meta_type::<u64>()),
|
||||
default: vec![0, 0, 0, 0, 0, 0, 0, 0],
|
||||
docs: vec![],
|
||||
},
|
||||
StorageEntryMetadata {
|
||||
name: "Data",
|
||||
modifier: StorageEntryModifier::Default,
|
||||
|
||||
Reference in New Issue
Block a user