From 4c7260d01d944c8e3689554deb6377b4cc84ca39 Mon Sep 17 00:00:00 2001
From: bgallois <benjamin@gallois.cc>
Date: Mon, 26 Feb 2024 14:35:56 +0100
Subject: [PATCH] make tests independent of EvaluationPeriod

---
 runtime/common/src/pallets_config.rs    |  2 +-
 runtime/gdev/tests/integration_tests.rs | 59 +++++++++++++++----------
 2 files changed, 36 insertions(+), 25 deletions(-)

diff --git a/runtime/common/src/pallets_config.rs b/runtime/common/src/pallets_config.rs
index 8498f797f..f2a89104c 100644
--- a/runtime/common/src/pallets_config.rs
+++ b/runtime/common/src/pallets_config.rs
@@ -524,7 +524,7 @@ type RuntimeFreezeReason = ();
         }
         impl pallet_distance::Config for Runtime {
             type Currency = Balances;
-            type EvaluationPeriod = frame_support::traits::ConstU32<25>;
+            type EvaluationPeriod = frame_support::traits::ConstU32<7>;
             type EvaluationPrice = frame_support::traits::ConstU64<1000>;
             type MaxRefereeDistance = frame_support::traits::ConstU32<5>;
             type MinAccessibleReferees = MinAccessibleReferees;
diff --git a/runtime/gdev/tests/integration_tests.rs b/runtime/gdev/tests/integration_tests.rs
index 0cfb9ee28..d0cd5dab3 100644
--- a/runtime/gdev/tests/integration_tests.rs
+++ b/runtime/gdev/tests/integration_tests.rs
@@ -359,8 +359,9 @@ fn test_validate_identity_when_claim() {
                 frame_system::RawOrigin::Signed(AccountKeyring::Eve.to_account_id()).into(),
             ));
 
-            // Pass 2 sessions
-            run_to_block(51);
+            // Pass 2nd evaluation period
+            let eval_period: u32 = <Runtime as pallet_distance::Config>::EvaluationPeriod::get();
+            run_to_block(2 * eval_period);
             // simulate an evaluation published by smith Alice
             assert_ok!(Distance::force_update_evaluation(
                 frame_system::RawOrigin::Root.into(),
@@ -369,7 +370,8 @@ fn test_validate_identity_when_claim() {
                     distances: vec![Perbill::one()],
                 }
             ));
-            run_to_block(75); // Pass 1 session
+            // Pass 3rd evalaution period
+            run_to_block(3 * eval_period);
             System::assert_has_event(RuntimeEvent::Distance(
                 pallet_distance::Event::EvaluatedValid { idty_index: 5 },
             ));
@@ -387,7 +389,8 @@ fn test_validate_identity_when_claim() {
             System::assert_has_event(RuntimeEvent::Membership(
                 pallet_membership::Event::MembershipAdded {
                     member: 5,
-                    expire_on: 75 + <Runtime as pallet_membership::Config>::MembershipPeriod::get(),
+                    expire_on: 3 * eval_period
+                        + <Runtime as pallet_membership::Config>::MembershipPeriod::get(),
                 },
             ));
         });
@@ -461,8 +464,9 @@ fn test_identity_creation_workflow() {
                 Some(AccountKeyring::Charlie.to_account_id(),)
             );
 
-            // Pass 2 sessions
-            run_to_block(51);
+            // Pass 2nd evaluation period
+            let eval_period: u32 = <Runtime as pallet_distance::Config>::EvaluationPeriod::get();
+            run_to_block(2 * eval_period);
             // simulate evaluation published by smith Alice
             assert_ok!(Distance::force_update_evaluation(
                 frame_system::RawOrigin::Root.into(),
@@ -471,28 +475,30 @@ fn test_identity_creation_workflow() {
                     distances: vec![Perbill::one()],
                 }
             ));
-            // Pass 1 session
-            run_to_block(75);
+            // Pass 3rd evaluation period
+            run_to_block(3 * eval_period);
 
             // eve should not even have to claim her membership
             System::assert_has_event(RuntimeEvent::Membership(
                 pallet_membership::Event::MembershipAdded {
                     member: 5,
-                    expire_on: 75 + <Runtime as pallet_membership::Config>::MembershipPeriod::get(),
+                    expire_on: 3 * eval_period
+                        + <Runtime as pallet_membership::Config>::MembershipPeriod::get(),
                 },
             ));
 
             // test state coherence
