Spaces:
Running on Zero
Running on Zero
| import gradio as gr | |
| import pytest | |
| import ui | |
| def _blocks_ctx(): | |
| """Each builder must be called inside a gr.Blocks() context.""" | |
| with gr.Blocks(): | |
| yield | |
| def test_model_soon_row_links_to_zoo_twice(): | |
| html = ui._model_soon_row_html() | |
| assert html.count(ui.MODEL_ZOO_URL) == 2 | |
| assert "Edit" in html and "Omni Base" in html | |
| assert "(coming soon)" in html | |
| assert 'target="_blank"' in html | |
| assert 'rel="noopener noreferrer"' in html | |
| def test_model_soon_row_uses_dim_link_class(): | |
| html = ui._model_soon_row_html() | |
| assert 'class="zis-soon-row"' in html | |
| def test_build_t2i_tab_returns_components(): | |
| components = ui.build_t2i_tab() | |
| expected = { | |
| "prompt", | |
| "negative_prompt", | |
| "model", | |
| "base_group", | |
| "lora_enabled", | |
| "lora_group", | |
| "steps", | |
| "cfg", | |
| "width", | |
| "height", | |
| "seed", | |
| "lora_path", | |
| "lora_strength", | |
| "generate_btn", | |
| "output_image", | |
| "output_meta", | |
| } | |
| assert expected.issubset(components.keys()) | |
| def test_build_t2i_tab_model_is_native_radio(): | |
| components = ui.build_t2i_tab() | |
| assert isinstance(components["model"], gr.Radio) | |
| assert components["model"].value == "Turbo" | |
| # Confirm the radio carries both choices. Gradio stores them as (label, value) | |
| # tuples on the .choices attribute. | |
| values = [c[1] for c in components["model"].choices] | |
| assert values == ["Base", "Turbo"] | |
| def test_build_t2i_tab_lora_group_starts_hidden(): | |
| components = ui.build_t2i_tab() | |
| assert components["lora_group"].visible is False | |
| assert components["lora_enabled"].value is False | |
| def test_build_t2i_tab_base_group_starts_hidden(): | |
| """Turbo is the default model, so the Base-only fields are hidden up front.""" | |
| components = ui.build_t2i_tab() | |
| assert components["base_group"].visible is False | |
| def test_build_controlnet_tab_returns_components(): | |
| components = ui.build_controlnet_tab() | |
| expected = { | |
| "prompt", | |
| "input_image", | |
| "preview_image", | |
| "preprocessor", | |
| "controlnet_scale", | |
| "steps", | |
| "seed", | |
| "lora_enabled", | |
| "lora_group", | |
| "lora_path", | |
| "lora_strength", | |
| "generate_btn", | |
| "output_image", | |
| "output_meta", | |
| } | |
| assert expected.issubset(components.keys()) | |
| def test_build_controlnet_tab_preview_is_non_interactive_image(): | |
| components = ui.build_controlnet_tab() | |
| assert isinstance(components["preview_image"], gr.Image) | |
| assert components["preview_image"].interactive is False | |
| def test_build_upscale_tab_returns_components(): | |
| components = ui.build_upscale_tab() | |
| expected = { | |
| "prompt", | |
| "input_image", | |
| "refine_steps", | |
| "refine_denoise", | |
| "seed", | |
| "generate_btn", | |
| "output_image", | |
| "output_meta", | |
| } | |
| assert expected.issubset(components.keys()) | |
| def test_build_upscale_tab_has_no_lora_components(): | |
| """LoRA is intentionally not wired on Upscale — the refinement pass uses | |
| too low a denoising window for style LoRAs to meaningfully apply.""" | |
| components = ui.build_upscale_tab() | |
| for key in ("lora_enabled", "lora_group", "lora_path", "lora_strength"): | |
| assert key not in components | |