File size: 4,153 Bytes
05b45a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import gradio as gr
import pytest

from ui.lib.components.model import create_model_column
from ui.lib.components.output import create_output_column
from ui.lib.config import AUDIO_FORMATS


def test_create_model_column_structure():
    """Test that create_model_column returns the expected structure"""
    voice_ids = ["voice1", "voice2"]
    column, components = create_model_column(voice_ids)

    # Test return types
    assert isinstance(column, gr.Column)
    assert isinstance(components, dict)

    # Test expected components presence
    expected_components = {"status_btn", "voice", "format", "speed"}
    assert set(components.keys()) == expected_components

    # Test component types
    assert isinstance(components["status_btn"], gr.Button)
    assert isinstance(components["voice"], gr.Dropdown)
    assert isinstance(components["format"], gr.Dropdown)
    assert isinstance(components["speed"], gr.Slider)


def test_model_column_default_values():
    """Test the default values of model column components"""
    voice_ids = ["voice1", "voice2"]
    _, components = create_model_column(voice_ids)

    # Test voice dropdown
    # Gradio Dropdown converts choices to (value, label) tuples
    expected_choices = [(voice_id, voice_id) for voice_id in voice_ids]
    assert components["voice"].choices == expected_choices
    # Value is not converted to tuple format for the value property
    assert components["voice"].value == [voice_ids[0]]
    assert components["voice"].interactive is True
    assert components["voice"].multiselect is True
    assert components["voice"].label == "Voice(s)"

    # Test format dropdown
    # Gradio Dropdown converts choices to (value, label) tuples
    expected_format_choices = [(fmt, fmt) for fmt in AUDIO_FORMATS]
    assert components["format"].choices == expected_format_choices
    assert components["format"].value == "mp3"

    # Test speed slider
    assert components["speed"].minimum == 0.5
    assert components["speed"].maximum == 2.0
    assert components["speed"].value == 1.0
    assert components["speed"].step == 0.1


def test_model_column_no_voices():
    """Test model column creation with no voice IDs"""
    _, components = create_model_column([])

    assert components["voice"].choices == []
    assert components["voice"].value is None


def test_create_output_column_structure():
    """Test that create_output_column returns the expected structure"""
    column, components = create_output_column()

    # Test return types
    assert isinstance(column, gr.Column)
    assert isinstance(components, dict)

    # Test expected components presence
    expected_components = {
        "audio_output",
        "output_files",
        "play_btn",
        "selected_audio",
        "clear_outputs",
    }
    assert set(components.keys()) == expected_components

    # Test component types
    assert isinstance(components["audio_output"], gr.Audio)
    assert isinstance(components["output_files"], gr.Dropdown)
    assert isinstance(components["play_btn"], gr.Button)
    assert isinstance(components["selected_audio"], gr.Audio)
    assert isinstance(components["clear_outputs"], gr.Button)


def test_output_column_configuration():
    """Test the configuration of output column components"""
    _, components = create_output_column()

    # Test audio output configuration
    assert components["audio_output"].label == "Generated Speech"
    assert components["audio_output"].type == "filepath"

    # Test output files dropdown
    assert components["output_files"].label == "Previous Outputs"
    assert components["output_files"].allow_custom_value is True

    # Test play button
    assert components["play_btn"].value == "▶️ Play Selected"
    assert components["play_btn"].size == "sm"

    # Test selected audio configuration
    assert components["selected_audio"].label == "Selected Output"
    assert components["selected_audio"].type == "filepath"
    assert components["selected_audio"].visible is False

    # Test clear outputs button
    assert components["clear_outputs"].size == "sm"
    assert components["clear_outputs"].variant == "secondary"