+            // block time is 6_000 ms
+            // ud creation period is 60_000 ms ~ 10 blocks
+            // first ud is at 24_000 ms ~ 4 blocks
+            // at current block this is UD number current_block/10 + 1
+            let first_eligible = ((3 * eval_period) / 10 + 1) as u16;
             assert_eq!(
                 Identity::identity(5),
                 Some(pallet_identity::IdtyValue {
                     data: IdtyData {
-                        // block time is 6_000 ms
-                        // ud creation period is 60_000 ms ~ 10 blocks
-                        // first ud is at 24_000 ms ~ 4 blocks
-                        // at block 75 this is UD number 8, so next is 9
                         first_eligible_ud: pallet_universal_dividend::FirstEligibleUd(Some(
-                            sp_std::num::NonZeroU16::new(9).unwrap()
+                            sp_std::num::NonZeroU16::new(first_eligible).unwrap()
                         ))
                     },
                     next_creatable_identity_on: 0u32,
@@ -508,7 +514,7 @@ fn test_identity_creation_workflow() {
                 pallet_universal_dividend::Event::NewUdCreated {
                     amount: 1000,
                     index: 9,
-                    monetary_mass: 50_000, // 13_000 (initial) + 4 * 1000 * 8 (produced) + 5000
+                    monetary_mass: 49_000 + (10 - first_eligible as u64) * 1_000, // 13_000 (initial) + 4 * 1000 * 9 (produced) + (10-first_eligible)*1_000
                     members_count: 5,
                 },
             ));
@@ -517,8 +523,8 @@ fn test_identity_creation_workflow() {
             ));
             System::assert_has_event(RuntimeEvent::UniversalDividend(
                 pallet_universal_dividend::Event::UdsClaimed {
-                    count: 1,
-                    total: 1000,
+                    count: (10 - first_eligible as u16),
+                    total: (10 - first_eligible as u64) * 1_000,
                     who: AccountKeyring::Eve.to_account_id(),
                 },
             ));
@@ -614,7 +620,9 @@ fn test_membership_renewal() {
                 frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(),
             ));
 
-            run_to_block(51); // Pass 5 sessions
+            // Pass 3rd evaluation period
+            let eval_period: u32 = <Runtime as pallet_distance::Config>::EvaluationPeriod::get();
+            run_to_block(3 * eval_period);
             assert_ok!(Distance::force_update_evaluation(
                 frame_system::RawOrigin::Root.into(),
                 AccountKeyring::Alice.to_account_id(),
@@ -622,16 +630,17 @@ fn test_membership_renewal() {
                     distances: vec![Perbill::one()],
                 }
             ));
-            // Pass 1 session, membership is renewed automatically
-            run_to_block(75);
+            // Pass to 4th evaluation period
+            run_to_block(4 * eval_period);
             System::assert_has_event(RuntimeEvent::Membership(
                 pallet_membership::Event::MembershipRenewed {
                     member: 1,
-                    expire_on: 75 + <Runtime as pallet_membership::Config>::MembershipPeriod::get(),
+                    expire_on: 4 * eval_period
+                        + <Runtime as pallet_membership::Config>::MembershipPeriod::get(),
                 },
             ));
 
-            run_to_block(76);
+            run_to_block(4 * eval_period + 1);
             // not possible to renew manually
             // can not ask renewal when period is not respected
             assert_noop!(
@@ -641,8 +650,10 @@ fn test_membership_renewal() {
                 pallet_duniter_wot::Error::<Runtime>::MembershipRenewalPeriodNotRespected,
             );
 
-            // should expire at block 175 = 75+100
-            run_to_block(175);
+            // should expire at block 3nd EvaluationPeriod + MembershipPeriod
+            run_to_block(
+                4 * eval_period + <Runtime as pallet_membership::Config>::MembershipPeriod::get(),
+            );
             System::assert_has_event(RuntimeEvent::Membership(
                 pallet_membership::Event::MembershipRemoved {
                     member: 1,
-- 
GitLab