You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
3.0 KiB
Python

"""Unit tests for event feature calculations."""
def test_guidance_direction_score_raised():
from libs.features.event_features import guidance_direction_score
from libs.schemas.types import GuidanceOutput
g = GuidanceOutput(status="raised", scope="unknown", notes="")
assert guidance_direction_score(g) == 1.0
def test_guidance_direction_score_lowered():
from libs.features.event_features import guidance_direction_score
from libs.schemas.types import GuidanceOutput
g = GuidanceOutput(status="lowered", scope="unknown", notes="")
assert guidance_direction_score(g) == 0.0
def test_guidance_direction_score_maintained():
from libs.features.event_features import guidance_direction_score
from libs.schemas.types import GuidanceOutput
g = GuidanceOutput(status="inline_or_maintained", scope="unknown", notes="")
assert guidance_direction_score(g) == 0.5
def test_oneoff_penalty_no_flags():
from libs.features.event_features import oneoff_penalty
from libs.schemas.types import RiskFlagsOutput
r = RiskFlagsOutput()
assert oneoff_penalty(r) == 0.0
def test_oneoff_penalty_all_flags():
from libs.features.event_features import oneoff_penalty
from libs.schemas.types import RiskFlagsOutput
r = RiskFlagsOutput(
oneoff_item=True,
tax_benefit=True,
valuation_gain=True,
non_gaap_heavy=True,
financing_related=True,
legal_or_regulatory_overhang=True,
)
assert oneoff_penalty(r) == 1.0
def test_signal_strength_score_all_positive():
from libs.features.event_features import signal_strength_score
from libs.schemas.types import SignalsOutput
s = SignalsOutput(
demand_strength="strong",
pricing_power="present",
backlog_or_bookings="present",
customer_expansion="present",
margin_quality="improving",
)
assert signal_strength_score(s) == 1.0
def test_signal_strength_score_all_unknown():
from libs.features.event_features import signal_strength_score
from libs.schemas.types import SignalsOutput
s = SignalsOutput(
demand_strength="unknown",
pricing_power="unknown",
backlog_or_bookings="unknown",
customer_expansion="unknown",
margin_quality="unknown",
)
assert signal_strength_score(s) == 0.0
def test_document_quality_score_range(sample_parser_output):
from libs.features.event_features import document_quality_score
from libs.schemas.types import ConfidenceOutput
c = ConfidenceOutput(**sample_parser_output["confidence"])
score = document_quality_score(c)
assert 0.0 <= score <= 1.0
def test_compute_event_features(sample_parser_output):
from libs.features.event_features import compute_event_features
features = compute_event_features(sample_parser_output)
assert "guidance_direction_score" in features
assert "oneoff_penalty" in features
assert "signal_strength_score" in features
assert "document_quality_score" in features
assert "event_type" in features