Spaces:
Build error
Build error
test: update widget tests for APKG export components
Browse files- tests/widgets_test.py +26 -21
tests/widgets_test.py
CHANGED
|
@@ -93,31 +93,30 @@ def test_voice_map_instruct_strings_format():
|
|
| 93 |
|
| 94 |
|
| 95 |
def test_enable_phase2_returns_tuple(_mock_gradio):
|
| 96 |
-
"""_enable_phase2() returns tuple of (Checkbox, Checkbox, Button, Dropdown, Button, CSS).
|
| 97 |
-
|
| 98 |
-
Export button is VISIBLE but DISABLED here — it is enabled after Phase 2 completes
|
| 99 |
-
(when _current_cards is populated) via _on_media_generation_complete().
|
| 100 |
-
"""
|
| 101 |
from frontend.ui.widgets import _enable_phase2
|
| 102 |
|
| 103 |
result = _enable_phase2()
|
| 104 |
assert isinstance(result, tuple)
|
| 105 |
-
assert len(result) ==
|
| 106 |
|
| 107 |
|
| 108 |
def test_reset_to_idle_returns_tuple(_mock_gradio):
|
| 109 |
-
"""_reset_to_idle() returns tuple with interactive=False, disabled CSS string, export
|
| 110 |
from frontend.ui.widgets import _reset_to_idle
|
| 111 |
|
| 112 |
result = _reset_to_idle()
|
| 113 |
assert isinstance(result, tuple)
|
| 114 |
-
assert len(result) ==
|
| 115 |
# Element at index 5 should be a CSS string (non-empty)
|
| 116 |
assert isinstance(result[5], str)
|
| 117 |
assert len(result[5]) > 0
|
| 118 |
-
# Elements at indices 6, 7 should be the export
|
| 119 |
-
assert isinstance(result[6], MagicMock) #
|
| 120 |
-
assert isinstance(result[7], MagicMock) #
|
|
|
|
|
|
|
|
|
|
| 121 |
|
| 122 |
|
| 123 |
def test_reset_to_idle_disabled_css_content(_mock_gradio):
|
|
@@ -125,6 +124,7 @@ def test_reset_to_idle_disabled_css_content(_mock_gradio):
|
|
| 125 |
from frontend.ui.widgets import _reset_to_idle
|
| 126 |
|
| 127 |
result = _reset_to_idle()
|
|
|
|
| 128 |
css = result[5]
|
| 129 |
assert "europalex-btn-disabled" in css or "toggle-images" in css
|
| 130 |
assert "#voice-dropdown" in css
|
|
@@ -153,12 +153,12 @@ def test_enable_language_dropdown_on_audio_false(_mock_gradio):
|
|
| 153 |
|
| 154 |
|
| 155 |
def test_restore_generate_cards_button_returns_tuple(_mock_gradio):
|
| 156 |
-
"""_restore_generate_cards_button() returns tuple of (Button, Button)."""
|
| 157 |
from frontend.ui.widgets import _restore_generate_cards_button
|
| 158 |
|
| 159 |
result = _restore_generate_cards_button()
|
| 160 |
assert isinstance(result, tuple)
|
| 161 |
-
assert len(result) ==
|
| 162 |
|
| 163 |
|
| 164 |
def test_restore_generate_cards_button_makes_button_visible_interactive(_mock_gradio):
|
|
@@ -166,33 +166,38 @@ def test_restore_generate_cards_button_makes_button_visible_interactive(_mock_gr
|
|
| 166 |
from frontend.ui.widgets import _restore_generate_cards_button
|
| 167 |
|
| 168 |
_restore_generate_cards_button()
|
| 169 |
-
# gr.Button was called
|
| 170 |
calls = _mock_gradio.Button.call_args_list
|
| 171 |
-
assert len(calls) ==
|
| 172 |
first_call_kwargs = calls[0].kwargs if calls[0].kwargs else calls[0][1]
|
| 173 |
assert first_call_kwargs.get("visible") is True
|
| 174 |
assert first_call_kwargs.get("interactive") is True
|
| 175 |
|
| 176 |
|
| 177 |
def test_restore_generate_cards_button_export_stays_disabled(_mock_gradio):
|
| 178 |
-
"""Export
|
| 179 |
from frontend.ui.widgets import _restore_generate_cards_button
|
| 180 |
|
| 181 |
_restore_generate_cards_button()
|
| 182 |
calls = _mock_gradio.Button.call_args_list
|
| 183 |
-
assert len(calls) ==
|
|
|
|
| 184 |
second_call_kwargs = calls[1].kwargs if calls[1].kwargs else calls[1][1]
|
| 185 |
assert second_call_kwargs.get("visible") is True
|
| 186 |
assert second_call_kwargs.get("interactive") is False
|
|
|
|
|
|
|
|
|
|
|
|
|
| 187 |
|
| 188 |
|
| 189 |
def test_restore_generate_cards_button_only_returns_tuple(_mock_gradio):
|
| 190 |
-
"""_restore_generate_cards_button_only() returns tuple of
|
| 191 |
from frontend.ui.widgets import _restore_generate_cards_button_only
|
| 192 |
|
| 193 |
result = _restore_generate_cards_button_only()
|
| 194 |
assert isinstance(result, tuple)
|
| 195 |
-
assert len(result) ==
|
| 196 |
|
| 197 |
|
| 198 |
def test_restore_generate_cards_button_only_hides_generate_text(_mock_gradio):
|
|
@@ -201,7 +206,7 @@ def test_restore_generate_cards_button_only_hides_generate_text(_mock_gradio):
|
|
| 201 |
|
| 202 |
_restore_generate_cards_button_only()
|
| 203 |
calls = _mock_gradio.Button.call_args_list
|
| 204 |
-
assert len(calls) ==
|
| 205 |
first_call_kwargs = calls[0].kwargs if calls[0].kwargs else calls[0][1]
|
| 206 |
assert first_call_kwargs.get("visible") is False
|
| 207 |
|
|
@@ -212,7 +217,7 @@ def test_restore_generate_cards_button_only_restores_generate_cards(_mock_gradio
|
|
| 212 |
|
| 213 |
_restore_generate_cards_button_only()
|
| 214 |
calls = _mock_gradio.Button.call_args_list
|
| 215 |
-
assert len(calls) ==
|
| 216 |
second_call_kwargs = calls[1].kwargs if calls[1].kwargs else calls[1][1]
|
| 217 |
assert second_call_kwargs.get("visible") is True
|
| 218 |
assert second_call_kwargs.get("interactive") is True
|
|
|
|
| 93 |
|
| 94 |
|
| 95 |
def test_enable_phase2_returns_tuple(_mock_gradio):
|
| 96 |
+
"""_enable_phase2() returns tuple of (Checkbox, Checkbox, Button, Dropdown, Button, Button, File, File, CSS)."""
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
from frontend.ui.widgets import _enable_phase2
|
| 98 |
|
| 99 |
result = _enable_phase2()
|
| 100 |
assert isinstance(result, tuple)
|
| 101 |
+
assert len(result) == 9
|
| 102 |
|
| 103 |
|
| 104 |
def test_reset_to_idle_returns_tuple(_mock_gradio):
|
| 105 |
+
"""_reset_to_idle() returns tuple with interactive=False, disabled CSS string, export buttons, and file components."""
|
| 106 |
from frontend.ui.widgets import _reset_to_idle
|
| 107 |
|
| 108 |
result = _reset_to_idle()
|
| 109 |
assert isinstance(result, tuple)
|
| 110 |
+
assert len(result) == 10
|
| 111 |
# Element at index 5 should be a CSS string (non-empty)
|
| 112 |
assert isinstance(result[5], str)
|
| 113 |
assert len(result[5]) > 0
|
| 114 |
+
# Elements at indices 6, 7 should be the export buttons
|
| 115 |
+
assert isinstance(result[6], MagicMock) # export_csv_btn
|
| 116 |
+
assert isinstance(result[7], MagicMock) # export_apkg_btn
|
| 117 |
+
# Elements at indices 8, 9 should be the file components
|
| 118 |
+
assert isinstance(result[8], MagicMock) # export_file
|
| 119 |
+
assert isinstance(result[9], MagicMock) # export_apkg_file
|
| 120 |
|
| 121 |
|
| 122 |
def test_reset_to_idle_disabled_css_content(_mock_gradio):
|
|
|
|
| 124 |
from frontend.ui.widgets import _reset_to_idle
|
| 125 |
|
| 126 |
result = _reset_to_idle()
|
| 127 |
+
# CSS is at index 5 (after generate_text_btn, images_toggle, audio_toggle, generate_cards_btn, voice_dropdown)
|
| 128 |
css = result[5]
|
| 129 |
assert "europalex-btn-disabled" in css or "toggle-images" in css
|
| 130 |
assert "#voice-dropdown" in css
|
|
|
|
| 153 |
|
| 154 |
|
| 155 |
def test_restore_generate_cards_button_returns_tuple(_mock_gradio):
|
| 156 |
+
"""_restore_generate_cards_button() returns tuple of (Button, Button, Button)."""
|
| 157 |
from frontend.ui.widgets import _restore_generate_cards_button
|
| 158 |
|
| 159 |
result = _restore_generate_cards_button()
|
| 160 |
assert isinstance(result, tuple)
|
| 161 |
+
assert len(result) == 3
|
| 162 |
|
| 163 |
|
| 164 |
def test_restore_generate_cards_button_makes_button_visible_interactive(_mock_gradio):
|
|
|
|
| 166 |
from frontend.ui.widgets import _restore_generate_cards_button
|
| 167 |
|
| 168 |
_restore_generate_cards_button()
|
| 169 |
+
# gr.Button was called three times: generate_cards_btn, export_csv_btn, export_apkg_btn
|
| 170 |
calls = _mock_gradio.Button.call_args_list
|
| 171 |
+
assert len(calls) == 3
|
| 172 |
first_call_kwargs = calls[0].kwargs if calls[0].kwargs else calls[0][1]
|
| 173 |
assert first_call_kwargs.get("visible") is True
|
| 174 |
assert first_call_kwargs.get("interactive") is True
|
| 175 |
|
| 176 |
|
| 177 |
def test_restore_generate_cards_button_export_stays_disabled(_mock_gradio):
|
| 178 |
+
"""Export buttons stay visible but disabled."""
|
| 179 |
from frontend.ui.widgets import _restore_generate_cards_button
|
| 180 |
|
| 181 |
_restore_generate_cards_button()
|
| 182 |
calls = _mock_gradio.Button.call_args_list
|
| 183 |
+
assert len(calls) == 3
|
| 184 |
+
# Second call: export_csv_btn (disabled)
|
| 185 |
second_call_kwargs = calls[1].kwargs if calls[1].kwargs else calls[1][1]
|
| 186 |
assert second_call_kwargs.get("visible") is True
|
| 187 |
assert second_call_kwargs.get("interactive") is False
|
| 188 |
+
# Third call: export_apkg_btn (disabled)
|
| 189 |
+
third_call_kwargs = calls[2].kwargs if calls[2].kwargs else calls[2][1]
|
| 190 |
+
assert third_call_kwargs.get("visible") is True
|
| 191 |
+
assert third_call_kwargs.get("interactive") is False
|
| 192 |
|
| 193 |
|
| 194 |
def test_restore_generate_cards_button_only_returns_tuple(_mock_gradio):
|
| 195 |
+
"""_restore_generate_cards_button_only() returns tuple of 4 (Button, Button, Button, Button)."""
|
| 196 |
from frontend.ui.widgets import _restore_generate_cards_button_only
|
| 197 |
|
| 198 |
result = _restore_generate_cards_button_only()
|
| 199 |
assert isinstance(result, tuple)
|
| 200 |
+
assert len(result) == 4
|
| 201 |
|
| 202 |
|
| 203 |
def test_restore_generate_cards_button_only_hides_generate_text(_mock_gradio):
|
|
|
|
| 206 |
|
| 207 |
_restore_generate_cards_button_only()
|
| 208 |
calls = _mock_gradio.Button.call_args_list
|
| 209 |
+
assert len(calls) == 4
|
| 210 |
first_call_kwargs = calls[0].kwargs if calls[0].kwargs else calls[0][1]
|
| 211 |
assert first_call_kwargs.get("visible") is False
|
| 212 |
|
|
|
|
| 217 |
|
| 218 |
_restore_generate_cards_button_only()
|
| 219 |
calls = _mock_gradio.Button.call_args_list
|
| 220 |
+
assert len(calls) == 4
|
| 221 |
second_call_kwargs = calls[1].kwargs if calls[1].kwargs else calls[1][1]
|
| 222 |
assert second_call_kwargs.get("visible") is True
|
| 223 |
assert second_call_kwargs.get("interactive") is True
|