HF_Agents_Final_Project / tests /test_image_tool.py
Yago Bolivar
feat: implement image processing and chess analysis tools with unit tests
8ff7d8f
import os
import sys
import unittest
from pathlib import Path
# Add the src directory to the path so we can import the modules
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
from image_processing_tool import ImageProcessor
from file_processing_tool import FileIdentifier, process_image_file
class TestImageProcessingTool(unittest.TestCase):
def setUp(self):
self.image_processor = ImageProcessor()
self.file_identifier = FileIdentifier()
self.test_image_path = str(Path(__file__).parent.parent / "data/downloaded_files" / "cca530fc-4052-43b2-b130-b30968d8aa44.png")
# Make sure the test image exists
self.assertTrue(os.path.exists(self.test_image_path), f"Test image not found: {self.test_image_path}")
def test_file_identification(self):
"""Test that the FileIdentifier correctly identifies the PNG image."""
file_info = self.file_identifier.identify_file(self.test_image_path)
self.assertEqual(file_info.get('determined_type'), "image", "File should be identified as an image")
self.assertEqual(file_info.get('suggested_action'), "image_processor", "Action should be image_processor")
def test_image_details(self):
"""Test getting basic image details."""
details = self.image_processor.get_image_details(self.test_image_path)
self.assertIsNotNone(details, "Should return image details")
self.assertIn("width", details, "Should include width in details")
self.assertIn("height", details, "Should include height in details")
self.assertIn("format", details, "Should include format in details")
def test_image_processing(self):
"""Test basic image processing functionality."""
result = self.image_processor.process_image(self.test_image_path)
self.assertIsNotNone(result, "Should return processing result")
self.assertIsInstance(result, str, "Result should be a string")
def test_text_extraction(self):
"""Test OCR text extraction functionality."""
text = self.image_processor.extract_text_from_image(self.test_image_path)
self.assertIsNotNone(text, "Should return extracted text")
self.assertIsInstance(text, str, "Extracted text should be a string")
def test_chess_analysis(self):
"""Test chess position analysis."""
analysis = self.image_processor.analyze_chess_position(self.test_image_path)
self.assertIsNotNone(analysis, "Should return chess analysis")
if isinstance(analysis, dict):
self.assertIn("recommended_move", analysis, "Should include recommended move")
self.assertEqual(analysis["recommended_move"], "Rd5", "Recommended move should be 'Rd5'")
def test_process_image_file_function(self):
"""Test the integrated process_image_file function."""
result = process_image_file(self.test_image_path)
self.assertIsNotNone(result, "Should return processing result")
self.assertIn("details", result, "Should include image details")
self.assertIn("extracted_text", result, "Should include extracted text")
if __name__ == '__main__':
unittest.main()