Ctrl K
ComunidadGuías…

backend/tests/test_glossary_metadata.py

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""Tests for the new term_type, confidence, approved columns on glossary_entries."""

import pytest

from db.translation import add_glossary_entry, get_glossary_entry, update_glossary_entry


def test_add_glossary_entry_with_metadata(app_ctx):
    """add_glossary_entry stores explicit term_type, confidence, and approved values."""
    entry_id = add_glossary_entry(
        series_id=1,
        source_term="Naruto",
        target_term="Naruto",
        notes="main character",
        term_type="character",
        confidence=0.95,
        approved=0,
    )
    assert isinstance(entry_id, int)

    entry = get_glossary_entry(entry_id)
    assert entry is not None
    assert entry["source_term"] == "Naruto"
    assert entry["target_term"] == "Naruto"
    assert entry["term_type"] == "character"
    assert pytest.approx(entry["confidence"], abs=1e-6) == 0.95
    assert entry["approved"] == 0


def test_add_glossary_entry_defaults(app_ctx):
    """add_glossary_entry uses correct defaults: term_type='other', confidence=None, approved=1."""
    entry_id = add_glossary_entry(
        series_id=None,
        source_term="Konoha",
        target_term="Konoha",
    )
    assert isinstance(entry_id, int)

    entry = get_glossary_entry(entry_id)
    assert entry is not None
    assert entry["term_type"] == "other"
    assert entry["confidence"] is None
    assert entry["approved"] == 1


def test_update_glossary_entry_metadata(app_ctx):
    """update_glossary_entry can update term_type, confidence, and approved independently."""
    entry_id = add_glossary_entry(
        series_id=2,
        source_term="Hokage",
        target_term="Hokage",
        term_type="other",
        confidence=None,
        approved=1,
    )

    # Update term_type and approved only — confidence should remain None
    result = update_glossary_entry(entry_id, term_type="place", approved=0)
    assert result is True

    entry = get_glossary_entry(entry_id)
    assert entry["term_type"] == "place"
    assert entry["approved"] == 0
    assert entry["confidence"] is None  # unchanged

    # Now set confidence explicitly
    result = update_glossary_entry(entry_id, confidence=0.7)
    assert result is True

    entry = get_glossary_entry(entry_id)
    assert pytest.approx(entry["confidence"], abs=1e-6) == 0.7

    # Clear confidence back to None via explicit None
    result = update_glossary_entry(entry_id, confidence=None)
    assert result is True

    entry = get_glossary_entry(entry_id)
    assert entry["confidence"] is None


def test_update_glossary_entry_no_fields(app_ctx):
    """update_glossary_entry returns False when no fields are provided."""
    entry_id = add_glossary_entry(
        series_id=3,
        source_term="Sensei",
        target_term="Lehrer",
        term_type="other",
    )

    result = update_glossary_entry(entry_id)
    assert result is False


def test_add_glossary_entry_place_type(app_ctx):
    """add_glossary_entry stores 'place' as term_type correctly."""
    entry_id = add_glossary_entry(
        series_id=4,
        source_term="Hidden Leaf Village",
        target_term="Verborgenes Blatt-Dorf",
        term_type="place",
        confidence=0.88,
        approved=1,
    )

    entry = get_glossary_entry(entry_id)
    assert entry["term_type"] == "place"
    assert pytest.approx(entry["confidence"], abs=1e-6) == 0.88
    assert entry["approved"] == 1