Files
ss-tools/backend/tests/test_core/test_matching.py
busya ce0369ae5c test(backend): add 55+ test files to push coverage to 98%
Subagents delivered tests across all uncovered backend modules:

Schemas (100%): agent, auth, health, profile, settings, validation
Services (98-100%): auth, profile, health, llm, mapping, resource,
  security, git, superset_lookup, sql_table_extractor, rbac
API routes (new): auth, admin, health, environments, plugins,
  dashboards (helpers, projection, actions, listing),
  git (config, deps, env, helpers)
Clean Release (100%): DTO, facade, policy_engine, stages,
  repos, preparation, source_isolation, compliance
Git services: base, remote_providers
Agent module: app, run, middleware, langgraph_setup
Core: trace, cleanup, ws_log_handler, timezone, auth (config/oauth/security), matching
Reports: normalizer, report_service, type_profiles
Notifications: service, providers

Also:
- .gitignore: add .coverage, *.cover, coverage-* dirs
- src/schemas/auth.py: fix AD group DN regex (comma in CN=...)
- Remove co-located src/services/__tests__/ (caused pytest module collision)
2026-06-15 13:55:57 +03:00

100 lines
3.8 KiB
Python

# #region Test.FuzzyMatching [C:3] [TYPE Module] [SEMANTICS test,fuzzy,matching,rapidfuzz]
# @BRIEF Tests for core/utils/matching.py — suggest_mappings.
# @RELATION BINDS_TO -> [FuzzyMatching]
from pathlib import Path
import sys
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "src"))
import pytest
# #region test_suggest_mappings [C:2] [TYPE Function]
# @BRIEF Test suggest_mappings for various database name scenarios.
class TestSuggestMappings:
def test_empty_targets_returns_empty(self):
from src.core.utils.matching import suggest_mappings
result = suggest_mappings(
[{"uuid": "s1", "database_name": "db1"}],
[],
)
assert result == []
def test_exact_match_returns_high_confidence(self):
from src.core.utils.matching import suggest_mappings
result = suggest_mappings(
[{"uuid": "s1", "database_name": "sales_db"}],
[{"uuid": "t1", "database_name": "sales_db"}],
)
assert len(result) == 1
assert result[0]["confidence"] == 1.0
assert result[0]["source_db"] == "sales_db"
assert result[0]["target_db"] == "sales_db"
def test_fuzzy_match_above_threshold(self):
from src.core.utils.matching import suggest_mappings
result = suggest_mappings(
[{"uuid": "s1", "database_name": "sales_database"}],
[{"uuid": "t1", "database_name": "sales_db"}],
threshold=60,
)
assert len(result) == 1
assert result[0]["confidence"] > 0.6
def test_low_similarity_below_threshold(self):
from src.core.utils.matching import suggest_mappings
result = suggest_mappings(
[{"uuid": "s1", "database_name": "completely_different"}],
[{"uuid": "t1", "database_name": "sales_db"}],
threshold=90, # High threshold
)
assert len(result) == 0
def test_multiple_sources_multiple_targets(self):
from src.core.utils.matching import suggest_mappings
result = suggest_mappings(
[
{"uuid": "s1", "database_name": "customers"},
{"uuid": "s2", "database_name": "orders"},
],
[
{"uuid": "t1", "database_name": "customers"},
{"uuid": "t2", "database_name": "orders_db"},
{"uuid": "t3", "database_name": "products"},
],
threshold=60,
)
assert len(result) == 2
# customers should match customers exactly
assert result[0]["source_db"] == "customers"
# orders should fuzzy match orders_db
assert result[1]["source_db"] == "orders"
def test_empty_source_returns_empty(self):
from src.core.utils.matching import suggest_mappings
result = suggest_mappings([], [{"uuid": "t1", "database_name": "db"}])
assert result == []
def test_fuzzy_match_token_sort(self):
from src.core.utils.matching import suggest_mappings
# token_sort_ratio compares sorted tokens, so "sales db" vs "db sales" should match
result = suggest_mappings(
[{"uuid": "s1", "database_name": "sales_db"}],
[{"uuid": "t1", "database_name": "db_sales"}],
threshold=60,
)
# token_sort_ratio normalizes token order, so these should match well
assert len(result) == 1
assert result[0]["confidence"] > 0.5
def test_handles_missing_keys_gracefully(self):
from src.core.utils.matching import suggest_mappings
with pytest.raises(KeyError):
suggest_mappings(
[{"uuid": "s1"}], # missing database_name
[{"uuid": "t1", "database_name": "db"}],
)
# #endregion test_suggest_mappings
# #endregion Test.FuzzyMatching