ada-assistant / tests /unit /test_ui.py
syum-af's picture
refactor
503a15e
Raw
History Blame Contribute Delete
6.23 kB
"""Unit tests for UI components and logic."""
import unittest.mock as mock
import tempfile
import os
from src.ui import AdaAssistantUI
class TestFileSelectionHandler:
"""Test cases for file selection handler logic."""
def test_handle_non_ada_file_returns_empty_results(self):
"""Test that non-Ada files return empty results and hidden components."""
# Create mock project handler
mock_project_handler = mock.Mock()
# Create UI instance
ui = AdaAssistantUI(mock_project_handler)
# Test with Python file
result = ui.handle_file_selection("test.py")
# Should return empty strings and False visibility for all components
analysis_result, python_code, unit_tests, analysis_visible, python_visible, tests_visible = result
assert analysis_result == ""
assert python_code == ""
assert unit_tests == ""
assert analysis_visible.visible == False
assert python_visible.visible == False
assert tests_visible.visible == False
# Ensure no project handler methods were called
mock_project_handler.process_ada_file.assert_not_called()
def test_handle_empty_file_selection_returns_empty_results(self):
"""Test that empty file selection returns empty results."""
# Create mock project handler
mock_project_handler = mock.Mock()
# Create UI instance
ui = AdaAssistantUI(mock_project_handler)
# Test with None/empty selection
result = ui.handle_file_selection(None)
# Should return empty strings and False visibility for all components
analysis_result, python_code, unit_tests, analysis_visible, python_visible, tests_visible = result
assert analysis_result == ""
assert python_code == ""
assert unit_tests == ""
assert analysis_visible.visible == False
assert python_visible.visible == False
assert tests_visible.visible == False
# Ensure no project handler methods were called
mock_project_handler.process_ada_file.assert_not_called()
def test_handle_various_non_ada_file_extensions(self):
"""Test that various non-Ada file extensions are properly rejected."""
# Create mock project handler
mock_project_handler = mock.Mock()
# Create UI instance
ui = AdaAssistantUI(mock_project_handler)
# Test various non-Ada file types
non_ada_files = ["test.py", "main.c", "config.txt", "data.json", "readme.md", "script.sh"]
for file_path in non_ada_files:
result = ui.handle_file_selection(file_path)
analysis_result, python_code, unit_tests, analysis_visible, python_visible, tests_visible = result
# All should return empty results
assert analysis_result == "", f"Failed for {file_path}"
assert python_code == "", f"Failed for {file_path}"
assert unit_tests == "", f"Failed for {file_path}"
assert analysis_visible.visible == False, f"Failed for {file_path}"
assert python_visible.visible == False, f"Failed for {file_path}"
assert tests_visible.visible == False, f"Failed for {file_path}"
# Ensure no project handler methods were called for any file
mock_project_handler.process_ada_file.assert_not_called()
class TestZipUploadHandler:
"""Test cases for zip upload handler logic."""
def test_handle_zip_upload_with_none_file(self):
"""Test that None file upload returns appropriate message."""
# Create mock project handler
mock_project_handler = mock.Mock()
# Create UI instance
ui = AdaAssistantUI(mock_project_handler)
result = ui.handle_zip_upload(None)
# Should return None path and error message
extracted_path, message = result
assert extracted_path is None
assert message == "No zip file uploaded"
def test_handle_zip_upload_with_invalid_file(self):
"""Test that invalid zip file returns error message."""
# Create mock project handler
mock_project_handler = mock.Mock()
mock_project_handler.unzip_project.side_effect = Exception("Bad zip file")
# Create UI instance
ui = AdaAssistantUI(mock_project_handler)
# Create a mock file object with a non-zip file
mock_file = mock.Mock()
# Create a temporary text file
with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False) as temp_file:
temp_file.write("This is not a zip file")
mock_file.name = temp_file.name
try:
result = ui.handle_zip_upload(mock_file)
# extract_project catches the exception and returns error string
# handle_zip_upload treats this as a valid path
extracted_path, message = result
assert "Error processing file: Bad zip file" in extracted_path
assert "Project extracted to:" in message
finally:
# Cleanup
os.unlink(mock_file.name)
def test_handle_zip_upload_with_nonexistent_file(self):
"""Test that non-existent file returns error message."""
# Create mock project handler
mock_project_handler = mock.Mock()
mock_project_handler.unzip_project.side_effect = Exception("File not found")
# Create UI instance
ui = AdaAssistantUI(mock_project_handler)
# Create a mock file object with non-existent path
mock_file = mock.Mock()
mock_file.name = "/path/that/does/not/exist.zip"
result = ui.handle_zip_upload(mock_file)
# extract_project catches the exception and returns error string
# handle_zip_upload treats this as a valid path
extracted_path, message = result
assert "Error processing file: File not found" in extracted_path
assert "Project extracted to:" in message