From 64d970091906edd86806e070b003b9eca186f601 Mon Sep 17 00:00:00 2001
From: Hugo Trentesaux <hugo@trentesaux.fr>
Date: Mon, 13 Jan 2025 19:41:54 +0100
Subject: [PATCH] reveal bug from #276

---
 pallets/smith-members/src/tests.rs | 43 ++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/pallets/smith-members/src/tests.rs b/pallets/smith-members/src/tests.rs
index 0ac9ba7ed..c04bd2d17 100644
--- a/pallets/smith-members/src/tests.rs
+++ b/pallets/smith-members/src/tests.rs
@@ -628,6 +628,49 @@ fn certifying_an_online_smith() {
     });
 }
 
+/// Shows that scheduled expiration stay scheduled forever, even in the past
+/// This is harmful for storage because we store unnecessary data
+#[test]
+fn expires_on_keeps_growing() {
+    new_test_ext(GenesisConfig {
+        initial_smiths: btreemap![
+            1 => (true, vec![2, 3]),
+            2 => (true, vec![1,3]),
+            3 => (true, vec![1,2]),
+        ],
+    })
+    .execute_with(|| {
+        // Alice goes offline, and is set to expire
+        Pallet::<Runtime>::on_smith_goes_offline(1);
+        // The expiration block is present in smith data
+        assert_eq!(
+            Smiths::<Runtime>::get(1),
+            Some(SmithMeta {
+                status: Smith,
+                expires_on: Some(5),
+                issued_certs: vec![2, 3],
+                received_certs: vec![2, 3]
+            })
+        );
+        // It is also present in ExpiresOn schedule
+        assert_eq!(ExpiresOn::<Runtime>::get(5), Some(vec![1]));
+        // Go to expiration session
+        Pallet::<Runtime>::on_new_session(5);
+        // Alice is expired
+        assert_eq!(
+            Smiths::<Runtime>::get(1),
+            Some(SmithMeta {
+                status: Excluded,
+                expires_on: None,
+                issued_certs: vec![2, 3],
+                received_certs: vec![]
+            })
+        );
+        // but ExpiresOn schedule is still there (and will stay forever)
+        assert_eq!(ExpiresOn::<Runtime>::get(5), Some(vec![1]));
+    });
+}
+
 #[test]
 fn invitation_on_non_wot_member() {
     new_test_ext(GenesisConfig {
-- 
GitLab