Implement comprehensive validation system to detect conflicting Vorgaben with overlapping validity periods. Features: - Static method Vorgabe.sanity_check_vorgaben() for global conflict detection - Instance method Vorgabe.find_conflicts() for individual conflict checking - Model validation via Vorgabe.clean() to prevent conflicting data - Utility functions for date range intersection and conflict reporting - Django management command 'sanity_check_vorgaben' for manual checks - Comprehensive test suite with 17 new tests covering all functionality Validation logic ensures Vorgaben with same dokument, thema, and nummer cannot have overlapping gueltigkeit_von/gueltigkeit_bis date ranges. Handles open-ended ranges (None end dates) and provides clear error messages. Files added/modified: - dokumente/models.py: Added sanity check methods and validation - dokumente/utils.py: New utility functions for conflict detection - dokumente/management/commands/sanity_check_vorgaben.py: New management command - dokumente/tests.py: Added comprehensive test coverage - test_sanity_check.py: Standalone test script All tests pass (56/56) with no regressions.
38 lines
826 B
Python
38 lines
826 B
Python
#!/usr/bin/env python
|
|
"""
|
|
Simple script to test Vorgaben sanity checking
|
|
"""
|
|
import os
|
|
import sys
|
|
import django
|
|
|
|
# Setup Django
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'VorgabenUI.settings')
|
|
django.setup()
|
|
|
|
from dokumente.utils import check_vorgabe_conflicts, format_conflict_report
|
|
|
|
|
|
def main():
|
|
print("Running Vorgaben sanity check...")
|
|
print("=" * 50)
|
|
|
|
# Check for conflicts
|
|
conflicts = check_vorgabe_conflicts()
|
|
|
|
# Generate and display report
|
|
report = format_conflict_report(conflicts, verbose=True)
|
|
print(report)
|
|
|
|
print("=" * 50)
|
|
|
|
if conflicts:
|
|
print(f"\n⚠️ Found {len(conflicts)} conflicts that need attention!")
|
|
sys.exit(1)
|
|
else:
|
|
print("✅ All Vorgaben are valid!")
|
|
sys.exit(0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |