Files
vgui-cicd/abschnitte/management/commands/test_clear_diagram_cache.py
Adrian A. Baumann 2fa10add66 Add unit tests for clear_diagram_cache management command
- Test clearing all cache
- Test clearing by specific type
- Test clearing empty cache
- Test command properly calls underlying function
- Test command help text
- Integration tests for full workflow
2025-10-24 17:25:58 +00:00

165 lines
5.9 KiB
Python

import os
import tempfile
from io import StringIO
from unittest.mock import patch, Mock
from django.test import TestCase, override_settings
from django.core.management import call_command
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
class ClearDiagramCacheCommandTestCase(TestCase):
"""Test cases for clear_diagram_cache management command."""
@override_settings(MEDIA_ROOT=tempfile.mkdtemp())
def test_clear_all_cache(self):
"""Test clearing all cached diagrams."""
# Create test cache files
test_files = [
'diagram_cache/plantuml/hash1.svg',
'diagram_cache/plantuml/hash2.svg',
'diagram_cache/mermaid/hash3.svg',
]
for path in test_files:
full_path = default_storage.path(path)
os.makedirs(os.path.dirname(full_path), exist_ok=True)
default_storage.save(path, ContentFile(b'test diagram'))
# Verify files exist
for path in test_files:
self.assertTrue(default_storage.exists(path))
# Run command
out = StringIO()
call_command('clear_diagram_cache', stdout=out)
# Verify files are deleted
for path in test_files:
self.assertFalse(default_storage.exists(path))
# Verify success message
output = out.getvalue()
self.assertIn('Clearing all diagram caches', output)
self.assertIn('Cache cleared successfully', output)
@override_settings(MEDIA_ROOT=tempfile.mkdtemp())
def test_clear_cache_by_type(self):
"""Test clearing cache for specific diagram type."""
# Create test cache files
plantuml_files = [
'diagram_cache/plantuml/hash1.svg',
'diagram_cache/plantuml/hash2.svg',
]
mermaid_files = [
'diagram_cache/mermaid/hash3.svg',
]
for path in plantuml_files + mermaid_files:
full_path = default_storage.path(path)
os.makedirs(os.path.dirname(full_path), exist_ok=True)
default_storage.save(path, ContentFile(b'test diagram'))
# Run command for plantuml only
out = StringIO()
call_command('clear_diagram_cache', type='plantuml', stdout=out)
# Verify only plantuml files are deleted
for path in plantuml_files:
self.assertFalse(default_storage.exists(path))
for path in mermaid_files:
self.assertTrue(default_storage.exists(path))
# Verify output message
output = out.getvalue()
self.assertIn('Clearing cache for plantuml', output)
self.assertIn('Cache cleared successfully', output)
@override_settings(MEDIA_ROOT=tempfile.mkdtemp())
def test_clear_empty_cache(self):
"""Test clearing cache when no files exist."""
# Don't create any files
# Should not raise error
out = StringIO()
call_command('clear_diagram_cache', stdout=out)
# Should still show success
output = out.getvalue()
self.assertIn('Cache cleared successfully', output)
@override_settings(MEDIA_ROOT=tempfile.mkdtemp())
@patch('diagramm_proxy.diagram_cache.clear_cache')
def test_command_calls_clear_cache_function(self, mock_clear):
"""Test that command properly calls the clear_cache function."""
# Call without type
call_command('clear_diagram_cache')
mock_clear.assert_called_once_with(None)
# Call with type
mock_clear.reset_mock()
call_command('clear_diagram_cache', type='plantuml')
mock_clear.assert_called_once_with('plantuml')
def test_command_help_text(self):
"""Test that command has proper help text."""
out = StringIO()
call_command('clear_diagram_cache', '--help', stdout=out)
output = out.getvalue()
self.assertIn('Clear cached diagrams', output)
self.assertIn('--type', output)
class ManagementCommandIntegrationTestCase(TestCase):
"""Integration tests for management command with real filesystem."""
@override_settings(MEDIA_ROOT=tempfile.mkdtemp())
def test_full_command_workflow(self):
"""Test complete workflow: create cache, clear specific type, clear all."""
# Create mixed cache files
files = {
'plantuml': [
'diagram_cache/plantuml/abc123.svg',
'diagram_cache/plantuml/def456.svg',
],
'mermaid': [
'diagram_cache/mermaid/ghi789.svg',
],
'graphviz': [
'diagram_cache/graphviz/jkl012.svg',
]
}
# Create all files
for file_list in files.values():
for path in file_list:
full_path = default_storage.path(path)
os.makedirs(os.path.dirname(full_path), exist_ok=True)
default_storage.save(path, ContentFile(b'diagram content'))
# Verify all exist
for file_list in files.values():
for path in file_list:
self.assertTrue(default_storage.exists(path))
# Clear plantuml
call_command('clear_diagram_cache', type='plantuml')
# Verify plantuml deleted, others remain
for path in files['plantuml']:
self.assertFalse(default_storage.exists(path))
for path in files['mermaid']:
self.assertTrue(default_storage.exists(path))
for path in files['graphviz']:
self.assertTrue(default_storage.exists(path))
# Clear all remaining
call_command('clear_diagram_cache')
# Verify all deleted
for file_list in files.values():
for path in file_list:
self.assertFalse(default_storage.exists(path))