File size: 4,976 Bytes
60b6623
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/usr/bin/env python3
"""Unit tests for VLM service"""

import unittest
from unittest.mock import Mock, patch, MagicMock, AsyncMock
import sys
import os

# Add the app directory to the path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', 'app'))

from services.vlm_service import VLMServiceManager, ModelType
from services.stub_vlm_service import StubVLMService

class TestVLMServiceManager(unittest.TestCase):
    """Test cases for VLM service manager"""

    def setUp(self):
        """Set up test fixtures"""
        self.manager = VLMServiceManager()
        self.stub_service = StubVLMService()

    def test_register_service(self):
        """Test registering a VLM service"""
        # Act
        self.manager.register_service(self.stub_service)
        
        # Assert
        self.assertIn(self.stub_service.model_name, self.manager.services)
        self.assertEqual(self.manager.default_service, self.stub_service.model_name)

    def test_get_service_existing(self):
        """Test getting an existing service"""
        # Arrange
        self.manager.register_service(self.stub_service)
        
        # Act
        service = self.manager.get_service(self.stub_service.model_name)
        
        # Assert
        self.assertEqual(service, self.stub_service)

    def test_get_service_nonexistent(self):
        """Test getting a non-existent service"""
        # Act
        service = self.manager.get_service("non_existent")
        
        # Assert
        self.assertIsNone(service)

    def test_get_default_service(self):
        """Test getting the default service"""
        # Arrange
        self.manager.register_service(self.stub_service)
        
        # Act
        default_service = self.manager.get_default_service()
        
        # Assert
        self.assertEqual(default_service, self.stub_service)

    def test_get_default_service_none(self):
        """Test getting default service when none registered"""
        # Act
        default_service = self.manager.get_default_service()
        
        # Assert
        self.assertIsNone(default_service)

    def test_get_available_models(self):
        """Test getting available model names"""
        # Arrange
        self.manager.register_service(self.stub_service)
        
        # Act
        models = self.manager.get_available_models()
        
        # Assert
        self.assertIsInstance(models, list)
        self.assertIn(self.stub_service.model_name, models)

    def test_get_available_models_empty(self):
        """Test getting available models when none registered"""
        # Act
        models = self.manager.get_available_models()
        
        # Assert
        self.assertEqual(models, [])

class TestStubVLMService(unittest.TestCase):
    """Test cases for stub VLM service"""

    def setUp(self):
        """Set up test fixtures"""
        self.stub_service = StubVLMService()

    def test_stub_service_initialization(self):
        """Test stub service initialization"""
        # Assert
        self.assertEqual(self.stub_service.model_name, "STUB_MODEL")
        self.assertEqual(self.stub_service.model_type, ModelType.CUSTOM)
        self.assertTrue(self.stub_service.is_available)

    def test_stub_service_model_info(self):
        """Test stub service model information"""
        # Act
        model_info = self.stub_service.get_model_info()
        
        # Assert
        self.assertIsInstance(model_info, dict)
        self.assertIn('name', model_info)
        self.assertIn('type', model_info)
        self.assertIn('available', model_info)
        self.assertEqual(model_info['name'], 'STUB_MODEL')
        self.assertEqual(model_info['type'], 'custom')
        self.assertTrue(model_info['available'])



    def test_stub_service_inheritance(self):
        """Test that stub service inherits from VLMService"""
        # Assert
        self.assertIsInstance(self.stub_service, StubVLMService)
        # Note: Can't test isinstance(self.stub_service, VLMService) due to import issues

class TestModelType(unittest.TestCase):
    """Test cases for ModelType enum"""

    def test_model_type_values(self):
        """Test ModelType enum values"""
        # Assert
        self.assertEqual(ModelType.GPT4V.value, "gpt4v")
        self.assertEqual(ModelType.CLAUDE_3_5_SONNET.value, "claude_3_5_sonnet")
        self.assertEqual(ModelType.GEMINI_PRO_VISION.value, "gemini_pro_vision")
        self.assertEqual(ModelType.LLAMA_VISION.value, "llama_vision")
        self.assertEqual(ModelType.CUSTOM.value, "custom")

    def test_model_type_enumeration(self):
        """Test ModelType enum iteration"""
        # Act
        types = list(ModelType)
        
        # Assert
        self.assertGreater(len(types), 0)
        for model_type in types:
            self.assertIsInstance(model_type, ModelType)
            self.assertIsInstance(model_type.value, str)

if __name__ == '__main__':
    unittest.main()