Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Commit 419b840

Browse files
authored
[Fix] CountedMap::set now takes Counter into account (#13214)
* [Fix] CountedMap::set now takes Counter into account * introduce tests for StorageMap
1 parent e72f72f commit 419b840

File tree

2 files changed

+96
-1
lines changed

2 files changed

+96
-1
lines changed

frame/support/src/storage/types/counted_map.rs

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,10 @@ where
134134

135135
/// Store or remove the value to be associated with `key` so that `get` returns the `query`.
136136
pub fn set<KeyArg: EncodeLike<Key>>(key: KeyArg, q: QueryKind::Query) {
137-
<Self as MapWrapper>::Map::set(key, q)
137+
match QueryKind::from_query_to_optional_value(q) {
138+
Some(v) => Self::insert(key, v),
139+
None => Self::remove(key),
140+
}
138141
}
139142

140143
/// Swap the values of two keys.
@@ -745,6 +748,22 @@ mod test {
745748

746749
// Test initialize_counter.
747750
assert_eq!(A::initialize_counter(), 2);
751+
752+
// Set non-existing.
753+
A::set(30, 100);
754+
755+
assert_eq!(A::contains_key(30), true);
756+
assert_eq!(A::get(30), 100);
757+
assert_eq!(A::try_get(30), Ok(100));
758+
assert_eq!(A::count(), 3);
759+
760+
// Set existing.
761+
A::set(30, 101);
762+
763+
assert_eq!(A::contains_key(30), true);
764+
assert_eq!(A::get(30), 101);
765+
assert_eq!(A::try_get(30), Ok(101));
766+
assert_eq!(A::count(), 3);
748767
})
749768
}
750769

@@ -976,6 +995,40 @@ mod test {
976995

977996
// Test initialize_counter.
978997
assert_eq!(B::initialize_counter(), 2);
998+
999+
// Set non-existing.
1000+
B::set(30, Some(100));
1001+
1002+
assert_eq!(B::contains_key(30), true);
1003+
assert_eq!(B::get(30), Some(100));
1004+
assert_eq!(B::try_get(30), Ok(100));
1005+
assert_eq!(B::count(), 3);
1006+
1007+
// Set existing.
1008+
B::set(30, Some(101));
1009+
1010+
assert_eq!(B::contains_key(30), true);
1011+
assert_eq!(B::get(30), Some(101));
1012+
assert_eq!(B::try_get(30), Ok(101));
1013+
assert_eq!(B::count(), 3);
1014+
1015+
// Unset existing.
1016+
B::set(30, None);
1017+
1018+
assert_eq!(B::contains_key(30), false);
1019+
assert_eq!(B::get(30), None);
1020+
assert_eq!(B::try_get(30), Err(()));
1021+
1022+
assert_eq!(B::count(), 2);
1023+
1024+
// Unset non-existing.
1025+
B::set(31, None);
1026+
1027+
assert_eq!(B::contains_key(31), false);
1028+
assert_eq!(B::get(31), None);
1029+
assert_eq!(B::try_get(31), Err(()));
1030+
1031+
assert_eq!(B::count(), 2);
9791032
})
9801033
}
9811034

frame/support/src/storage/types/map.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,48 @@ mod test {
627627
assert_eq!(AValueQueryWithAnOnEmpty::take(2), 97);
628628
assert_eq!(A::contains_key(2), false);
629629

630+
// Set non-existing.
631+
B::set(30, 100);
632+
633+
assert_eq!(B::contains_key(30), true);
634+
assert_eq!(B::get(30), 100);
635+
assert_eq!(B::try_get(30), Ok(100));
636+
637+
// Set existing.
638+
B::set(30, 101);
639+
640+
assert_eq!(B::contains_key(30), true);
641+
assert_eq!(B::get(30), 101);
642+
assert_eq!(B::try_get(30), Ok(101));
643+
644+
// Set non-existing.
645+
A::set(30, Some(100));
646+
647+
assert_eq!(A::contains_key(30), true);
648+
assert_eq!(A::get(30), Some(100));
649+
assert_eq!(A::try_get(30), Ok(100));
650+
651+
// Set existing.
652+
A::set(30, Some(101));
653+
654+
assert_eq!(A::contains_key(30), true);
655+
assert_eq!(A::get(30), Some(101));
656+
assert_eq!(A::try_get(30), Ok(101));
657+
658+
// Unset existing.
659+
A::set(30, None);
660+
661+
assert_eq!(A::contains_key(30), false);
662+
assert_eq!(A::get(30), None);
663+
assert_eq!(A::try_get(30), Err(()));
664+
665+
// Unset non-existing.
666+
A::set(31, None);
667+
668+
assert_eq!(A::contains_key(31), false);
669+
assert_eq!(A::get(31), None);
670+
assert_eq!(A::try_get(31), Err(()));
671+
630672
B::insert(2, 10);
631673
assert_eq!(A::migrate_key::<Blake2_256, _>(2), Some(10));
632674
assert_eq!(A::contains_key(2), true);

0 commit comments

Comments
 (0)