fraudlens-ai / tests /test_pattern_agent.py
ab1659
FraudLens AI — NVIDIA GTC 2026 hackathon submission
ac29cdc
Raw
History Blame Contribute Delete
2.98 kB
"""Tests for the PatternAgent."""
import pytest
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
from agents.pattern_agent import PatternAgent, PatternMatch
@pytest.fixture
def agent(patch_nim_client):
return PatternAgent()
class TestPatternMatch:
def test_to_dict(self):
pm = PatternMatch(
pattern_id="p1", pattern_name="staged_accident",
description="desc", similarity_score=0.85,
category="staged_accident", severity="high",
matching_elements=["elem1"],
)
d = pm.to_dict()
assert d["pattern_id"] == "p1"
assert d["similarity_score"] == 0.85
class TestPatternAgent:
def test_build_search_query(self, agent):
claim_data = {
"incident": {"description": "rear-ended at red light"},
"claim": {"type": "auto", "amount": 45000},
"medical": {"injuries": ["whiplash"]},
}
query = agent._build_search_query(claim_data, "some raw text")
assert "rear-ended" in query
assert "auto" in query
assert "whiplash" in query
def test_calculate_pattern_score_empty(self, agent):
assert agent._calculate_pattern_score([]) == 0.0
def test_calculate_pattern_score_with_matches(self, agent):
matches = [
PatternMatch("p1", "staged", "d", 0.9, "staged", "critical", ["e1", "e2"]),
]
score = agent._calculate_pattern_score(matches)
assert score > 0
def test_calculate_pattern_score_capped(self, agent):
matches = [
PatternMatch(f"p{i}", "x", "d", 0.95, "x", "critical", ["e"] * 5)
for i in range(10)
]
score = agent._calculate_pattern_score(matches)
assert score <= 100
def test_generate_summary_no_matches(self, agent):
summary = agent._generate_summary([])
assert "No known fraud" in summary
def test_generate_summary_critical_match(self, agent):
matches = [
PatternMatch("p1", "fraud_ring", "d", 0.9, "fraud_ring", "critical", []),
]
summary = agent._generate_summary(matches)
assert "CRITICAL" in summary
@pytest.mark.asyncio
async def test_analyze_returns_structure(self, agent, claim_data, raw_text, patch_nim_client):
# Mock the vector store to skip initialization
agent.vector_store = None
patch_nim_client.chat.return_value = "- Matching Element 1: soft tissue injury pattern"
# Patch initialize to skip Milvus
async def mock_init():
from unittest.mock import AsyncMock, MagicMock
mock_store = MagicMock()
mock_store.search = AsyncMock(return_value=[])
agent.vector_store = mock_store
agent.initialize = mock_init
result = await agent.analyze(claim_data, raw_text)
assert "matched_patterns" in result
assert "pattern_risk_score" in result