snipe/tests/trust/test_metadata.py

45 lines
1.5 KiB
Python

from app.db.models import Seller
from app.trust.metadata import MetadataScorer
def _seller(**kwargs) -> Seller:
defaults = dict(
platform="ebay", platform_seller_id="u", username="u",
account_age_days=730, feedback_count=450,
feedback_ratio=0.991, category_history_json='{"ELECTRONICS": 30}',
)
defaults.update(kwargs)
return Seller(**defaults)
def test_established_seller_scores_high():
scorer = MetadataScorer()
scores = scorer.score(_seller(), market_median=1000.0, listing_price=950.0)
total = sum(scores.values())
assert total >= 80
def test_new_account_scores_zero_on_age():
scorer = MetadataScorer()
scores = scorer.score(_seller(account_age_days=3), market_median=1000.0, listing_price=950.0)
assert scores["account_age"] == 0
def test_low_feedback_count_scores_low():
scorer = MetadataScorer()
scores = scorer.score(_seller(feedback_count=2), market_median=1000.0, listing_price=950.0)
assert scores["feedback_count"] < 10
def test_suspicious_price_scores_zero():
scorer = MetadataScorer()
# 60% below market → zero
scores = scorer.score(_seller(), market_median=1000.0, listing_price=400.0)
assert scores["price_vs_market"] == 0
def test_no_market_data_returns_none():
scorer = MetadataScorer()
scores = scorer.score(_seller(), market_median=None, listing_price=950.0)
# None signals "data unavailable" — aggregator will set score_is_partial=True
assert scores["price_vs_market"] is None