File size: 3,698 Bytes
7ab7df1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Tests for ui/components.py module."""

from unittest.mock import MagicMock, patch

import pytest

from ui.components import CUSTOM_CSS, create_ui_components


def test_custom_css():
    """Test that CUSTOM_CSS is defined."""
    assert isinstance(CUSTOM_CSS, str)
    assert len(CUSTOM_CSS) > 0
    assert ".generating" in CUSTOM_CSS
    assert "h1" in CUSTOM_CSS


@patch("ui.components.gr")
def test_create_ui_components(mock_gr):
    """Test create_ui_components function."""
    # Create mock components
    mock_components = {
        "rag_enabled": MagicMock(),
        "search_type": MagicMock(),
        "doc_filter": MagicMock(),
        "query_rewriting": MagicMock(),
        "reranking": MagicMock(),
        "hybrid_alpha": MagicMock(),
        "chatbot": MagicMock(),
        "context_box": MagicMock(),
        "msg": MagicMock(),
        "submit": MagicMock(),
        "clear": MagicMock(),
        "search_col": MagicMock(),
        "filter_col": MagicMock(),
        "context_section": MagicMock(),
        "advanced_options": MagicMock(),
    }

    # Setup Blocks mock
    mock_blocks = MagicMock()
    mock_blocks.__enter__ = MagicMock(return_value=mock_blocks)
    mock_blocks.__exit__ = MagicMock(return_value=None)
    mock_gr.Blocks.return_value = mock_blocks

    # Setup context manager mocks
    def create_context_manager(name):
        cm = MagicMock()
        cm.__enter__ = MagicMock(return_value=cm)
        cm.__exit__ = MagicMock(return_value=None)
        return cm

    mock_gr.Row.return_value = create_context_manager("Row")
    mock_gr.Column.return_value = create_context_manager("Column")
    mock_gr.Accordion.return_value = create_context_manager("Accordion")

    # Setup component mocks
    mock_gr.Markdown.return_value = MagicMock()
    mock_gr.Checkbox.return_value = mock_components["rag_enabled"]
    mock_gr.Radio.return_value = mock_components["search_type"]
    mock_gr.Dropdown.return_value = mock_components["doc_filter"]
    mock_gr.Slider.return_value = mock_components["hybrid_alpha"]
    mock_gr.Chatbot.return_value = mock_components["chatbot"]
    mock_gr.Textbox.return_value = mock_components["msg"]
    mock_gr.Button.side_effect = [mock_components["submit"], mock_components["clear"]]
    mock_gr.Examples.return_value = MagicMock()

    # Test
    result = create_ui_components(["test1.pdf", "test2.pdf"])

    assert isinstance(result, dict)
    assert "demo" in result
    assert "rag_enabled" in result
    assert "search_type" in result
    assert "doc_filter" in result
    assert "chatbot" in result
    assert "msg" in result
    assert "submit" in result
    assert "clear" in result


def test_create_ui_components_empty_sources():
    """Test create_ui_components with empty sources."""
    with patch("ui.components.gr") as mock_gr:
        mock_blocks = MagicMock()
        mock_blocks.__enter__ = MagicMock(return_value=mock_blocks)
        mock_blocks.__exit__ = MagicMock(return_value=None)
        mock_gr.Blocks.return_value = mock_blocks

        # Mock all components
        for attr in ["Markdown", "Row", "Column", "Accordion", "Checkbox", "Radio", 
                     "Dropdown", "Slider", "Chatbot", "Textbox", "Button", "Examples"]:
            setattr(mock_gr, attr, MagicMock())

        # Mock context managers
        for cm in ["Row", "Column", "Accordion"]:
            mock_cm = MagicMock()
            mock_cm.__enter__ = MagicMock(return_value=mock_cm)
            mock_cm.__exit__ = MagicMock(return_value=None)
            getattr(mock_gr, cm).return_value = mock_cm

        result = create_ui_components([])

        assert isinstance(result, dict)
        assert "doc_filter" in result