diff --git a/pallets/distance/src/tests.rs b/pallets/distance/src/tests.rs
index 9443682b7b0ec292bc49511c47b1fb58a5bc0a12..2524d8e86125f3167935321b5cdba55b877dc135 100644
--- a/pallets/distance/src/tests.rs
+++ b/pallets/distance/src/tests.rs
@@ -16,6 +16,7 @@
 
 use crate::mock::*;
 use crate::DistanceStatus::{Pending, Valid};
+use crate::MedianResult::One;
 use crate::{pallet, Error, MedianAcc, MedianResult};
 use frame_support::traits::Len;
 use frame_support::{assert_err, assert_noop, assert_ok};
@@ -211,7 +212,130 @@ fn distance_failure() {
         System::assert_has_event(RuntimeEvent::Distance(pallet::Event::EvaluationFailure {
             0: *IDTY_0,
         }));
-        // TODO: test: variant Two
+    });
+}
+
+#[test]
+fn distance_with_odd_median() {
+    new_test_ext().execute_with(|| {
+        run_to_block(SESSION_0_START);
+        assert_ok!(Distance::evaluate_distance(RuntimeOrigin::signed(0)));
+        assert_eq!(
+            pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0),
+            Some(Pending)
+        );
+
+        // Evaluation #1
+        run_to_block(SESSION_2_START);
+        assert_ok!(Distance::update_evaluation(
+            RuntimeOrigin::none(),
+            ComputationResult {
+                distances: vec![Perbill::from_percent(70)]
+            }
+        ));
+        // Evaluation #2
+        run_to_block(SESSION_2_START + 1);
+        assert_ok!(Distance::update_evaluation(
+            RuntimeOrigin::none(),
+            ComputationResult {
+                distances: vec![Perbill::from_percent(80)]
+            }
+        ));
+        // Evaluation #3
+        run_to_block(SESSION_2_START + 2);
+        assert_ok!(Distance::update_evaluation(
+            RuntimeOrigin::none(),
+            ComputationResult {
+                distances: vec![Perbill::from_percent(80)]
+            }
+        ));
+
+        // Check the median result
+        let pool = pallet::EvaluationPool2::<Test>::get();
+        let (_, median) = pool.0.get(0).unwrap();
+        assert_eq!(median.get_median(), Some(One(Perbill::from_percent(80))));
+
+        // Finally session 4
+        run_to_block(SESSION_3_START);
+        // distance failure
+        assert_eq!(
+            pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0),
+            Some(Valid)
+        );
+        System::assert_has_event(RuntimeEvent::Distance(pallet::Event::EvaluationSuccess {
+            0: *IDTY_0,
+        }));
+    });
+}
+
+#[test]
+fn distance_with_even_median() {
+    new_test_ext().execute_with(|| {
+        run_to_block(SESSION_0_START);
+        assert_ok!(Distance::evaluate_distance(RuntimeOrigin::signed(0)));
+        assert_eq!(
+            pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0),
+            Some(Pending)
+        );
+
+        // Evaluation #1
+        run_to_block(SESSION_2_START);
+        assert_ok!(Distance::update_evaluation(
+            RuntimeOrigin::none(),
+            ComputationResult {
+                distances: vec![Perbill::from_percent(70)]
+            }
+        ));
+        // Evaluation #2
+        run_to_block(SESSION_2_START + 1);
+        assert_ok!(Distance::update_evaluation(
+            RuntimeOrigin::none(),
+            ComputationResult {
+                distances: vec![Perbill::from_percent(90)]
+            }
+        ));
+
+        // Check the median result
+        let pool = pallet::EvaluationPool2::<Test>::get();
+        let (_, median) = pool.0.get(0).unwrap();
+        assert_eq!(
+            median.get_median(),
+            Some(MedianResult::Two(
+                Perbill::from_percent(70),
+                Perbill::from_percent(90)
+            ))
+        );
+
+        // Finally session 4
+        run_to_block(SESSION_3_START);
+        // distance failure
+        assert_eq!(
+            pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0),
+            Some(Valid)
+        );
+        System::assert_has_event(RuntimeEvent::Distance(pallet::Event::EvaluationSuccess {
+            0: *IDTY_0,
+        }));
+    });
+}
+
+#[test]
+fn distance_not_processed() {
+    new_test_ext().execute_with(|| {
+        run_to_block(SESSION_0_START);
+        assert_ok!(Distance::evaluate_distance(RuntimeOrigin::signed(0)));
+        assert_eq!(
+            pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0),
+            Some(Pending)
+        );
+
+        // Directly to session S+3
+        run_to_block(SESSION_3_START);
+        // distance failure
+        assert_eq!(pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0), None); // Pending has gone
+        System::assert_has_event(RuntimeEvent::Distance(
+            pallet::Event::EvaluationNotProcessed { 0: *IDTY_0 },
+        ));
     });
 }
 
@@ -221,7 +345,7 @@ fn distance_failure() {
 // }
 
 // TODO: evaluate_distance => Err::NoIdentity
-// TODO: evaluate_distance => Err::AlreadyInEvaluation
+// TODO: evaluate_distance => Err::AlreadyInEvaluation ==> devrait être correctement levée depuis l'ajout de Pending
 // TODO: evaluate_distance => Err::QueueFull (1)
 // TODO: evaluate_distance => Err::QueueFull (2)
 // TODO: Err::ManyEvaluationsInBlock