From 95e8591565d93d00c697508601abb52b70c065ff Mon Sep 17 00:00:00 2001
From: Benjamin Gallois <business@gallois.cc>
Date: Thu, 15 Feb 2024 16:26:07 +0100
Subject: [PATCH] Fix #194 session indexing error (nodes/rust/duniter-v2s!245)

* fix https://git.duniter.org/nodes/rust/duniter-v2s/-/issues/194

* add test catching smith-members session indexing
---
 runtime/common/src/handlers.rs          |  4 +++-
 runtime/gdev/tests/integration_tests.rs | 10 ++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/runtime/common/src/handlers.rs b/runtime/common/src/handlers.rs
index 1942c4195..f72a59a3c 100644
--- a/runtime/common/src/handlers.rs
+++ b/runtime/common/src/handlers.rs
@@ -24,11 +24,13 @@ use pallet_smith_members::SmithRemovalReason;
 pub struct OnNewSessionHandler<Runtime>(core::marker::PhantomData<Runtime>);
 impl<Runtime> pallet_authority_members::traits::OnNewSession for OnNewSessionHandler<Runtime>
 where
-    Runtime: pallet_provide_randomness::Config + pallet_distance::Config,
+    Runtime:
+        pallet_provide_randomness::Config + pallet_distance::Config + pallet_smith_members::Config,
 {
     fn on_new_session(index: sp_staking::SessionIndex) {
         pallet_provide_randomness::Pallet::<Runtime>::on_new_epoch();
         pallet_distance::Pallet::<Runtime>::on_new_session(index);
+        pallet_smith_members::Pallet::<Runtime>::on_new_session(index);
     }
 }
 
diff --git a/runtime/gdev/tests/integration_tests.rs b/runtime/gdev/tests/integration_tests.rs
index 4f0b442f0..3864d3a01 100644
--- a/runtime/gdev/tests/integration_tests.rs
+++ b/runtime/gdev/tests/integration_tests.rs
@@ -246,6 +246,7 @@ fn test_session_change() {
     ExtBuilder::new(1, 3, 4).build().execute_with(|| {
         assert_eq!(<Runtime as pallet_babe::Config>::EpochDuration::get(), 25);
         assert_eq!(Session::current_index(), 0);
+        assert_eq!(SmithMembers::current_session(), 0);
         assert_eq!(Babe::epoch_index(), 0);
         assert_eq!(Babe::current_epoch_start(), 0u64);
         run_to_block(2);
@@ -253,33 +254,42 @@ fn test_session_change() {
         assert_eq!(Babe::epoch_index(), 0);
         run_to_block(24);
         assert_eq!(Session::current_index(), 0);
+        assert_eq!(SmithMembers::current_session(), 0);
         assert_eq!(Babe::epoch_index(), 0);
         run_to_block(25);
         assert_eq!(Session::current_index(), 1);
+        assert_eq!(SmithMembers::current_session(), 1);
         assert_eq!(Babe::epoch_index(), 1);
         assert_eq!(Babe::current_epoch_start(), 25u64);
         run_to_block(26);
         assert_eq!(Session::current_index(), 1);
+        assert_eq!(SmithMembers::current_session(), 1);
         assert_eq!(Babe::epoch_index(), 1);
         run_to_block(50);
         assert_eq!(Session::current_index(), 2);
+        assert_eq!(SmithMembers::current_session(), 2);
         assert_eq!(Babe::epoch_index(), 2);
         assert_eq!(Babe::current_epoch_start(), 50u64);
         run_to_block(51);
         assert_eq!(Session::current_index(), 2);
+        assert_eq!(SmithMembers::current_session(), 2);
         assert_eq!(Babe::epoch_index(), 2);
         run_to_block(52);
         assert_eq!(Session::current_index(), 2);
+        assert_eq!(SmithMembers::current_session(), 2);
         assert_eq!(Babe::epoch_index(), 2);
         run_to_block(60);
         assert_eq!(Session::current_index(), 2);
+        assert_eq!(SmithMembers::current_session(), 2);
         assert_eq!(Babe::epoch_index(), 2);
         assert_eq!(Babe::current_epoch_start(), 50u64);
         run_to_block(75);
         assert_eq!(Session::current_index(), 3);
+        assert_eq!(SmithMembers::current_session(), 3);
         assert_eq!(Babe::epoch_index(), 3);
         run_to_block(100);
         assert_eq!(Session::current_index(), 4);
+        assert_eq!(SmithMembers::current_session(), 4);
         assert_eq!(Babe::epoch_index(), 4);
     })
 }
-- 
GitLab