- 9 new enhancement test files: test_connection_service.py, test_db_executor.py, test_orchestrator_direct_db.py, test_batch_insert.py, test_lang_stats.py, test_response_field_coverage.py, test_retry.py, test_run_service.py, test_sql_insert_service.py - 5 new integration tests: test_superset_sqllab_e2e.py, test_translate_clickhouse.py, test_translate_corrections.py, test_translate_schedules.py, test_translate_status_fk.py - Updated existing tests for insert_method/connection_id fields
128 lines
4.6 KiB
Python
128 lines
4.6 KiB
Python
# #region TestTranslateCorrectionsIntegration [C:3] [TYPE Module] [SEMANTICS test,translate,corrections,integration]
|
|
# @BRIEF Integration tests for InlineCorrectionService and BulkFindReplaceService with real PostgreSQL.
|
|
# @RELATION BINDS_TO -> [InlineCorrectionService]
|
|
# @RELATION BINDS_TO -> [BulkFindReplaceService]
|
|
#
|
|
# @TEST_CONTRACT InlineCorrectionService ->
|
|
# apply_inline_edit: db + record + language + text -> language_updated
|
|
#
|
|
# @TEST_CONTRACT BulkFindReplaceService ->
|
|
# apply: db + run_id + pattern + replacement -> rows_affected in result dict
|
|
# preview: db + run_id + pattern -> list of matching items
|
|
#
|
|
# @TEST_EDGE: non_existent_record -> ValueError on inline edit
|
|
# @TEST_EDGE: non_existent_language -> ValueError
|
|
# @TEST_EDGE: empty_replace_run -> rows_affected=0, no error
|
|
import pytest
|
|
import uuid
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from src.models.translate import (
|
|
TranslationJob,
|
|
TranslationRun,
|
|
TranslationBatch,
|
|
TranslationRecord,
|
|
TranslationLanguage,
|
|
)
|
|
from src.plugins.translate.service_inline_correction import InlineCorrectionService
|
|
|
|
|
|
# #region TestInlineCorrectionIntegration [C:3] [TYPE Class]
|
|
class TestInlineCorrectionIntegration:
|
|
"""Verify InlineCorrectionService operations with real PostgreSQL."""
|
|
|
|
def _create_full_run_tree(self, db: Session, lang_status: str = "pending") -> tuple:
|
|
job = TranslationJob(
|
|
name="Inline Test Job", status="ACTIVE",
|
|
source_dialect="postgresql", target_dialect="clickhouse",
|
|
translation_column="name", target_column="name",
|
|
target_languages=["ru", "de"],
|
|
created_by="test_user",
|
|
)
|
|
db.add(job)
|
|
db.commit()
|
|
db.refresh(job)
|
|
|
|
run = TranslationRun(
|
|
job_id=job.id, status="COMPLETED", trigger_type="manual",
|
|
)
|
|
db.add(run)
|
|
db.commit()
|
|
db.refresh(run)
|
|
|
|
batch = TranslationBatch(
|
|
run_id=run.id, batch_index=0, status="COMPLETED",
|
|
total_records=1, successful_records=1,
|
|
)
|
|
db.add(batch)
|
|
db.commit()
|
|
db.refresh(batch)
|
|
|
|
record = TranslationRecord(
|
|
batch_id=batch.id, run_id=run.id,
|
|
source_sql="Hello World",
|
|
target_sql="Hola Mundo",
|
|
status="SUCCESS",
|
|
source_hash=uuid.uuid4().hex,
|
|
)
|
|
db.add(record)
|
|
db.commit()
|
|
db.refresh(record)
|
|
|
|
lang = TranslationLanguage(
|
|
record_id=record.id,
|
|
language_code="ru",
|
|
source_language_detected="en",
|
|
translated_value="Привет мир",
|
|
final_value="Привет мир",
|
|
status=lang_status,
|
|
)
|
|
db.add(lang)
|
|
db.commit()
|
|
db.refresh(lang)
|
|
|
|
return job, run, batch, record, lang
|
|
|
|
# #region test_apply_inline_edit [C:2] [TYPE Function]
|
|
def test_apply_inline_edit(self, db_session: Session):
|
|
_, _, _, record, lang = self._create_full_run_tree(db_session)
|
|
|
|
result = InlineCorrectionService.apply_inline_edit(
|
|
db=db_session, run_id=record.run_id,
|
|
record_id=record.id, language_code="ru",
|
|
final_value="Здравствуй мир",
|
|
)
|
|
|
|
assert result["language_code"] == "ru"
|
|
assert result["final_value"] == "Здравствуй мир"
|
|
|
|
db_session.refresh(lang)
|
|
assert lang.final_value == "Здравствуй мир"
|
|
assert lang.user_edit == "Здравствуй мир"
|
|
# #endregion test_apply_inline_edit
|
|
|
|
# #region test_apply_inline_edit_non_existent_record [C:2] [TYPE Function]
|
|
def test_apply_inline_edit_non_existent_record(self, db_session: Session):
|
|
with pytest.raises((ValueError, KeyError)):
|
|
InlineCorrectionService.apply_inline_edit(
|
|
db=db_session, run_id=str(uuid.uuid4()),
|
|
record_id=str(uuid.uuid4()), language_code="ru",
|
|
final_value="test",
|
|
)
|
|
# #endregion test_apply_inline_edit_non_existent_record
|
|
|
|
# #region test_apply_inline_edit_non_existent_language [C:2] [TYPE Function]
|
|
def test_apply_inline_edit_non_existent_language(self, db_session: Session):
|
|
_, _, _, record, _ = self._create_full_run_tree(db_session)
|
|
|
|
with pytest.raises(ValueError, match="not found"):
|
|
InlineCorrectionService.apply_inline_edit(
|
|
db=db_session, run_id=record.run_id,
|
|
record_id=record.id, language_code="nonexistent",
|
|
final_value="test",
|
|
)
|
|
# #endregion test_apply_inline_edit_non_existent_language
|
|
# #endregion TestInlineCorrectionIntegration
|
|
# #endregion TestTranslateCorrectionsIntegration
|