Files
ss-tools/backend/tests/plugins/translate/test_preview_session_serializer.py

127 lines
5.0 KiB
Python

# #region Test.PreviewSessionSerializer [C:2] [TYPE Module] [SEMANTICS test, translate, preview, serialize]
# @BRIEF Tests for preview_session_serializer.py — serialize_preview_record.
# @RELATION BINDS_TO -> [preview_session_serializer]
# @TEST_CONTRACT: serialize_preview_record -> dict | serializes TranslationPreviewRecord
# @TEST_EDGE: empty_languages
# @TEST_EDGE: no_source_language_detected
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent / "src"))
import os
os.environ.setdefault("SECRET_KEY", "test-secret-key-for-testing")
os.environ.setdefault("DATABASE_URL", "sqlite:///:memory:")
os.environ.setdefault("AUTH_DATABASE_URL", "sqlite:///:memory:")
from unittest.mock import MagicMock
from src.plugins.translate.preview_session_serializer import serialize_preview_record
def _make_language(language_code="ru", **kwargs):
lang = MagicMock()
lang.language_code = language_code
lang.source_language_detected = kwargs.get("source_language_detected", "en")
lang.translated_value = kwargs.get("translated_value", "привет")
lang.final_value = kwargs.get("final_value", "привет")
lang.user_edit = kwargs.get("user_edit", None)
lang.status = kwargs.get("status", "translated")
lang.needs_review = kwargs.get("needs_review", False)
return lang
def _make_record(**kwargs):
r = MagicMock(spec=object)
r.id = kwargs.get("id", "rec-1")
r.source_sql = kwargs.get("source_sql", "SELECT * FROM t")
r.target_sql = kwargs.get("target_sql", "SELECT * FROM t_translated")
r.source_object_type = kwargs.get("source_object_type", "table")
r.source_object_id = kwargs.get("source_object_id", "obj-1")
r.source_object_name = kwargs.get("source_object_name", "my_table")
r.status = kwargs.get("status", "done")
r.feedback = kwargs.get("feedback", None)
r.languages = kwargs.get("languages", [])
return r
class TestSerializePreviewRecord:
"""serialize_preview_record — serialize TranslationPreviewRecord."""
def test_basic_serialization(self):
"""Full record with languages returns all fields."""
lang_ru = _make_language(language_code="ru", final_value="привет")
lang_de = _make_language(language_code="de", final_value="hallo")
record = _make_record(languages=[lang_ru, lang_de])
result = serialize_preview_record(record)
assert result["id"] == "rec-1"
assert result["source_sql"] == "SELECT * FROM t"
assert result["target_sql"] == "SELECT * FROM t_translated"
assert result["source_object_type"] == "table"
assert result["source_object_id"] == "obj-1"
assert result["source_object_name"] == "my_table"
assert result["status"] == "done"
assert result["feedback"] is None
assert result["needs_review"] is False
assert len(result["languages"]) == 2
assert result["languages"][0]["language_code"] == "ru"
assert result["languages"][0]["final_value"] == "привет"
assert result["languages"][1]["language_code"] == "de"
def test_empty_languages(self):
"""Record with no languages returns empty languages list."""
record = _make_record(languages=[])
result = serialize_preview_record(record)
assert result["languages"] == []
assert result["source_language_detected"] is None
assert result["needs_review"] is False
def test_languages_is_none(self):
"""Record with None languages returns empty list."""
record = _make_record(languages=None)
result = serialize_preview_record(record)
assert result["languages"] == []
def test_no_source_language_detected(self):
"""Language without source_language_detected returns None."""
lang = _make_language(source_language_detected=None)
record = _make_record(languages=[lang])
result = serialize_preview_record(record)
assert result["source_language_detected"] is None
def test_source_language_detected_present(self):
"""Language with source_language_detected returns it."""
lang = _make_language(source_language_detected="fr")
record = _make_record(languages=[lang])
result = serialize_preview_record(record)
assert result["source_language_detected"] == "fr"
def test_needs_review_from_language(self):
"""needs_review comes from first language entry."""
lang = _make_language(needs_review=True)
record = _make_record(languages=[lang])
result = serialize_preview_record(record)
assert result["needs_review"] is True
def test_user_edit_present(self):
"""user_edit field is included when present."""
lang = _make_language(user_edit="пользовательский перевод")
record = _make_record(languages=[lang])
result = serialize_preview_record(record)
assert result["languages"][0]["user_edit"] == "пользовательский перевод"
# #endregion Test.PreviewSessionSerializer