Skip to content

Commit

Permalink
Add depth limiting tests and enhance argument handling in test suite
Browse files Browse the repository at this point in the history
  • Loading branch information
Maralai committed Feb 1, 2025
1 parent 12535af commit d8d3ced
Showing 1 changed file with 88 additions and 31 deletions.
119 changes: 88 additions & 31 deletions tests/test_summarize_gpt.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import sys
import logging
import tempfile
from unittest.mock import patch, MagicMock
from unittest.mock import patch
from summarizeGPT.summarizeGPT import (
summarize_directory,
get_tree_view,
Expand Down Expand Up @@ -38,7 +38,7 @@ def test_summarize_directory_basic(self):
"""Test basic directory summarization"""
result = summarize_directory(self.test_dir)
self.assertIsInstance(result, str)
self.assertIn(self.test_dir.replace("\\", "/"), result) # Ensure proper path formatting
self.assertIn(os.path.basename(self.test_dir), result)
self.assertIn("test.txt", result)

def test_get_tree_view_basic(self):
Expand Down Expand Up @@ -73,20 +73,21 @@ def test_logging_setup_non_verbose(self):
@patch('sys.exit')
def test_docker_flags_conflict(self, mock_exit, mock_args):
"""Test handling of conflicting docker flags"""
# Mock the parsed arguments
mock_args.return_value = MagicMock(
directory=self.test_dir,
gitignore=None,
include=None,
exclude=None,
show_docker=True,
show_only_docker=True,
max_lines=None,
encoding='cl100k_base',
verbose=False
)

# Capture log messages directly
mock_args.return_value = type('Args', (), {
'directory': self.test_dir,
'gitignore': None,
'include': None,
'exclude': None,
'show_docker': True,
'show_only_docker': True,
'max_lines': None,
'encoding': 'cl100k_base',
'verbose': False,
'tree_depth': None,
'file_depth': None,
'max_depth': None # Added missing attribute
})()

with patch('logging.Logger.error') as mock_logger:
main()
mock_logger.assert_called_once_with(
Expand All @@ -98,27 +99,27 @@ def test_docker_flags_conflict(self, mock_exit, mock_args):
@patch('sys.exit')
def test_file_write_error(self, mock_exit, mock_args):
"""Test handling of file write errors"""
# Mock the parsed arguments
mock_args.return_value = MagicMock(
directory=self.test_dir,
gitignore=None,
include=None,
exclude=None,
show_docker=False,
show_only_docker=False,
max_lines=None,
encoding='cl100k_base',
verbose=False
)

# Create a mock that only affects the output file
mock_args.return_value = type('Args', (), {
'directory': self.test_dir,
'gitignore': None,
'include': None,
'exclude': None,
'show_docker': False,
'show_only_docker': False,
'max_lines': None,
'encoding': 'cl100k_base',
'verbose': False,
'tree_depth': None,
'file_depth': None,
'max_depth': None # Added missing attribute
})()

original_open = open
def mock_open_wrapper(*args, **kwargs):
if args and isinstance(args[0], str) and args[0].endswith(output_file):
raise IOError("Permission denied")
return original_open(*args, **kwargs)

# Capture log messages directly
with patch('builtins.open', side_effect=mock_open_wrapper):
with patch('logging.Logger.error') as mock_logger:
main()
Expand All @@ -127,5 +128,61 @@ def mock_open_wrapper(*args, **kwargs):
)
mock_exit.assert_called_once_with(1)

def test_depth_limiting(self):
"""Test directory depth limiting functionality"""
# Create a nested directory structure
nested_dir = os.path.join(self.test_dir, "level1", "level2")
os.makedirs(nested_dir)

# Create files at different levels
with open(os.path.join(self.test_dir, "root.txt"), "w") as f:
f.write("root")
with open(os.path.join(self.test_dir, "level1", "level1.txt"), "w") as f:
f.write("level1")
with open(os.path.join(nested_dir, "level2.txt"), "w") as f:
f.write("level2")

# Test with tree_depth=2 to ensure we see one level of nesting
result = summarize_directory(self.test_dir, tree_depth=2, file_depth=2)
self.assertIn("root.txt", result)
self.assertIn("level1", result)
self.assertIn("level1.txt", result)
self.assertIn("root", result) # File content
self.assertIn("level1", result) # File content

def test_depth_edge_cases(self):
"""Test edge cases for depth parameters"""
nested_dir = os.path.join(self.test_dir, "level1", "level2")
os.makedirs(nested_dir)

with open(os.path.join(self.test_dir, "root.txt"), "w") as f:
f.write("root")

# Test with depth=0
result = summarize_directory(self.test_dir, tree_depth=0, file_depth=0)
self.assertIn(os.path.basename(self.test_dir), result)

# Test with unlimited depth
result = summarize_directory(self.test_dir, tree_depth=None, file_depth=None)
self.assertIn("root.txt", result)

def test_separate_tree_and_file_depths(self):
"""Test different depth limits for tree view and file contents"""
with tempfile.TemporaryDirectory() as tmp_dir:
# Create a nested directory structure
os.makedirs(os.path.join(tmp_dir, "level1/level2"))
with open(os.path.join(tmp_dir, "level1/file1.txt"), "w") as f:
f.write("level1 content")
with open(os.path.join(tmp_dir, "level1/level2/file2.txt"), "w") as f:
f.write("level2 content")

result = summarize_directory(tmp_dir, tree_depth=2, file_depth=2)

# Check tree view shows both levels and file contents
self.assertIn("level1", result)
self.assertIn("file1.txt", result)
self.assertIn("level1 content", result)
self.assertNotIn("level2 content", result)

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

0 comments on commit d8d3ced

Please sign in to comment.