"""Ranking contract for decide_identity: what a score set is allowed to name. Moved out of test_observe.py when the legacy session model was deleted; the ranking rules are the live path's, not the legacy one's. """ from __future__ import annotations import os import sys import unittest current_dir = os.path.dirname(os.path.abspath(__file__)) if current_dir not in sys.path: sys.path.insert(0, current_dir) from identity import ( # noqa: E402 IDENTITY_ACCEPTED, IDENTITY_AMBIGUOUS, IDENTITY_REJECTED, IDENTITY_UNKNOWN, decide_identity, ) class IdentityRankingTests(unittest.TestCase): def test_zero_scores_are_rejected_not_a_sku(self): ranked = decide_identity({"sku_a": 0.0, "sku_b": 0.0}) self.assertEqual(ranked["identity_level"], IDENTITY_REJECTED) self.assertIsNone(ranked["best_sku"]) self.assertEqual(ranked["status"], IDENTITY_REJECTED) def test_empty_scores_are_rejected(self): ranked = decide_identity({}) self.assertEqual(ranked["identity_level"], IDENTITY_REJECTED) self.assertIsNone(ranked["best_sku"]) def test_weak_unique_score_is_unknown(self): ranked = decide_identity({"sku_a": 0.4, "sku_b": 0.0}) self.assertEqual(ranked["identity_level"], IDENTITY_UNKNOWN) self.assertIsNone(ranked["best_sku"]) def test_close_scores_are_ambiguous(self): ranked = decide_identity({"sku_a": 20.0, "sku_b": 19.5}) self.assertEqual(ranked["identity_level"], IDENTITY_AMBIGUOUS) self.assertIsNone(ranked["best_sku"]) def test_unique_strong_score_is_accepted(self): ranked = decide_identity({"sku_a": 40.0, "sku_b": 5.0}) self.assertEqual(ranked["identity_level"], IDENTITY_ACCEPTED) self.assertEqual(ranked["best_sku"], "sku_a") self.assertEqual(ranked["status"], "success")