import pytest from src.models import TurnEvent, TurnFrameResult, TurnLevel, TurnTrackState def test_turn_frame_success_failure_and_levels() -> None: result = TurnFrameResult(1, 2, "now", .2, True, True, True, 0, 25, 25, 25, "positive", True, False, TurnLevel.WEAK.value, .1) assert result.yaw_delta_toward_signage == 25 failure = TurnFrameResult(1, 3, "later", .3, False, False, False, None, None, None, None, "positive", False, False, "not_evaluable", 0, "no_face") assert failure.turn_level == "not_evaluable" with pytest.raises(ValueError): TurnFrameResult(1, 1, "x", 0, True, True, False, None, 0, None, None, "bad", False, False, "none", 0) def test_turn_state_rates_and_event() -> None: state = TurnTrackState(1, total_frames=4, pose_frames=2, face_detected_frames=3) assert state.face_detection_rate == .75 assert state.pose_estimation_rate == .5 assert state.turn_level == "not_evaluable" event = TurnEvent("turn_confirmed", 1, 2, "now", .2, 20, 20, "weak", {"注記": "確認"}) assert event.metadata["注記"] == "確認"