File size: 2,672 Bytes
edf0f20
 
3645440
edf0f20
 
3645440
 
 
 
 
edf0f20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import pytest
import os
import sys
import shutil
import tempfile
# Ensure backend is in path
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../"))
if BASE_DIR not in sys.path:
    sys.path.insert(0, BASE_DIR)
import backend.models
from backend.models import ModelManager

@pytest.fixture
def temp_models_dir():
    """Create a temporary directory for models."""
    temp_dir = tempfile.mkdtemp()
    yield temp_dir
    shutil.rmtree(temp_dir)

@pytest.fixture
def model_manager(temp_models_dir):
    """Initialize ModelManager with a temporary cache directory."""
    return ModelManager(cache_dir=temp_models_dir)

def test_model_manager_init(temp_models_dir):
    """Test initialization and device selection."""
    manager = ModelManager(cache_dir=temp_models_dir)
    assert manager.cache_dir == os.path.abspath(temp_models_dir)
    assert manager.device in ["cuda", "mps", "cpu"]
    assert os.environ["HF_HOME"] == os.path.join(os.path.abspath(temp_models_dir), "hf_cache")

def test_translate_empty_text(model_manager):
    """should_return_empty_string_when_empty_text_provided"""
    assert model_manager.translate("", "English", "Hindi") == ""
    assert model_manager.translate("   ", "English", "Hindi") == ""

def test_translate_unsupported_language(model_manager):
    """should_raise_value_error_when_unsupported_language_provided"""
    with pytest.raises(ValueError, match="Unsupported translation languages"):
        model_manager.translate("Hello", "English", "Spanish")

def test_translate_same_language(model_manager):
    """should_return_original_text_when_src_and_tgt_lang_are_same"""
    text = "Hello world"
    assert model_manager.translate(text, "English", "English") == text

def test_translate_batch_empty_list(model_manager):
    """should_return_empty_list_when_empty_list_provided"""
    assert model_manager.translate_batch([], "English", "Hindi") == []

def test_translate_batch_whitespace_only(model_manager):
    """should_preserve_whitespace_when_batch_translating"""
    texts = ["", "  ", "\t"]
    results = model_manager.translate_batch(texts, "English", "Hindi")
    assert results == texts

def test_tts_empty_text(model_manager):
    """should_raise_value_error_when_empty_text_provided_for_tts"""
    with pytest.raises(ValueError, match="Empty text provided for TTS"):
        model_manager.text_to_speech("", "English", "out.wav")

def test_tts_unsupported_language(model_manager):
    """should_raise_value_error_when_unsupported_language_provided_for_tts"""
    with pytest.raises(ValueError, match="Unsupported TTS language"):
        model_manager.text_to_speech("Hello", "Spanish", "out.wav")