Spaces:
Sleeping
Sleeping
| from datetime import timedelta | |
| from app import crud | |
| def test_session_turn_feedback_round_trip(db_session) -> None: | |
| session = crud.create_session(db_session, {"ai_disclosure": True}) | |
| turn = crud.create_turn( | |
| db_session, | |
| session_id=session.id, | |
| speaker="doctor", | |
| src_lang="vi", | |
| tgt_lang="en", | |
| source_text="xin chao", | |
| normalized_text="xin chao", | |
| translation="hello", | |
| asr_confidence=1.0, | |
| mt_confidence=0.99, | |
| risk_tier="low", | |
| risk_spans=[], | |
| status="delivered", | |
| ) | |
| feedback = crud.create_feedback(db_session, turn.id, "other", "test") | |
| assert crud.list_turns(db_session, session.id)[0].id == turn.id | |
| assert feedback.turn_id == turn.id | |
| def test_hard_delete_cascades_turns_and_feedback(db_session) -> None: | |
| session = crud.create_session(db_session, {"ai_disclosure": True}) | |
| turn = crud.create_turn( | |
| db_session, | |
| session_id=session.id, | |
| speaker="doctor", | |
| src_lang="vi", | |
| tgt_lang="en", | |
| source_text="xin chao", | |
| normalized_text="xin chao", | |
| translation="hello", | |
| asr_confidence=1.0, | |
| mt_confidence=0.99, | |
| risk_tier="low", | |
| risk_spans=[], | |
| status="delivered", | |
| ) | |
| feedback = crud.create_feedback(db_session, turn.id, "other", None) | |
| crud.hard_delete_session(db_session, session.id) | |
| assert crud.get_session(db_session, session.id) is None | |
| assert db_session.get(crud.TurnRecord, turn.id) is None | |
| assert db_session.get(crud.FeedbackRecord, feedback.id) is None | |
| def test_retention_purge_deletes_old_sessions_and_keeps_recent(db_session) -> None: | |
| old = crud.create_session(db_session, {"ai_disclosure": True}) | |
| recent = crud.create_session(db_session, {"ai_disclosure": True}) | |
| old.created_at = crud.utc_now() - timedelta(days=31) | |
| db_session.add(old) | |
| db_session.commit() | |
| turn = crud.create_turn( | |
| db_session, | |
| session_id=old.id, | |
| speaker="doctor", | |
| src_lang="vi", | |
| tgt_lang="en", | |
| source_text="xin chao", | |
| normalized_text="xin chao", | |
| translation="hello", | |
| asr_confidence=1.0, | |
| mt_confidence=0.99, | |
| risk_tier="low", | |
| risk_spans=[], | |
| status="delivered", | |
| ) | |
| feedback = crud.create_feedback(db_session, turn.id, "other", None) | |
| assert crud.purge_old_sessions(db_session, retention_days=30) == 1 | |
| assert crud.get_session(db_session, old.id) is None | |
| assert db_session.get(crud.TurnRecord, turn.id) is None | |
| assert db_session.get(crud.FeedbackRecord, feedback.id) is None | |
| assert crud.get_session(db_session, recent.id) is not None | |
| def test_retention_zero_keeps_all_sessions(db_session) -> None: | |
| old = crud.create_session(db_session, {"ai_disclosure": True}) | |
| old.created_at = crud.utc_now() - timedelta(days=365) | |
| db_session.add(old) | |
| db_session.commit() | |
| assert crud.purge_old_sessions(db_session, retention_days=0) == 0 | |
| assert crud.get_session(db_session, old.id) is not None | |